{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,19 +1,19 @@\n-Zip file size: 6278973 bytes, number of entries: 460\n+Zip file size: 6291931 bytes, number of entries: 460\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n--rw----     2.0 fat    69353 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n+-rw----     2.0 fat    82172 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat      262 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      162 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.properties\n -rw----     2.0 fat     6980 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.xml\n--rw----     2.0 fat     1239 bX stor 70-Jan-01 00:00 build.properties\n+-rw----     2.0 fat     1199 bX stor 70-Jan-01 00:00 build.properties\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.22.0/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.22.0/org.apache.nifi.processors.airtable.QueryAirtableTable/\n -rw----     2.0 fat     2722 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/1.22.0/org.apache.nifi.processors.airtable.QueryAirtableTable/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-ambari-nar/\n@@ -454,9 +454,9 @@\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-workday-processors-nar/1.22.0/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-workday-processors-nar/1.22.0/org.apache.nifi.processors.workday.GetWorkdayReport/\n -rw----     2.0 fat     2772 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-workday-processors-nar/1.22.0/org.apache.nifi.processors.workday.GetWorkdayReport/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.22.0/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.22.0/org.apache.nifi.processors.zendesk.GetZendesk/\n -rw----     2.0 fat     3375 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/1.22.0/org.apache.nifi.processors.zendesk.GetZendesk/additionalDetails.html\n--rw----     2.0 fat  5017948 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n-460 files, 6146341 bytes uncompressed, 6146341 bytes compressed:  0.0%\n+-rw----     2.0 fat  5018127 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n+460 files, 6159299 bytes uncompressed, 6159299 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -39,24487 +39,24487 @@\n #\n 000063 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 000065   Length              0005 (5)\n 000067   Flags               01 (1) 'Modification'\n 000068   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 00006C PAYLOAD\n \n-010F55 DATA DESCRIPTOR       08074B50 (134695760)\n-010F59 CRC                   B1526E92 (2974969490)\n-010F5D Compressed Size       00010EE9 (69353)\n-010F61 Uncompressed Size     00010EE9 (69353)\n-\n-010F65 LOCAL HEADER #3       04034B50 (67324752)\n-010F69 Extract Zip Spec      14 (20) '2.0'\n-010F6A Extract OS            00 (0) 'MS-DOS'\n-010F6B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-010F6D Compression Method    0000 (0) 'Stored'\n-010F6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010F73 CRC                   00000000 (0)\n-010F77 Compressed Size       00000000 (0)\n-010F7B Uncompressed Size     00000000 (0)\n-010F7F Filename Length       0010 (16)\n-010F81 Extra Length          0009 (9)\n-010F83 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10F83: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010F93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010F95   Length              0005 (5)\n-010F97   Flags               01 (1) 'Modification'\n-010F98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-010F9C PAYLOAD\n-\n-013BFA DATA DESCRIPTOR       08074B50 (134695760)\n-013BFE CRC                   86E2B4B4 (2263004340)\n-013C02 Compressed Size       00002C5E (11358)\n-013C06 Uncompressed Size     00002C5E (11358)\n-\n-013C0A LOCAL HEADER #4       04034B50 (67324752)\n-013C0E Extract Zip Spec      14 (20) '2.0'\n-013C0F Extract OS            00 (0) 'MS-DOS'\n-013C10 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-013C12 Compression Method    0000 (0) 'Stored'\n-013C14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013C18 CRC                   00000000 (0)\n-013C1C Compressed Size       00000000 (0)\n-013C20 Uncompressed Size     00000000 (0)\n-013C24 Filename Length       0014 (20)\n-013C26 Extra Length          0009 (9)\n-013C28 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13C28: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013C3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013C3E   Length              0005 (5)\n-013C40   Flags               01 (1) 'Modification'\n-013C41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-013C45 PAYLOAD\n-\n-013D4B DATA DESCRIPTOR       08074B50 (134695760)\n-013D4F CRC                   F4676394 (4100416404)\n-013D53 Compressed Size       00000106 (262)\n-013D57 Uncompressed Size     00000106 (262)\n-\n-013D5B LOCAL HEADER #5       04034B50 (67324752)\n-013D5F Extract Zip Spec      14 (20) '2.0'\n-013D60 Extract OS            00 (0) 'MS-DOS'\n-013D61 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-013D63 Compression Method    0000 (0) 'Stored'\n-013D65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013D69 CRC                   00000000 (0)\n-013D6D Compressed Size       00000000 (0)\n-013D71 Uncompressed Size     00000000 (0)\n-013D75 Filename Length       000F (15)\n-013D77 Extra Length          0009 (9)\n-013D79 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13D79: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013D88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013D8A   Length              0005 (5)\n-013D8C   Flags               01 (1) 'Modification'\n-013D8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-013D91 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+014168 DATA DESCRIPTOR       08074B50 (134695760)\n+01416C CRC                   992A9732 (2569705266)\n+014170 Compressed Size       000140FC (82172)\n+014174 Uncompressed Size     000140FC (82172)\n+\n+014178 LOCAL HEADER #3       04034B50 (67324752)\n+01417C Extract Zip Spec      14 (20) '2.0'\n+01417D Extract OS            00 (0) 'MS-DOS'\n+01417E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+014180 Compression Method    0000 (0) 'Stored'\n+014182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+014186 CRC                   00000000 (0)\n+01418A Compressed Size       00000000 (0)\n+01418E Uncompressed Size     00000000 (0)\n+014192 Filename Length       0010 (16)\n+014194 Extra Length          0009 (9)\n+014196 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14196: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0141A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0141A8   Length              0005 (5)\n+0141AA   Flags               01 (1) 'Modification'\n+0141AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0141AF PAYLOAD\n+\n+016E0D DATA DESCRIPTOR       08074B50 (134695760)\n+016E11 CRC                   86E2B4B4 (2263004340)\n+016E15 Compressed Size       00002C5E (11358)\n+016E19 Uncompressed Size     00002C5E (11358)\n+\n+016E1D LOCAL HEADER #4       04034B50 (67324752)\n+016E21 Extract Zip Spec      14 (20) '2.0'\n+016E22 Extract OS            00 (0) 'MS-DOS'\n+016E23 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+016E25 Compression Method    0000 (0) 'Stored'\n+016E27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+016E2B CRC                   00000000 (0)\n+016E2F Compressed Size       00000000 (0)\n+016E33 Uncompressed Size     00000000 (0)\n+016E37 Filename Length       0014 (20)\n+016E39 Extra Length          0009 (9)\n+016E3B Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16E3B: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+016E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+016E51   Length              0005 (5)\n+016E53   Flags               01 (1) 'Modification'\n+016E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+016E58 PAYLOAD\n+\n+016F5E DATA DESCRIPTOR       08074B50 (134695760)\n+016F62 CRC                   F4676394 (4100416404)\n+016F66 Compressed Size       00000106 (262)\n+016F6A Uncompressed Size     00000106 (262)\n+\n+016F6E LOCAL HEADER #5       04034B50 (67324752)\n+016F72 Extract Zip Spec      14 (20) '2.0'\n+016F73 Extract OS            00 (0) 'MS-DOS'\n+016F74 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+016F76 Compression Method    0000 (0) 'Stored'\n+016F78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+016F7C CRC                   00000000 (0)\n+016F80 Compressed Size       00000000 (0)\n+016F84 Uncompressed Size     00000000 (0)\n+016F88 Filename Length       000F (15)\n+016F8A Extra Length          0009 (9)\n+016F8C Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F8C: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+016F9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+016F9D   Length              0005 (5)\n+016F9F   Flags               01 (1) 'Modification'\n+016FA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+016FA4 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-013E33 DATA DESCRIPTOR       08074B50 (134695760)\n-013E37 CRC                   ADB3DE41 (2914246209)\n-013E3B Compressed Size       000000A2 (162)\n-013E3F Uncompressed Size     000000A2 (162)\n-\n-013E43 LOCAL HEADER #6       04034B50 (67324752)\n-013E47 Extract Zip Spec      14 (20) '2.0'\n-013E48 Extract OS            00 (0) 'MS-DOS'\n-013E49 General Purpose Flag  0000 (0)\n-013E4B Compression Method    0000 (0) 'Stored'\n-013E4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013E51 CRC                   00000000 (0)\n-013E55 Compressed Size       00000000 (0)\n-013E59 Uncompressed Size     00000000 (0)\n-013E5D Filename Length       000F (15)\n-013E5F Extra Length          0009 (9)\n-013E61 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13E61: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013E70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013E72   Length              0005 (5)\n-013E74   Flags               01 (1) 'Modification'\n-013E75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-013E79 LOCAL HEADER #7       04034B50 (67324752)\n-013E7D Extract Zip Spec      14 (20) '2.0'\n-013E7E Extract OS            00 (0) 'MS-DOS'\n-013E7F General Purpose Flag  0000 (0)\n-013E81 Compression Method    0000 (0) 'Stored'\n-013E83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013E87 CRC                   00000000 (0)\n-013E8B Compressed Size       00000000 (0)\n-013E8F Uncompressed Size     00000000 (0)\n-013E93 Filename Length       001F (31)\n-013E95 Extra Length          0009 (9)\n-013E97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13E97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013EB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013EB8   Length              0005 (5)\n-013EBA   Flags               01 (1) 'Modification'\n-013EBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-013EBF LOCAL HEADER #8       04034B50 (67324752)\n-013EC3 Extract Zip Spec      14 (20) '2.0'\n-013EC4 Extract OS            00 (0) 'MS-DOS'\n-013EC5 General Purpose Flag  0000 (0)\n-013EC7 Compression Method    0000 (0) 'Stored'\n-013EC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013ECD CRC                   00000000 (0)\n-013ED1 Compressed Size       00000000 (0)\n-013ED5 Uncompressed Size     00000000 (0)\n-013ED9 Filename Length       0035 (53)\n-013EDB Extra Length          0009 (9)\n-013EDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13EDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013F12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013F14   Length              0005 (5)\n-013F16   Flags               01 (1) 'Modification'\n-013F17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-013F1B LOCAL HEADER #9       04034B50 (67324752)\n-013F1F Extract Zip Spec      14 (20) '2.0'\n-013F20 Extract OS            00 (0) 'MS-DOS'\n-013F21 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-013F23 Compression Method    0000 (0) 'Stored'\n-013F25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013F29 CRC                   00000000 (0)\n-013F2D Compressed Size       00000000 (0)\n-013F31 Uncompressed Size     00000000 (0)\n-013F35 Filename Length       0043 (67)\n-013F37 Extra Length          0009 (9)\n-013F39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13F39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013F7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013F7E   Length              0005 (5)\n-013F80   Flags               01 (1) 'Modification'\n-013F81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-013F85 DATA DESCRIPTOR       08074B50 (134695760)\n-013F89 CRC                   00000000 (0)\n-013F8D Compressed Size       00000000 (0)\n-013F91 Uncompressed Size     00000000 (0)\n-\n-013F95 LOCAL HEADER #10      04034B50 (67324752)\n-013F99 Extract Zip Spec      14 (20) '2.0'\n-013F9A Extract OS            00 (0) 'MS-DOS'\n-013F9B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-013F9D Compression Method    0000 (0) 'Stored'\n-013F9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-013FA3 CRC                   00000000 (0)\n-013FA7 Compressed Size       00000000 (0)\n-013FAB Uncompressed Size     00000000 (0)\n-013FAF Filename Length       003C (60)\n-013FB1 Extra Length          0009 (9)\n-013FB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13FB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-013FEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-013FF1   Length              0005 (5)\n-013FF3   Flags               01 (1) 'Modification'\n-013FF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-013FF8 PAYLOAD\n-\n-015B3C DATA DESCRIPTOR       08074B50 (134695760)\n-015B40 CRC                   9A3E6BCB (2587782091)\n-015B44 Compressed Size       00001B44 (6980)\n-015B48 Uncompressed Size     00001B44 (6980)\n-\n-015B4C LOCAL HEADER #11      04034B50 (67324752)\n-015B50 Extract Zip Spec      14 (20) '2.0'\n-015B51 Extract OS            00 (0) 'MS-DOS'\n-015B52 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-015B54 Compression Method    0000 (0) 'Stored'\n-015B56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015B5A CRC                   00000000 (0)\n-015B5E Compressed Size       00000000 (0)\n-015B62 Uncompressed Size     00000000 (0)\n-015B66 Filename Length       0010 (16)\n-015B68 Extra Length          0009 (9)\n-015B6A Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15B6A: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015B7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015B7C   Length              0005 (5)\n-015B7E   Flags               01 (1) 'Modification'\n-015B7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-015B83 PAYLOAD\n-\n-01605A DATA DESCRIPTOR       08074B50 (134695760)\n-01605E CRC                   1DC40AAB (499387051)\n-016062 Compressed Size       000004D7 (1239)\n-016066 Uncompressed Size     000004D7 (1239)\n-\n-01606A LOCAL HEADER #12      04034B50 (67324752)\n-01606E Extract Zip Spec      14 (20) '2.0'\n-01606F Extract OS            00 (0) 'MS-DOS'\n-016070 General Purpose Flag  0000 (0)\n-016072 Compression Method    0000 (0) 'Stored'\n-016074 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016078 CRC                   00000000 (0)\n-01607C Compressed Size       00000000 (0)\n-016080 Uncompressed Size     00000000 (0)\n-016084 Filename Length       0005 (5)\n-016086 Extra Length          0009 (9)\n-016088 Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x16088: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-01608D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01608F   Length              0005 (5)\n-016091   Flags               01 (1) 'Modification'\n-016092   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016096 LOCAL HEADER #13      04034B50 (67324752)\n-01609A Extract Zip Spec      14 (20) '2.0'\n-01609B Extract OS            00 (0) 'MS-DOS'\n-01609C General Purpose Flag  0000 (0)\n-01609E Compression Method    0000 (0) 'Stored'\n-0160A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0160A4 CRC                   00000000 (0)\n-0160A8 Compressed Size       00000000 (0)\n-0160AC Uncompressed Size     00000000 (0)\n-0160B0 Filename Length       0015 (21)\n-0160B2 Extra Length          0009 (9)\n-0160B4 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x160B4: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0160C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0160CB   Length              0005 (5)\n-0160CD   Flags               01 (1) 'Modification'\n-0160CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0160D2 LOCAL HEADER #14      04034B50 (67324752)\n-0160D6 Extract Zip Spec      14 (20) '2.0'\n-0160D7 Extract OS            00 (0) 'MS-DOS'\n-0160D8 General Purpose Flag  0000 (0)\n-0160DA Compression Method    0000 (0) 'Stored'\n-0160DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0160E0 CRC                   00000000 (0)\n-0160E4 Compressed Size       00000000 (0)\n-0160E8 Uncompressed Size     00000000 (0)\n-0160EC Filename Length       0027 (39)\n-0160EE Extra Length          0009 (9)\n-0160F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x160F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016117 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016119   Length              0005 (5)\n-01611B   Flags               01 (1) 'Modification'\n-01611C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016120 LOCAL HEADER #15      04034B50 (67324752)\n-016124 Extract Zip Spec      14 (20) '2.0'\n-016125 Extract OS            00 (0) 'MS-DOS'\n-016126 General Purpose Flag  0000 (0)\n-016128 Compression Method    0000 (0) 'Stored'\n-01612A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01612E CRC                   00000000 (0)\n-016132 Compressed Size       00000000 (0)\n-016136 Uncompressed Size     00000000 (0)\n-01613A Filename Length       002E (46)\n-01613C Extra Length          0009 (9)\n-01613E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1613E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01616C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01616E   Length              0005 (5)\n-016170   Flags               01 (1) 'Modification'\n-016171   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016175 LOCAL HEADER #16      04034B50 (67324752)\n-016179 Extract Zip Spec      14 (20) '2.0'\n-01617A Extract OS            00 (0) 'MS-DOS'\n-01617B General Purpose Flag  0000 (0)\n-01617D Compression Method    0000 (0) 'Stored'\n-01617F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016183 CRC                   00000000 (0)\n-016187 Compressed Size       00000000 (0)\n-01618B Uncompressed Size     00000000 (0)\n-01618F Filename Length       0065 (101)\n-016191 Extra Length          0009 (9)\n-016193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0161F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0161FA   Length              0005 (5)\n-0161FC   Flags               01 (1) 'Modification'\n-0161FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016201 LOCAL HEADER #17      04034B50 (67324752)\n-016205 Extract Zip Spec      14 (20) '2.0'\n-016206 Extract OS            00 (0) 'MS-DOS'\n-016207 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-016209 Compression Method    0000 (0) 'Stored'\n-01620B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01620F CRC                   00000000 (0)\n-016213 Compressed Size       00000000 (0)\n-016217 Uncompressed Size     00000000 (0)\n-01621B Filename Length       007B (123)\n-01621D Extra Length          0009 (9)\n-01621F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1621F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01629A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01629C   Length              0005 (5)\n-01629E   Flags               01 (1) 'Modification'\n-01629F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0162A3 PAYLOAD\n-\n-016D45 DATA DESCRIPTOR       08074B50 (134695760)\n-016D49 CRC                   9CB4EC6B (2629102699)\n-016D4D Compressed Size       00000AA2 (2722)\n-016D51 Uncompressed Size     00000AA2 (2722)\n-\n-016D55 LOCAL HEADER #18      04034B50 (67324752)\n-016D59 Extract Zip Spec      14 (20) '2.0'\n-016D5A Extract OS            00 (0) 'MS-DOS'\n-016D5B General Purpose Flag  0000 (0)\n-016D5D Compression Method    0000 (0) 'Stored'\n-016D5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016D63 CRC                   00000000 (0)\n-016D67 Compressed Size       00000000 (0)\n-016D6B Uncompressed Size     00000000 (0)\n-016D6F Filename Length       0025 (37)\n-016D71 Extra Length          0009 (9)\n-016D73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16D73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016D98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016D9A   Length              0005 (5)\n-016D9C   Flags               01 (1) 'Modification'\n-016D9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016DA1 LOCAL HEADER #19      04034B50 (67324752)\n-016DA5 Extract Zip Spec      14 (20) '2.0'\n-016DA6 Extract OS            00 (0) 'MS-DOS'\n-016DA7 General Purpose Flag  0000 (0)\n-016DA9 Compression Method    0000 (0) 'Stored'\n-016DAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016DAF CRC                   00000000 (0)\n-016DB3 Compressed Size       00000000 (0)\n-016DB7 Uncompressed Size     00000000 (0)\n-016DBB Filename Length       002C (44)\n-016DBD Extra Length          0009 (9)\n-016DBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16DBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016DEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016DED   Length              0005 (5)\n-016DEF   Flags               01 (1) 'Modification'\n-016DF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016DF4 LOCAL HEADER #20      04034B50 (67324752)\n-016DF8 Extract Zip Spec      14 (20) '2.0'\n-016DF9 Extract OS            00 (0) 'MS-DOS'\n-016DFA General Purpose Flag  0000 (0)\n-016DFC Compression Method    0000 (0) 'Stored'\n-016DFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016E02 CRC                   00000000 (0)\n-016E06 Compressed Size       00000000 (0)\n-016E0A Uncompressed Size     00000000 (0)\n-016E0E Filename Length       0061 (97)\n-016E10 Extra Length          0009 (9)\n-016E12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16E12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016E73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016E75   Length              0005 (5)\n-016E77   Flags               01 (1) 'Modification'\n-016E78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016E7C LOCAL HEADER #21      04034B50 (67324752)\n-016E80 Extract Zip Spec      14 (20) '2.0'\n-016E81 Extract OS            00 (0) 'MS-DOS'\n-016E82 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-016E84 Compression Method    0000 (0) 'Stored'\n-016E86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-016E8A CRC                   00000000 (0)\n-016E8E Compressed Size       00000000 (0)\n-016E92 Uncompressed Size     00000000 (0)\n-016E96 Filename Length       0077 (119)\n-016E98 Extra Length          0009 (9)\n-016E9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16E9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016F11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016F13   Length              0005 (5)\n-016F15   Flags               01 (1) 'Modification'\n-016F16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-016F1A PAYLOAD\n-\n-01785F DATA DESCRIPTOR       08074B50 (134695760)\n-017863 CRC                   1401A9F3 (335653363)\n-017867 Compressed Size       00000945 (2373)\n-01786B Uncompressed Size     00000945 (2373)\n-\n-01786F LOCAL HEADER #22      04034B50 (67324752)\n-017873 Extract Zip Spec      14 (20) '2.0'\n-017874 Extract OS            00 (0) 'MS-DOS'\n-017875 General Purpose Flag  0000 (0)\n-017877 Compression Method    0000 (0) 'Stored'\n-017879 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01787D CRC                   00000000 (0)\n-017881 Compressed Size       00000000 (0)\n-017885 Uncompressed Size     00000000 (0)\n-017889 Filename Length       0023 (35)\n-01788B Extra Length          0009 (9)\n-01788D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1788D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0178B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0178B2   Length              0005 (5)\n-0178B4   Flags               01 (1) 'Modification'\n-0178B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0178B9 LOCAL HEADER #23      04034B50 (67324752)\n-0178BD Extract Zip Spec      14 (20) '2.0'\n-0178BE Extract OS            00 (0) 'MS-DOS'\n-0178BF General Purpose Flag  0000 (0)\n-0178C1 Compression Method    0000 (0) 'Stored'\n-0178C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0178C7 CRC                   00000000 (0)\n-0178CB Compressed Size       00000000 (0)\n-0178CF Uncompressed Size     00000000 (0)\n-0178D3 Filename Length       002A (42)\n-0178D5 Extra Length          0009 (9)\n-0178D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x178D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017901 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017903   Length              0005 (5)\n-017905   Flags               01 (1) 'Modification'\n-017906   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01790A LOCAL HEADER #24      04034B50 (67324752)\n-01790E Extract Zip Spec      14 (20) '2.0'\n-01790F Extract OS            00 (0) 'MS-DOS'\n-017910 General Purpose Flag  0000 (0)\n-017912 Compression Method    0000 (0) 'Stored'\n-017914 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017918 CRC                   00000000 (0)\n-01791C Compressed Size       00000000 (0)\n-017920 Uncompressed Size     00000000 (0)\n-017924 Filename Length       0056 (86)\n-017926 Extra Length          0009 (9)\n-017928 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17928: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01797E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017980   Length              0005 (5)\n-017982   Flags               01 (1) 'Modification'\n-017983   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-017987 LOCAL HEADER #25      04034B50 (67324752)\n-01798B Extract Zip Spec      14 (20) '2.0'\n-01798C Extract OS            00 (0) 'MS-DOS'\n-01798D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01798F Compression Method    0000 (0) 'Stored'\n-017991 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-017995 CRC                   00000000 (0)\n-017999 Compressed Size       00000000 (0)\n-01799D Uncompressed Size     00000000 (0)\n-0179A1 Filename Length       006C (108)\n-0179A3 Extra Length          0009 (9)\n-0179A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x179A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-017A11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-017A13   Length              0005 (5)\n-017A15   Flags               01 (1) 'Modification'\n-017A16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-017A1A PAYLOAD\n-\n-0189D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0189DD CRC                   445AD7B2 (1146804146)\n-0189E1 Compressed Size       00000FBF (4031)\n-0189E5 Uncompressed Size     00000FBF (4031)\n-\n-0189E9 LOCAL HEADER #26      04034B50 (67324752)\n-0189ED Extract Zip Spec      14 (20) '2.0'\n-0189EE Extract OS            00 (0) 'MS-DOS'\n-0189EF General Purpose Flag  0000 (0)\n-0189F1 Compression Method    0000 (0) 'Stored'\n-0189F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0189F7 CRC                   00000000 (0)\n-0189FB Compressed Size       00000000 (0)\n-0189FF Uncompressed Size     00000000 (0)\n-018A03 Filename Length       0056 (86)\n-018A05 Extra Length          0009 (9)\n-018A07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018A5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018A5F   Length              0005 (5)\n-018A61   Flags               01 (1) 'Modification'\n-018A62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018A66 LOCAL HEADER #27      04034B50 (67324752)\n-018A6A Extract Zip Spec      14 (20) '2.0'\n-018A6B Extract OS            00 (0) 'MS-DOS'\n-018A6C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-018A6E Compression Method    0000 (0) 'Stored'\n-018A70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018A74 CRC                   00000000 (0)\n-018A78 Compressed Size       00000000 (0)\n-018A7C Uncompressed Size     00000000 (0)\n-018A80 Filename Length       006C (108)\n-018A82 Extra Length          0009 (9)\n-018A84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018AF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018AF2   Length              0005 (5)\n-018AF4   Flags               01 (1) 'Modification'\n-018AF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-018AF9 PAYLOAD\n-\n-01A1D7 DATA DESCRIPTOR       08074B50 (134695760)\n-01A1DB CRC                   A2A96EA2 (2729012898)\n-01A1DF Compressed Size       000016DE (5854)\n-01A1E3 Uncompressed Size     000016DE (5854)\n-\n-01A1E7 LOCAL HEADER #28      04034B50 (67324752)\n-01A1EB Extract Zip Spec      14 (20) '2.0'\n-01A1EC Extract OS            00 (0) 'MS-DOS'\n-01A1ED General Purpose Flag  0000 (0)\n-01A1EF Compression Method    0000 (0) 'Stored'\n-01A1F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A1F5 CRC                   00000000 (0)\n-01A1F9 Compressed Size       00000000 (0)\n-01A1FD Uncompressed Size     00000000 (0)\n-01A201 Filename Length       002F (47)\n-01A203 Extra Length          0009 (9)\n-01A205 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A205: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A234 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A236   Length              0005 (5)\n-01A238   Flags               01 (1) 'Modification'\n-01A239   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01A23D LOCAL HEADER #29      04034B50 (67324752)\n-01A241 Extract Zip Spec      14 (20) '2.0'\n-01A242 Extract OS            00 (0) 'MS-DOS'\n-01A243 General Purpose Flag  0000 (0)\n-01A245 Compression Method    0000 (0) 'Stored'\n-01A247 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A24B CRC                   00000000 (0)\n-01A24F Compressed Size       00000000 (0)\n-01A253 Uncompressed Size     00000000 (0)\n-01A257 Filename Length       0036 (54)\n-01A259 Extra Length          0009 (9)\n-01A25B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A25B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A291 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A293   Length              0005 (5)\n-01A295   Flags               01 (1) 'Modification'\n-01A296   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01A29A LOCAL HEADER #30      04034B50 (67324752)\n-01A29E Extract Zip Spec      14 (20) '2.0'\n-01A29F Extract OS            00 (0) 'MS-DOS'\n-01A2A0 General Purpose Flag  0000 (0)\n-01A2A2 Compression Method    0000 (0) 'Stored'\n-01A2A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A2A8 CRC                   00000000 (0)\n-01A2AC Compressed Size       00000000 (0)\n-01A2B0 Uncompressed Size     00000000 (0)\n-01A2B4 Filename Length       0066 (102)\n-01A2B6 Extra Length          0009 (9)\n-01A2B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A2B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A31E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A320   Length              0005 (5)\n-01A322   Flags               01 (1) 'Modification'\n-01A323   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01A327 LOCAL HEADER #31      04034B50 (67324752)\n-01A32B Extract Zip Spec      14 (20) '2.0'\n-01A32C Extract OS            00 (0) 'MS-DOS'\n-01A32D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01A32F Compression Method    0000 (0) 'Stored'\n-01A331 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A335 CRC                   00000000 (0)\n-01A339 Compressed Size       00000000 (0)\n-01A33D Uncompressed Size     00000000 (0)\n-01A341 Filename Length       007C (124)\n-01A343 Extra Length          0009 (9)\n-01A345 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A345: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A3C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A3C3   Length              0005 (5)\n-01A3C5   Flags               01 (1) 'Modification'\n-01A3C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01A3CA PAYLOAD\n-\n-01B8DC DATA DESCRIPTOR       08074B50 (134695760)\n-01B8E0 CRC                   7416DF2A (1947655978)\n-01B8E4 Compressed Size       00001512 (5394)\n-01B8E8 Uncompressed Size     00001512 (5394)\n-\n-01B8EC LOCAL HEADER #32      04034B50 (67324752)\n-01B8F0 Extract Zip Spec      14 (20) '2.0'\n-01B8F1 Extract OS            00 (0) 'MS-DOS'\n-01B8F2 General Purpose Flag  0000 (0)\n-01B8F4 Compression Method    0000 (0) 'Stored'\n-01B8F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B8FA CRC                   00000000 (0)\n-01B8FE Compressed Size       00000000 (0)\n-01B902 Uncompressed Size     00000000 (0)\n-01B906 Filename Length       0022 (34)\n-01B908 Extra Length          0009 (9)\n-01B90A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B90A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B92C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B92E   Length              0005 (5)\n-01B930   Flags               01 (1) 'Modification'\n-01B931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B935 LOCAL HEADER #33      04034B50 (67324752)\n-01B939 Extract Zip Spec      14 (20) '2.0'\n-01B93A Extract OS            00 (0) 'MS-DOS'\n-01B93B General Purpose Flag  0000 (0)\n-01B93D Compression Method    0000 (0) 'Stored'\n-01B93F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B943 CRC                   00000000 (0)\n-01B947 Compressed Size       00000000 (0)\n-01B94B Uncompressed Size     00000000 (0)\n-01B94F Filename Length       0029 (41)\n-01B951 Extra Length          0009 (9)\n-01B953 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B953: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B97C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B97E   Length              0005 (5)\n-01B980   Flags               01 (1) 'Modification'\n-01B981   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B985 LOCAL HEADER #34      04034B50 (67324752)\n-01B989 Extract Zip Spec      14 (20) '2.0'\n-01B98A Extract OS            00 (0) 'MS-DOS'\n-01B98B General Purpose Flag  0000 (0)\n-01B98D Compression Method    0000 (0) 'Stored'\n-01B98F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B993 CRC                   00000000 (0)\n-01B997 Compressed Size       00000000 (0)\n-01B99B Uncompressed Size     00000000 (0)\n-01B99F Filename Length       0063 (99)\n-01B9A1 Extra Length          0009 (9)\n-01B9A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B9A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01BA06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BA08   Length              0005 (5)\n-01BA0A   Flags               01 (1) 'Modification'\n-01BA0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01BA0F LOCAL HEADER #35      04034B50 (67324752)\n-01BA13 Extract Zip Spec      14 (20) '2.0'\n-01BA14 Extract OS            00 (0) 'MS-DOS'\n-01BA15 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01BA17 Compression Method    0000 (0) 'Stored'\n-01BA19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01BA1D CRC                   00000000 (0)\n-01BA21 Compressed Size       00000000 (0)\n-01BA25 Uncompressed Size     00000000 (0)\n-01BA29 Filename Length       0079 (121)\n-01BA2B Extra Length          0009 (9)\n-01BA2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BA2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01BAA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BAA8   Length              0005 (5)\n-01BAAA   Flags               01 (1) 'Modification'\n-01BAAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01BAAF PAYLOAD\n-\n-01EA3F DATA DESCRIPTOR       08074B50 (134695760)\n-01EA43 CRC                   826E1CC4 (2188254404)\n-01EA47 Compressed Size       00002F90 (12176)\n-01EA4B Uncompressed Size     00002F90 (12176)\n-\n-01EA4F LOCAL HEADER #36      04034B50 (67324752)\n-01EA53 Extract Zip Spec      14 (20) '2.0'\n-01EA54 Extract OS            00 (0) 'MS-DOS'\n-01EA55 General Purpose Flag  0000 (0)\n-01EA57 Compression Method    0000 (0) 'Stored'\n-01EA59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01EA5D CRC                   00000000 (0)\n-01EA61 Compressed Size       00000000 (0)\n-01EA65 Uncompressed Size     00000000 (0)\n-01EA69 Filename Length       006C (108)\n-01EA6B Extra Length          0009 (9)\n-01EA6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1EA6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01EAD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01EADB   Length              0005 (5)\n-01EADD   Flags               01 (1) 'Modification'\n-01EADE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01EAE2 LOCAL HEADER #37      04034B50 (67324752)\n-01EAE6 Extract Zip Spec      14 (20) '2.0'\n-01EAE7 Extract OS            00 (0) 'MS-DOS'\n-01EAE8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01EAEA Compression Method    0000 (0) 'Stored'\n-01EAEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01EAF0 CRC                   00000000 (0)\n-01EAF4 Compressed Size       00000000 (0)\n-01EAF8 Uncompressed Size     00000000 (0)\n-01EAFC Filename Length       0082 (130)\n-01EAFE Extra Length          0009 (9)\n-01EB00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1EB00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01EB82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01EB84   Length              0005 (5)\n-01EB86   Flags               01 (1) 'Modification'\n-01EB87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01EB8B PAYLOAD\n-\n-01F4F2 DATA DESCRIPTOR       08074B50 (134695760)\n-01F4F6 CRC                   1BE163AC (467755948)\n-01F4FA Compressed Size       00000967 (2407)\n-01F4FE Uncompressed Size     00000967 (2407)\n-\n-01F502 LOCAL HEADER #38      04034B50 (67324752)\n-01F506 Extract Zip Spec      14 (20) '2.0'\n-01F507 Extract OS            00 (0) 'MS-DOS'\n-01F508 General Purpose Flag  0000 (0)\n-01F50A Compression Method    0000 (0) 'Stored'\n-01F50C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01F510 CRC                   00000000 (0)\n-01F514 Compressed Size       00000000 (0)\n-01F518 Uncompressed Size     00000000 (0)\n-01F51C Filename Length       0066 (102)\n-01F51E Extra Length          0009 (9)\n-01F520 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F520: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01F586 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01F588   Length              0005 (5)\n-01F58A   Flags               01 (1) 'Modification'\n-01F58B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01F58F LOCAL HEADER #39      04034B50 (67324752)\n-01F593 Extract Zip Spec      14 (20) '2.0'\n-01F594 Extract OS            00 (0) 'MS-DOS'\n-01F595 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01F597 Compression Method    0000 (0) 'Stored'\n-01F599 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01F59D CRC                   00000000 (0)\n-01F5A1 Compressed Size       00000000 (0)\n-01F5A5 Uncompressed Size     00000000 (0)\n-01F5A9 Filename Length       007C (124)\n-01F5AB Extra Length          0009 (9)\n-01F5AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F5AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01F629 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01F62B   Length              0005 (5)\n-01F62D   Flags               01 (1) 'Modification'\n-01F62E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01F632 PAYLOAD\n-\n-01FE41 DATA DESCRIPTOR       08074B50 (134695760)\n-01FE45 CRC                   11DB1110 (299569424)\n-01FE49 Compressed Size       0000080F (2063)\n-01FE4D Uncompressed Size     0000080F (2063)\n-\n-01FE51 LOCAL HEADER #40      04034B50 (67324752)\n-01FE55 Extract Zip Spec      14 (20) '2.0'\n-01FE56 Extract OS            00 (0) 'MS-DOS'\n-01FE57 General Purpose Flag  0000 (0)\n-01FE59 Compression Method    0000 (0) 'Stored'\n-01FE5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01FE5F CRC                   00000000 (0)\n-01FE63 Compressed Size       00000000 (0)\n-01FE67 Uncompressed Size     00000000 (0)\n-01FE6B Filename Length       0062 (98)\n-01FE6D Extra Length          0009 (9)\n-01FE6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FE6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01FED1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01FED3   Length              0005 (5)\n-01FED5   Flags               01 (1) 'Modification'\n-01FED6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01FEDA LOCAL HEADER #41      04034B50 (67324752)\n-01FEDE Extract Zip Spec      14 (20) '2.0'\n-01FEDF Extract OS            00 (0) 'MS-DOS'\n-01FEE0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01FEE2 Compression Method    0000 (0) 'Stored'\n-01FEE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01FEE8 CRC                   00000000 (0)\n-01FEEC Compressed Size       00000000 (0)\n-01FEF0 Uncompressed Size     00000000 (0)\n-01FEF4 Filename Length       0078 (120)\n-01FEF6 Extra Length          0009 (9)\n-01FEF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FEF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01FF70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01FF72   Length              0005 (5)\n-01FF74   Flags               01 (1) 'Modification'\n-01FF75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01FF79 PAYLOAD\n-\n-020B95 DATA DESCRIPTOR       08074B50 (134695760)\n-020B99 CRC                   30A69673 (816223859)\n-020B9D Compressed Size       00000C1C (3100)\n-020BA1 Uncompressed Size     00000C1C (3100)\n-\n-020BA5 LOCAL HEADER #42      04034B50 (67324752)\n-020BA9 Extract Zip Spec      14 (20) '2.0'\n-020BAA Extract OS            00 (0) 'MS-DOS'\n-020BAB General Purpose Flag  0000 (0)\n-020BAD Compression Method    0000 (0) 'Stored'\n-020BAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020BB3 CRC                   00000000 (0)\n-020BB7 Compressed Size       00000000 (0)\n-020BBB Uncompressed Size     00000000 (0)\n-020BBF Filename Length       006C (108)\n-020BC1 Extra Length          0009 (9)\n-020BC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20BC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020C2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020C31   Length              0005 (5)\n-020C33   Flags               01 (1) 'Modification'\n-020C34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-020C38 LOCAL HEADER #43      04034B50 (67324752)\n-020C3C Extract Zip Spec      14 (20) '2.0'\n-020C3D Extract OS            00 (0) 'MS-DOS'\n-020C3E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-020C40 Compression Method    0000 (0) 'Stored'\n-020C42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020C46 CRC                   00000000 (0)\n-020C4A Compressed Size       00000000 (0)\n-020C4E Uncompressed Size     00000000 (0)\n-020C52 Filename Length       0082 (130)\n-020C54 Extra Length          0009 (9)\n-020C56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20C56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020CD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020CDA   Length              0005 (5)\n-020CDC   Flags               01 (1) 'Modification'\n-020CDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-020CE1 PAYLOAD\n-\n-0213B8 DATA DESCRIPTOR       08074B50 (134695760)\n-0213BC CRC                   0C316B32 (204565298)\n-0213C0 Compressed Size       000006D7 (1751)\n-0213C4 Uncompressed Size     000006D7 (1751)\n-\n-0213C8 LOCAL HEADER #44      04034B50 (67324752)\n-0213CC Extract Zip Spec      14 (20) '2.0'\n-0213CD Extract OS            00 (0) 'MS-DOS'\n-0213CE General Purpose Flag  0000 (0)\n-0213D0 Compression Method    0000 (0) 'Stored'\n-0213D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0213D6 CRC                   00000000 (0)\n-0213DA Compressed Size       00000000 (0)\n-0213DE Uncompressed Size     00000000 (0)\n-0213E2 Filename Length       0068 (104)\n-0213E4 Extra Length          0009 (9)\n-0213E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x213E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02144E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-021450   Length              0005 (5)\n-021452   Flags               01 (1) 'Modification'\n-021453   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-021457 LOCAL HEADER #45      04034B50 (67324752)\n-02145B Extract Zip Spec      14 (20) '2.0'\n-02145C Extract OS            00 (0) 'MS-DOS'\n-02145D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02145F Compression Method    0000 (0) 'Stored'\n-021461 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021465 CRC                   00000000 (0)\n-021469 Compressed Size       00000000 (0)\n-02146D Uncompressed Size     00000000 (0)\n-021471 Filename Length       007E (126)\n-021473 Extra Length          0009 (9)\n-021475 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21475: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0214F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0214F5   Length              0005 (5)\n-0214F7   Flags               01 (1) 'Modification'\n-0214F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0214FC PAYLOAD\n-\n-022837 DATA DESCRIPTOR       08074B50 (134695760)\n-02283B CRC                   37BEEC96 (935259286)\n-02283F Compressed Size       0000133B (4923)\n-022843 Uncompressed Size     0000133B (4923)\n-\n-022847 LOCAL HEADER #46      04034B50 (67324752)\n-02284B Extract Zip Spec      14 (20) '2.0'\n-02284C Extract OS            00 (0) 'MS-DOS'\n-02284D General Purpose Flag  0000 (0)\n-02284F Compression Method    0000 (0) 'Stored'\n-022851 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-022855 CRC                   00000000 (0)\n-022859 Compressed Size       00000000 (0)\n-02285D Uncompressed Size     00000000 (0)\n-022861 Filename Length       0070 (112)\n-022863 Extra Length          0009 (9)\n-022865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0228D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0228D7   Length              0005 (5)\n-0228D9   Flags               01 (1) 'Modification'\n-0228DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0228DE LOCAL HEADER #47      04034B50 (67324752)\n-0228E2 Extract Zip Spec      14 (20) '2.0'\n-0228E3 Extract OS            00 (0) 'MS-DOS'\n-0228E4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0228E6 Compression Method    0000 (0) 'Stored'\n-0228E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0228EC CRC                   00000000 (0)\n-0228F0 Compressed Size       00000000 (0)\n-0228F4 Uncompressed Size     00000000 (0)\n-0228F8 Filename Length       0086 (134)\n-0228FA Extra Length          0009 (9)\n-0228FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+017046 DATA DESCRIPTOR       08074B50 (134695760)\n+01704A CRC                   ADB3DE41 (2914246209)\n+01704E Compressed Size       000000A2 (162)\n+017052 Uncompressed Size     000000A2 (162)\n+\n+017056 LOCAL HEADER #6       04034B50 (67324752)\n+01705A Extract Zip Spec      14 (20) '2.0'\n+01705B Extract OS            00 (0) 'MS-DOS'\n+01705C General Purpose Flag  0000 (0)\n+01705E Compression Method    0000 (0) 'Stored'\n+017060 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+017064 CRC                   00000000 (0)\n+017068 Compressed Size       00000000 (0)\n+01706C Uncompressed Size     00000000 (0)\n+017070 Filename Length       000F (15)\n+017072 Extra Length          0009 (9)\n+017074 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17074: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+017083 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+017085   Length              0005 (5)\n+017087   Flags               01 (1) 'Modification'\n+017088   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01708C LOCAL HEADER #7       04034B50 (67324752)\n+017090 Extract Zip Spec      14 (20) '2.0'\n+017091 Extract OS            00 (0) 'MS-DOS'\n+017092 General Purpose Flag  0000 (0)\n+017094 Compression Method    0000 (0) 'Stored'\n+017096 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01709A CRC                   00000000 (0)\n+01709E Compressed Size       00000000 (0)\n+0170A2 Uncompressed Size     00000000 (0)\n+0170A6 Filename Length       001F (31)\n+0170A8 Extra Length          0009 (9)\n+0170AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x170AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0170C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0170CB   Length              0005 (5)\n+0170CD   Flags               01 (1) 'Modification'\n+0170CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0170D2 LOCAL HEADER #8       04034B50 (67324752)\n+0170D6 Extract Zip Spec      14 (20) '2.0'\n+0170D7 Extract OS            00 (0) 'MS-DOS'\n+0170D8 General Purpose Flag  0000 (0)\n+0170DA Compression Method    0000 (0) 'Stored'\n+0170DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0170E0 CRC                   00000000 (0)\n+0170E4 Compressed Size       00000000 (0)\n+0170E8 Uncompressed Size     00000000 (0)\n+0170EC Filename Length       0035 (53)\n+0170EE Extra Length          0009 (9)\n+0170F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x170F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+017125 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+017127   Length              0005 (5)\n+017129   Flags               01 (1) 'Modification'\n+01712A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01712E LOCAL HEADER #9       04034B50 (67324752)\n+017132 Extract Zip Spec      14 (20) '2.0'\n+017133 Extract OS            00 (0) 'MS-DOS'\n+017134 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+017136 Compression Method    0000 (0) 'Stored'\n+017138 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01713C CRC                   00000000 (0)\n+017140 Compressed Size       00000000 (0)\n+017144 Uncompressed Size     00000000 (0)\n+017148 Filename Length       0043 (67)\n+01714A Extra Length          0009 (9)\n+01714C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1714C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01718F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+017191   Length              0005 (5)\n+017193   Flags               01 (1) 'Modification'\n+017194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+017198 DATA DESCRIPTOR       08074B50 (134695760)\n+01719C CRC                   00000000 (0)\n+0171A0 Compressed Size       00000000 (0)\n+0171A4 Uncompressed Size     00000000 (0)\n+\n+0171A8 LOCAL HEADER #10      04034B50 (67324752)\n+0171AC Extract Zip Spec      14 (20) '2.0'\n+0171AD Extract OS            00 (0) 'MS-DOS'\n+0171AE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0171B0 Compression Method    0000 (0) 'Stored'\n+0171B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0171B6 CRC                   00000000 (0)\n+0171BA Compressed Size       00000000 (0)\n+0171BE Uncompressed Size     00000000 (0)\n+0171C2 Filename Length       003C (60)\n+0171C4 Extra Length          0009 (9)\n+0171C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x171C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+017202 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+017204   Length              0005 (5)\n+017206   Flags               01 (1) 'Modification'\n+017207   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01720B PAYLOAD\n+\n+018D4F DATA DESCRIPTOR       08074B50 (134695760)\n+018D53 CRC                   9A3E6BCB (2587782091)\n+018D57 Compressed Size       00001B44 (6980)\n+018D5B Uncompressed Size     00001B44 (6980)\n+\n+018D5F LOCAL HEADER #11      04034B50 (67324752)\n+018D63 Extract Zip Spec      14 (20) '2.0'\n+018D64 Extract OS            00 (0) 'MS-DOS'\n+018D65 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+018D67 Compression Method    0000 (0) 'Stored'\n+018D69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018D6D CRC                   00000000 (0)\n+018D71 Compressed Size       00000000 (0)\n+018D75 Uncompressed Size     00000000 (0)\n+018D79 Filename Length       0010 (16)\n+018D7B Extra Length          0009 (9)\n+018D7D Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18D7D: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018D8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018D8F   Length              0005 (5)\n+018D91   Flags               01 (1) 'Modification'\n+018D92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+018D96 PAYLOAD\n+\n+019245 DATA DESCRIPTOR       08074B50 (134695760)\n+019249 CRC                   A53E047C (2772305020)\n+01924D Compressed Size       000004AF (1199)\n+019251 Uncompressed Size     000004AF (1199)\n+\n+019255 LOCAL HEADER #12      04034B50 (67324752)\n+019259 Extract Zip Spec      14 (20) '2.0'\n+01925A Extract OS            00 (0) 'MS-DOS'\n+01925B General Purpose Flag  0000 (0)\n+01925D Compression Method    0000 (0) 'Stored'\n+01925F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019263 CRC                   00000000 (0)\n+019267 Compressed Size       00000000 (0)\n+01926B Uncompressed Size     00000000 (0)\n+01926F Filename Length       0005 (5)\n+019271 Extra Length          0009 (9)\n+019273 Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x19273: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+019278 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01927A   Length              0005 (5)\n+01927C   Flags               01 (1) 'Modification'\n+01927D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019281 LOCAL HEADER #13      04034B50 (67324752)\n+019285 Extract Zip Spec      14 (20) '2.0'\n+019286 Extract OS            00 (0) 'MS-DOS'\n+019287 General Purpose Flag  0000 (0)\n+019289 Compression Method    0000 (0) 'Stored'\n+01928B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01928F CRC                   00000000 (0)\n+019293 Compressed Size       00000000 (0)\n+019297 Uncompressed Size     00000000 (0)\n+01929B Filename Length       0015 (21)\n+01929D Extra Length          0009 (9)\n+01929F Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1929F: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0192B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0192B6   Length              0005 (5)\n+0192B8   Flags               01 (1) 'Modification'\n+0192B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0192BD LOCAL HEADER #14      04034B50 (67324752)\n+0192C1 Extract Zip Spec      14 (20) '2.0'\n+0192C2 Extract OS            00 (0) 'MS-DOS'\n+0192C3 General Purpose Flag  0000 (0)\n+0192C5 Compression Method    0000 (0) 'Stored'\n+0192C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0192CB CRC                   00000000 (0)\n+0192CF Compressed Size       00000000 (0)\n+0192D3 Uncompressed Size     00000000 (0)\n+0192D7 Filename Length       0027 (39)\n+0192D9 Extra Length          0009 (9)\n+0192DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x192DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019302 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019304   Length              0005 (5)\n+019306   Flags               01 (1) 'Modification'\n+019307   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01930B LOCAL HEADER #15      04034B50 (67324752)\n+01930F Extract Zip Spec      14 (20) '2.0'\n+019310 Extract OS            00 (0) 'MS-DOS'\n+019311 General Purpose Flag  0000 (0)\n+019313 Compression Method    0000 (0) 'Stored'\n+019315 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019319 CRC                   00000000 (0)\n+01931D Compressed Size       00000000 (0)\n+019321 Uncompressed Size     00000000 (0)\n+019325 Filename Length       002E (46)\n+019327 Extra Length          0009 (9)\n+019329 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19329: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019357 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019359   Length              0005 (5)\n+01935B   Flags               01 (1) 'Modification'\n+01935C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019360 LOCAL HEADER #16      04034B50 (67324752)\n+019364 Extract Zip Spec      14 (20) '2.0'\n+019365 Extract OS            00 (0) 'MS-DOS'\n+019366 General Purpose Flag  0000 (0)\n+019368 Compression Method    0000 (0) 'Stored'\n+01936A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01936E CRC                   00000000 (0)\n+019372 Compressed Size       00000000 (0)\n+019376 Uncompressed Size     00000000 (0)\n+01937A Filename Length       0065 (101)\n+01937C Extra Length          0009 (9)\n+01937E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1937E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0193E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0193E5   Length              0005 (5)\n+0193E7   Flags               01 (1) 'Modification'\n+0193E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0193EC LOCAL HEADER #17      04034B50 (67324752)\n+0193F0 Extract Zip Spec      14 (20) '2.0'\n+0193F1 Extract OS            00 (0) 'MS-DOS'\n+0193F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0193F4 Compression Method    0000 (0) 'Stored'\n+0193F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0193FA CRC                   00000000 (0)\n+0193FE Compressed Size       00000000 (0)\n+019402 Uncompressed Size     00000000 (0)\n+019406 Filename Length       007B (123)\n+019408 Extra Length          0009 (9)\n+01940A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1940A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019485 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019487   Length              0005 (5)\n+019489   Flags               01 (1) 'Modification'\n+01948A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01948E PAYLOAD\n+\n+019F30 DATA DESCRIPTOR       08074B50 (134695760)\n+019F34 CRC                   9CB4EC6B (2629102699)\n+019F38 Compressed Size       00000AA2 (2722)\n+019F3C Uncompressed Size     00000AA2 (2722)\n+\n+019F40 LOCAL HEADER #18      04034B50 (67324752)\n+019F44 Extract Zip Spec      14 (20) '2.0'\n+019F45 Extract OS            00 (0) 'MS-DOS'\n+019F46 General Purpose Flag  0000 (0)\n+019F48 Compression Method    0000 (0) 'Stored'\n+019F4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019F4E CRC                   00000000 (0)\n+019F52 Compressed Size       00000000 (0)\n+019F56 Uncompressed Size     00000000 (0)\n+019F5A Filename Length       0025 (37)\n+019F5C Extra Length          0009 (9)\n+019F5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019F83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019F85   Length              0005 (5)\n+019F87   Flags               01 (1) 'Modification'\n+019F88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019F8C LOCAL HEADER #19      04034B50 (67324752)\n+019F90 Extract Zip Spec      14 (20) '2.0'\n+019F91 Extract OS            00 (0) 'MS-DOS'\n+019F92 General Purpose Flag  0000 (0)\n+019F94 Compression Method    0000 (0) 'Stored'\n+019F96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019F9A CRC                   00000000 (0)\n+019F9E Compressed Size       00000000 (0)\n+019FA2 Uncompressed Size     00000000 (0)\n+019FA6 Filename Length       002C (44)\n+019FA8 Extra Length          0009 (9)\n+019FAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19FAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019FD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019FD8   Length              0005 (5)\n+019FDA   Flags               01 (1) 'Modification'\n+019FDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019FDF LOCAL HEADER #20      04034B50 (67324752)\n+019FE3 Extract Zip Spec      14 (20) '2.0'\n+019FE4 Extract OS            00 (0) 'MS-DOS'\n+019FE5 General Purpose Flag  0000 (0)\n+019FE7 Compression Method    0000 (0) 'Stored'\n+019FE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019FED CRC                   00000000 (0)\n+019FF1 Compressed Size       00000000 (0)\n+019FF5 Uncompressed Size     00000000 (0)\n+019FF9 Filename Length       0061 (97)\n+019FFB Extra Length          0009 (9)\n+019FFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19FFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01A05E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01A060   Length              0005 (5)\n+01A062   Flags               01 (1) 'Modification'\n+01A063   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01A067 LOCAL HEADER #21      04034B50 (67324752)\n+01A06B Extract Zip Spec      14 (20) '2.0'\n+01A06C Extract OS            00 (0) 'MS-DOS'\n+01A06D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01A06F Compression Method    0000 (0) 'Stored'\n+01A071 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01A075 CRC                   00000000 (0)\n+01A079 Compressed Size       00000000 (0)\n+01A07D Uncompressed Size     00000000 (0)\n+01A081 Filename Length       0077 (119)\n+01A083 Extra Length          0009 (9)\n+01A085 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1A085: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01A0FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01A0FE   Length              0005 (5)\n+01A100   Flags               01 (1) 'Modification'\n+01A101   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01A105 PAYLOAD\n+\n+01AA4A DATA DESCRIPTOR       08074B50 (134695760)\n+01AA4E CRC                   1401A9F3 (335653363)\n+01AA52 Compressed Size       00000945 (2373)\n+01AA56 Uncompressed Size     00000945 (2373)\n+\n+01AA5A LOCAL HEADER #22      04034B50 (67324752)\n+01AA5E Extract Zip Spec      14 (20) '2.0'\n+01AA5F Extract OS            00 (0) 'MS-DOS'\n+01AA60 General Purpose Flag  0000 (0)\n+01AA62 Compression Method    0000 (0) 'Stored'\n+01AA64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01AA68 CRC                   00000000 (0)\n+01AA6C Compressed Size       00000000 (0)\n+01AA70 Uncompressed Size     00000000 (0)\n+01AA74 Filename Length       0023 (35)\n+01AA76 Extra Length          0009 (9)\n+01AA78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1AA78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01AA9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01AA9D   Length              0005 (5)\n+01AA9F   Flags               01 (1) 'Modification'\n+01AAA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01AAA4 LOCAL HEADER #23      04034B50 (67324752)\n+01AAA8 Extract Zip Spec      14 (20) '2.0'\n+01AAA9 Extract OS            00 (0) 'MS-DOS'\n+01AAAA General Purpose Flag  0000 (0)\n+01AAAC Compression Method    0000 (0) 'Stored'\n+01AAAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01AAB2 CRC                   00000000 (0)\n+01AAB6 Compressed Size       00000000 (0)\n+01AABA Uncompressed Size     00000000 (0)\n+01AABE Filename Length       002A (42)\n+01AAC0 Extra Length          0009 (9)\n+01AAC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1AAC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01AAEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01AAEE   Length              0005 (5)\n+01AAF0   Flags               01 (1) 'Modification'\n+01AAF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01AAF5 LOCAL HEADER #24      04034B50 (67324752)\n+01AAF9 Extract Zip Spec      14 (20) '2.0'\n+01AAFA Extract OS            00 (0) 'MS-DOS'\n+01AAFB General Purpose Flag  0000 (0)\n+01AAFD Compression Method    0000 (0) 'Stored'\n+01AAFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01AB03 CRC                   00000000 (0)\n+01AB07 Compressed Size       00000000 (0)\n+01AB0B Uncompressed Size     00000000 (0)\n+01AB0F Filename Length       0056 (86)\n+01AB11 Extra Length          0009 (9)\n+01AB13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1AB13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01AB69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01AB6B   Length              0005 (5)\n+01AB6D   Flags               01 (1) 'Modification'\n+01AB6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01AB72 LOCAL HEADER #25      04034B50 (67324752)\n+01AB76 Extract Zip Spec      14 (20) '2.0'\n+01AB77 Extract OS            00 (0) 'MS-DOS'\n+01AB78 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01AB7A Compression Method    0000 (0) 'Stored'\n+01AB7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01AB80 CRC                   00000000 (0)\n+01AB84 Compressed Size       00000000 (0)\n+01AB88 Uncompressed Size     00000000 (0)\n+01AB8C Filename Length       006C (108)\n+01AB8E Extra Length          0009 (9)\n+01AB90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1AB90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01ABFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01ABFE   Length              0005 (5)\n+01AC00   Flags               01 (1) 'Modification'\n+01AC01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01AC05 PAYLOAD\n+\n+01BBC4 DATA DESCRIPTOR       08074B50 (134695760)\n+01BBC8 CRC                   445AD7B2 (1146804146)\n+01BBCC Compressed Size       00000FBF (4031)\n+01BBD0 Uncompressed Size     00000FBF (4031)\n+\n+01BBD4 LOCAL HEADER #26      04034B50 (67324752)\n+01BBD8 Extract Zip Spec      14 (20) '2.0'\n+01BBD9 Extract OS            00 (0) 'MS-DOS'\n+01BBDA General Purpose Flag  0000 (0)\n+01BBDC Compression Method    0000 (0) 'Stored'\n+01BBDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01BBE2 CRC                   00000000 (0)\n+01BBE6 Compressed Size       00000000 (0)\n+01BBEA Uncompressed Size     00000000 (0)\n+01BBEE Filename Length       0056 (86)\n+01BBF0 Extra Length          0009 (9)\n+01BBF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1BBF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01BC48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01BC4A   Length              0005 (5)\n+01BC4C   Flags               01 (1) 'Modification'\n+01BC4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01BC51 LOCAL HEADER #27      04034B50 (67324752)\n+01BC55 Extract Zip Spec      14 (20) '2.0'\n+01BC56 Extract OS            00 (0) 'MS-DOS'\n+01BC57 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01BC59 Compression Method    0000 (0) 'Stored'\n+01BC5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01BC5F CRC                   00000000 (0)\n+01BC63 Compressed Size       00000000 (0)\n+01BC67 Uncompressed Size     00000000 (0)\n+01BC6B Filename Length       006C (108)\n+01BC6D Extra Length          0009 (9)\n+01BC6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1BC6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01BCDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01BCDD   Length              0005 (5)\n+01BCDF   Flags               01 (1) 'Modification'\n+01BCE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01BCE4 PAYLOAD\n+\n+01D3C2 DATA DESCRIPTOR       08074B50 (134695760)\n+01D3C6 CRC                   A2A96EA2 (2729012898)\n+01D3CA Compressed Size       000016DE (5854)\n+01D3CE Uncompressed Size     000016DE (5854)\n+\n+01D3D2 LOCAL HEADER #28      04034B50 (67324752)\n+01D3D6 Extract Zip Spec      14 (20) '2.0'\n+01D3D7 Extract OS            00 (0) 'MS-DOS'\n+01D3D8 General Purpose Flag  0000 (0)\n+01D3DA Compression Method    0000 (0) 'Stored'\n+01D3DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D3E0 CRC                   00000000 (0)\n+01D3E4 Compressed Size       00000000 (0)\n+01D3E8 Uncompressed Size     00000000 (0)\n+01D3EC Filename Length       002F (47)\n+01D3EE Extra Length          0009 (9)\n+01D3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D41F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D421   Length              0005 (5)\n+01D423   Flags               01 (1) 'Modification'\n+01D424   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01D428 LOCAL HEADER #29      04034B50 (67324752)\n+01D42C Extract Zip Spec      14 (20) '2.0'\n+01D42D Extract OS            00 (0) 'MS-DOS'\n+01D42E General Purpose Flag  0000 (0)\n+01D430 Compression Method    0000 (0) 'Stored'\n+01D432 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D436 CRC                   00000000 (0)\n+01D43A Compressed Size       00000000 (0)\n+01D43E Uncompressed Size     00000000 (0)\n+01D442 Filename Length       0036 (54)\n+01D444 Extra Length          0009 (9)\n+01D446 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D446: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D47C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D47E   Length              0005 (5)\n+01D480   Flags               01 (1) 'Modification'\n+01D481   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01D485 LOCAL HEADER #30      04034B50 (67324752)\n+01D489 Extract Zip Spec      14 (20) '2.0'\n+01D48A Extract OS            00 (0) 'MS-DOS'\n+01D48B General Purpose Flag  0000 (0)\n+01D48D Compression Method    0000 (0) 'Stored'\n+01D48F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D493 CRC                   00000000 (0)\n+01D497 Compressed Size       00000000 (0)\n+01D49B Uncompressed Size     00000000 (0)\n+01D49F Filename Length       0066 (102)\n+01D4A1 Extra Length          0009 (9)\n+01D4A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D4A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D509 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D50B   Length              0005 (5)\n+01D50D   Flags               01 (1) 'Modification'\n+01D50E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01D512 LOCAL HEADER #31      04034B50 (67324752)\n+01D516 Extract Zip Spec      14 (20) '2.0'\n+01D517 Extract OS            00 (0) 'MS-DOS'\n+01D518 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01D51A Compression Method    0000 (0) 'Stored'\n+01D51C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D520 CRC                   00000000 (0)\n+01D524 Compressed Size       00000000 (0)\n+01D528 Uncompressed Size     00000000 (0)\n+01D52C Filename Length       007C (124)\n+01D52E Extra Length          0009 (9)\n+01D530 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D530: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D5AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D5AE   Length              0005 (5)\n+01D5B0   Flags               01 (1) 'Modification'\n+01D5B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01D5B5 PAYLOAD\n+\n+01EAC7 DATA DESCRIPTOR       08074B50 (134695760)\n+01EACB CRC                   7416DF2A (1947655978)\n+01EACF Compressed Size       00001512 (5394)\n+01EAD3 Uncompressed Size     00001512 (5394)\n+\n+01EAD7 LOCAL HEADER #32      04034B50 (67324752)\n+01EADB Extract Zip Spec      14 (20) '2.0'\n+01EADC Extract OS            00 (0) 'MS-DOS'\n+01EADD General Purpose Flag  0000 (0)\n+01EADF Compression Method    0000 (0) 'Stored'\n+01EAE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01EAE5 CRC                   00000000 (0)\n+01EAE9 Compressed Size       00000000 (0)\n+01EAED Uncompressed Size     00000000 (0)\n+01EAF1 Filename Length       0022 (34)\n+01EAF3 Extra Length          0009 (9)\n+01EAF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1EAF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01EB17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01EB19   Length              0005 (5)\n+01EB1B   Flags               01 (1) 'Modification'\n+01EB1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01EB20 LOCAL HEADER #33      04034B50 (67324752)\n+01EB24 Extract Zip Spec      14 (20) '2.0'\n+01EB25 Extract OS            00 (0) 'MS-DOS'\n+01EB26 General Purpose Flag  0000 (0)\n+01EB28 Compression Method    0000 (0) 'Stored'\n+01EB2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01EB2E CRC                   00000000 (0)\n+01EB32 Compressed Size       00000000 (0)\n+01EB36 Uncompressed Size     00000000 (0)\n+01EB3A Filename Length       0029 (41)\n+01EB3C Extra Length          0009 (9)\n+01EB3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1EB3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01EB67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01EB69   Length              0005 (5)\n+01EB6B   Flags               01 (1) 'Modification'\n+01EB6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01EB70 LOCAL HEADER #34      04034B50 (67324752)\n+01EB74 Extract Zip Spec      14 (20) '2.0'\n+01EB75 Extract OS            00 (0) 'MS-DOS'\n+01EB76 General Purpose Flag  0000 (0)\n+01EB78 Compression Method    0000 (0) 'Stored'\n+01EB7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01EB7E CRC                   00000000 (0)\n+01EB82 Compressed Size       00000000 (0)\n+01EB86 Uncompressed Size     00000000 (0)\n+01EB8A Filename Length       0063 (99)\n+01EB8C Extra Length          0009 (9)\n+01EB8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1EB8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01EBF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01EBF3   Length              0005 (5)\n+01EBF5   Flags               01 (1) 'Modification'\n+01EBF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01EBFA LOCAL HEADER #35      04034B50 (67324752)\n+01EBFE Extract Zip Spec      14 (20) '2.0'\n+01EBFF Extract OS            00 (0) 'MS-DOS'\n+01EC00 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01EC02 Compression Method    0000 (0) 'Stored'\n+01EC04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01EC08 CRC                   00000000 (0)\n+01EC0C Compressed Size       00000000 (0)\n+01EC10 Uncompressed Size     00000000 (0)\n+01EC14 Filename Length       0079 (121)\n+01EC16 Extra Length          0009 (9)\n+01EC18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1EC18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01EC91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01EC93   Length              0005 (5)\n+01EC95   Flags               01 (1) 'Modification'\n+01EC96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01EC9A PAYLOAD\n+\n+021C2A DATA DESCRIPTOR       08074B50 (134695760)\n+021C2E CRC                   826E1CC4 (2188254404)\n+021C32 Compressed Size       00002F90 (12176)\n+021C36 Uncompressed Size     00002F90 (12176)\n+\n+021C3A LOCAL HEADER #36      04034B50 (67324752)\n+021C3E Extract Zip Spec      14 (20) '2.0'\n+021C3F Extract OS            00 (0) 'MS-DOS'\n+021C40 General Purpose Flag  0000 (0)\n+021C42 Compression Method    0000 (0) 'Stored'\n+021C44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+021C48 CRC                   00000000 (0)\n+021C4C Compressed Size       00000000 (0)\n+021C50 Uncompressed Size     00000000 (0)\n+021C54 Filename Length       006C (108)\n+021C56 Extra Length          0009 (9)\n+021C58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x21C58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021CC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021CC6   Length              0005 (5)\n+021CC8   Flags               01 (1) 'Modification'\n+021CC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+021CCD LOCAL HEADER #37      04034B50 (67324752)\n+021CD1 Extract Zip Spec      14 (20) '2.0'\n+021CD2 Extract OS            00 (0) 'MS-DOS'\n+021CD3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+021CD5 Compression Method    0000 (0) 'Stored'\n+021CD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+021CDB CRC                   00000000 (0)\n+021CDF Compressed Size       00000000 (0)\n+021CE3 Uncompressed Size     00000000 (0)\n+021CE7 Filename Length       0082 (130)\n+021CE9 Extra Length          0009 (9)\n+021CEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x21CEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021D6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021D6F   Length              0005 (5)\n+021D71   Flags               01 (1) 'Modification'\n+021D72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+021D76 PAYLOAD\n+\n+0226DD DATA DESCRIPTOR       08074B50 (134695760)\n+0226E1 CRC                   1BE163AC (467755948)\n+0226E5 Compressed Size       00000967 (2407)\n+0226E9 Uncompressed Size     00000967 (2407)\n+\n+0226ED LOCAL HEADER #38      04034B50 (67324752)\n+0226F1 Extract Zip Spec      14 (20) '2.0'\n+0226F2 Extract OS            00 (0) 'MS-DOS'\n+0226F3 General Purpose Flag  0000 (0)\n+0226F5 Compression Method    0000 (0) 'Stored'\n+0226F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0226FB CRC                   00000000 (0)\n+0226FF Compressed Size       00000000 (0)\n+022703 Uncompressed Size     00000000 (0)\n+022707 Filename Length       0066 (102)\n+022709 Extra Length          0009 (9)\n+02270B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2270B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+022771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+022773   Length              0005 (5)\n+022775   Flags               01 (1) 'Modification'\n+022776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02277A LOCAL HEADER #39      04034B50 (67324752)\n+02277E Extract Zip Spec      14 (20) '2.0'\n+02277F Extract OS            00 (0) 'MS-DOS'\n+022780 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+022782 Compression Method    0000 (0) 'Stored'\n+022784 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+022788 CRC                   00000000 (0)\n+02278C Compressed Size       00000000 (0)\n+022790 Uncompressed Size     00000000 (0)\n+022794 Filename Length       007C (124)\n+022796 Extra Length          0009 (9)\n+022798 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22798: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+022814 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+022816   Length              0005 (5)\n+022818   Flags               01 (1) 'Modification'\n+022819   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02281D PAYLOAD\n+\n+02302C DATA DESCRIPTOR       08074B50 (134695760)\n+023030 CRC                   11DB1110 (299569424)\n+023034 Compressed Size       0000080F (2063)\n+023038 Uncompressed Size     0000080F (2063)\n+\n+02303C LOCAL HEADER #40      04034B50 (67324752)\n+023040 Extract Zip Spec      14 (20) '2.0'\n+023041 Extract OS            00 (0) 'MS-DOS'\n+023042 General Purpose Flag  0000 (0)\n+023044 Compression Method    0000 (0) 'Stored'\n+023046 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02304A CRC                   00000000 (0)\n+02304E Compressed Size       00000000 (0)\n+023052 Uncompressed Size     00000000 (0)\n+023056 Filename Length       0062 (98)\n+023058 Extra Length          0009 (9)\n+02305A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2305A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0230BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0230BE   Length              0005 (5)\n+0230C0   Flags               01 (1) 'Modification'\n+0230C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0230C5 LOCAL HEADER #41      04034B50 (67324752)\n+0230C9 Extract Zip Spec      14 (20) '2.0'\n+0230CA Extract OS            00 (0) 'MS-DOS'\n+0230CB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0230CD Compression Method    0000 (0) 'Stored'\n+0230CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0230D3 CRC                   00000000 (0)\n+0230D7 Compressed Size       00000000 (0)\n+0230DB Uncompressed Size     00000000 (0)\n+0230DF Filename Length       0078 (120)\n+0230E1 Extra Length          0009 (9)\n+0230E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x230E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02315B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02315D   Length              0005 (5)\n+02315F   Flags               01 (1) 'Modification'\n+023160   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+023164 PAYLOAD\n+\n+023D80 DATA DESCRIPTOR       08074B50 (134695760)\n+023D84 CRC                   30A69673 (816223859)\n+023D88 Compressed Size       00000C1C (3100)\n+023D8C Uncompressed Size     00000C1C (3100)\n+\n+023D90 LOCAL HEADER #42      04034B50 (67324752)\n+023D94 Extract Zip Spec      14 (20) '2.0'\n+023D95 Extract OS            00 (0) 'MS-DOS'\n+023D96 General Purpose Flag  0000 (0)\n+023D98 Compression Method    0000 (0) 'Stored'\n+023D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023D9E CRC                   00000000 (0)\n+023DA2 Compressed Size       00000000 (0)\n+023DA6 Uncompressed Size     00000000 (0)\n+023DAA Filename Length       006C (108)\n+023DAC Extra Length          0009 (9)\n+023DAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23DAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023E1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023E1C   Length              0005 (5)\n+023E1E   Flags               01 (1) 'Modification'\n+023E1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+023E23 LOCAL HEADER #43      04034B50 (67324752)\n+023E27 Extract Zip Spec      14 (20) '2.0'\n+023E28 Extract OS            00 (0) 'MS-DOS'\n+023E29 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+023E2B Compression Method    0000 (0) 'Stored'\n+023E2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023E31 CRC                   00000000 (0)\n+023E35 Compressed Size       00000000 (0)\n+023E39 Uncompressed Size     00000000 (0)\n+023E3D Filename Length       0082 (130)\n+023E3F Extra Length          0009 (9)\n+023E41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23E41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023EC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023EC5   Length              0005 (5)\n+023EC7   Flags               01 (1) 'Modification'\n+023EC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+023ECC PAYLOAD\n+\n+0245A3 DATA DESCRIPTOR       08074B50 (134695760)\n+0245A7 CRC                   0C316B32 (204565298)\n+0245AB Compressed Size       000006D7 (1751)\n+0245AF Uncompressed Size     000006D7 (1751)\n+\n+0245B3 LOCAL HEADER #44      04034B50 (67324752)\n+0245B7 Extract Zip Spec      14 (20) '2.0'\n+0245B8 Extract OS            00 (0) 'MS-DOS'\n+0245B9 General Purpose Flag  0000 (0)\n+0245BB Compression Method    0000 (0) 'Stored'\n+0245BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0245C1 CRC                   00000000 (0)\n+0245C5 Compressed Size       00000000 (0)\n+0245C9 Uncompressed Size     00000000 (0)\n+0245CD Filename Length       0068 (104)\n+0245CF Extra Length          0009 (9)\n+0245D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x245D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024639 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02463B   Length              0005 (5)\n+02463D   Flags               01 (1) 'Modification'\n+02463E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+024642 LOCAL HEADER #45      04034B50 (67324752)\n+024646 Extract Zip Spec      14 (20) '2.0'\n+024647 Extract OS            00 (0) 'MS-DOS'\n+024648 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02464A Compression Method    0000 (0) 'Stored'\n+02464C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+024650 CRC                   00000000 (0)\n+024654 Compressed Size       00000000 (0)\n+024658 Uncompressed Size     00000000 (0)\n+02465C Filename Length       007E (126)\n+02465E Extra Length          0009 (9)\n+024660 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x24660: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0246DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0246E0   Length              0005 (5)\n+0246E2   Flags               01 (1) 'Modification'\n+0246E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0246E7 PAYLOAD\n+\n+025A22 DATA DESCRIPTOR       08074B50 (134695760)\n+025A26 CRC                   37BEEC96 (935259286)\n+025A2A Compressed Size       0000133B (4923)\n+025A2E Uncompressed Size     0000133B (4923)\n+\n+025A32 LOCAL HEADER #46      04034B50 (67324752)\n+025A36 Extract Zip Spec      14 (20) '2.0'\n+025A37 Extract OS            00 (0) 'MS-DOS'\n+025A38 General Purpose Flag  0000 (0)\n+025A3A Compression Method    0000 (0) 'Stored'\n+025A3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+025A40 CRC                   00000000 (0)\n+025A44 Compressed Size       00000000 (0)\n+025A48 Uncompressed Size     00000000 (0)\n+025A4C Filename Length       0070 (112)\n+025A4E Extra Length          0009 (9)\n+025A50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25A50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+025AC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025AC2   Length              0005 (5)\n+025AC4   Flags               01 (1) 'Modification'\n+025AC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+025AC9 LOCAL HEADER #47      04034B50 (67324752)\n+025ACD Extract Zip Spec      14 (20) '2.0'\n+025ACE Extract OS            00 (0) 'MS-DOS'\n+025ACF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+025AD1 Compression Method    0000 (0) 'Stored'\n+025AD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+025AD7 CRC                   00000000 (0)\n+025ADB Compressed Size       00000000 (0)\n+025ADF Uncompressed Size     00000000 (0)\n+025AE3 Filename Length       0086 (134)\n+025AE5 Extra Length          0009 (9)\n+025AE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x228FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x25AE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-022982 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022984   Length              0005 (5)\n-022986   Flags               01 (1) 'Modification'\n-022987   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02298B PAYLOAD\n-\n-0230D7 DATA DESCRIPTOR       08074B50 (134695760)\n-0230DB CRC                   D0AE7BE4 (3501095908)\n-0230DF Compressed Size       0000074C (1868)\n-0230E3 Uncompressed Size     0000074C (1868)\n-\n-0230E7 LOCAL HEADER #48      04034B50 (67324752)\n-0230EB Extract Zip Spec      14 (20) '2.0'\n-0230EC Extract OS            00 (0) 'MS-DOS'\n-0230ED General Purpose Flag  0000 (0)\n-0230EF Compression Method    0000 (0) 'Stored'\n-0230F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0230F5 CRC                   00000000 (0)\n-0230F9 Compressed Size       00000000 (0)\n-0230FD Uncompressed Size     00000000 (0)\n-023101 Filename Length       006C (108)\n-023103 Extra Length          0009 (9)\n-023105 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23105: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023171 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023173   Length              0005 (5)\n-023175   Flags               01 (1) 'Modification'\n-023176   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02317A LOCAL HEADER #49      04034B50 (67324752)\n-02317E Extract Zip Spec      14 (20) '2.0'\n-02317F Extract OS            00 (0) 'MS-DOS'\n-023180 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-023182 Compression Method    0000 (0) 'Stored'\n-023184 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023188 CRC                   00000000 (0)\n-02318C Compressed Size       00000000 (0)\n-023190 Uncompressed Size     00000000 (0)\n-023194 Filename Length       0082 (130)\n-023196 Extra Length          0009 (9)\n-023198 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23198: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02321A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02321C   Length              0005 (5)\n-02321E   Flags               01 (1) 'Modification'\n-02321F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-023223 PAYLOAD\n-\n-02425F DATA DESCRIPTOR       08074B50 (134695760)\n-024263 CRC                   4C134CE6 (1276333286)\n-024267 Compressed Size       0000103C (4156)\n-02426B Uncompressed Size     0000103C (4156)\n-\n-02426F LOCAL HEADER #50      04034B50 (67324752)\n-024273 Extract Zip Spec      14 (20) '2.0'\n-024274 Extract OS            00 (0) 'MS-DOS'\n-024275 General Purpose Flag  0000 (0)\n-024277 Compression Method    0000 (0) 'Stored'\n-024279 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02427D CRC                   00000000 (0)\n-024281 Compressed Size       00000000 (0)\n-024285 Uncompressed Size     00000000 (0)\n-024289 Filename Length       006E (110)\n-02428B Extra Length          0009 (9)\n-02428D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2428D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0242FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0242FD   Length              0005 (5)\n-0242FF   Flags               01 (1) 'Modification'\n-024300   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-024304 LOCAL HEADER #51      04034B50 (67324752)\n-024308 Extract Zip Spec      14 (20) '2.0'\n-024309 Extract OS            00 (0) 'MS-DOS'\n-02430A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02430C Compression Method    0000 (0) 'Stored'\n-02430E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024312 CRC                   00000000 (0)\n-024316 Compressed Size       00000000 (0)\n-02431A Uncompressed Size     00000000 (0)\n-02431E Filename Length       0084 (132)\n-024320 Extra Length          0009 (9)\n-024322 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+025B6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025B6F   Length              0005 (5)\n+025B71   Flags               01 (1) 'Modification'\n+025B72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+025B76 PAYLOAD\n+\n+0262C2 DATA DESCRIPTOR       08074B50 (134695760)\n+0262C6 CRC                   D0AE7BE4 (3501095908)\n+0262CA Compressed Size       0000074C (1868)\n+0262CE Uncompressed Size     0000074C (1868)\n+\n+0262D2 LOCAL HEADER #48      04034B50 (67324752)\n+0262D6 Extract Zip Spec      14 (20) '2.0'\n+0262D7 Extract OS            00 (0) 'MS-DOS'\n+0262D8 General Purpose Flag  0000 (0)\n+0262DA Compression Method    0000 (0) 'Stored'\n+0262DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0262E0 CRC                   00000000 (0)\n+0262E4 Compressed Size       00000000 (0)\n+0262E8 Uncompressed Size     00000000 (0)\n+0262EC Filename Length       006C (108)\n+0262EE Extra Length          0009 (9)\n+0262F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x262F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02635C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02635E   Length              0005 (5)\n+026360   Flags               01 (1) 'Modification'\n+026361   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026365 LOCAL HEADER #49      04034B50 (67324752)\n+026369 Extract Zip Spec      14 (20) '2.0'\n+02636A Extract OS            00 (0) 'MS-DOS'\n+02636B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02636D Compression Method    0000 (0) 'Stored'\n+02636F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026373 CRC                   00000000 (0)\n+026377 Compressed Size       00000000 (0)\n+02637B Uncompressed Size     00000000 (0)\n+02637F Filename Length       0082 (130)\n+026381 Extra Length          0009 (9)\n+026383 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26383: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026405 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026407   Length              0005 (5)\n+026409   Flags               01 (1) 'Modification'\n+02640A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02640E PAYLOAD\n+\n+02744A DATA DESCRIPTOR       08074B50 (134695760)\n+02744E CRC                   4C134CE6 (1276333286)\n+027452 Compressed Size       0000103C (4156)\n+027456 Uncompressed Size     0000103C (4156)\n+\n+02745A LOCAL HEADER #50      04034B50 (67324752)\n+02745E Extract Zip Spec      14 (20) '2.0'\n+02745F Extract OS            00 (0) 'MS-DOS'\n+027460 General Purpose Flag  0000 (0)\n+027462 Compression Method    0000 (0) 'Stored'\n+027464 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027468 CRC                   00000000 (0)\n+02746C Compressed Size       00000000 (0)\n+027470 Uncompressed Size     00000000 (0)\n+027474 Filename Length       006E (110)\n+027476 Extra Length          0009 (9)\n+027478 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27478: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0274E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0274E8   Length              0005 (5)\n+0274EA   Flags               01 (1) 'Modification'\n+0274EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0274EF LOCAL HEADER #51      04034B50 (67324752)\n+0274F3 Extract Zip Spec      14 (20) '2.0'\n+0274F4 Extract OS            00 (0) 'MS-DOS'\n+0274F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0274F7 Compression Method    0000 (0) 'Stored'\n+0274F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0274FD CRC                   00000000 (0)\n+027501 Compressed Size       00000000 (0)\n+027505 Uncompressed Size     00000000 (0)\n+027509 Filename Length       0084 (132)\n+02750B Extra Length          0009 (9)\n+02750D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x24322: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2750D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0243A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0243A8   Length              0005 (5)\n-0243AA   Flags               01 (1) 'Modification'\n-0243AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0243AF PAYLOAD\n-\n-024BE7 DATA DESCRIPTOR       08074B50 (134695760)\n-024BEB CRC                   63086228 (1661493800)\n-024BEF Compressed Size       00000838 (2104)\n-024BF3 Uncompressed Size     00000838 (2104)\n-\n-024BF7 LOCAL HEADER #52      04034B50 (67324752)\n-024BFB Extract Zip Spec      14 (20) '2.0'\n-024BFC Extract OS            00 (0) 'MS-DOS'\n-024BFD General Purpose Flag  0000 (0)\n-024BFF Compression Method    0000 (0) 'Stored'\n-024C01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024C05 CRC                   00000000 (0)\n-024C09 Compressed Size       00000000 (0)\n-024C0D Uncompressed Size     00000000 (0)\n-024C11 Filename Length       006A (106)\n-024C13 Extra Length          0009 (9)\n-024C15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24C15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-024C7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024C81   Length              0005 (5)\n-024C83   Flags               01 (1) 'Modification'\n-024C84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-024C88 LOCAL HEADER #53      04034B50 (67324752)\n-024C8C Extract Zip Spec      14 (20) '2.0'\n-024C8D Extract OS            00 (0) 'MS-DOS'\n-024C8E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-024C90 Compression Method    0000 (0) 'Stored'\n-024C92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024C96 CRC                   00000000 (0)\n-024C9A Compressed Size       00000000 (0)\n-024C9E Uncompressed Size     00000000 (0)\n-024CA2 Filename Length       0080 (128)\n-024CA4 Extra Length          0009 (9)\n-024CA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24CA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-024D26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024D28   Length              0005 (5)\n-024D2A   Flags               01 (1) 'Modification'\n-024D2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-024D2F PAYLOAD\n-\n-0259BF DATA DESCRIPTOR       08074B50 (134695760)\n-0259C3 CRC                   9EF621C1 (2666930625)\n-0259C7 Compressed Size       00000C90 (3216)\n-0259CB Uncompressed Size     00000C90 (3216)\n-\n-0259CF LOCAL HEADER #54      04034B50 (67324752)\n-0259D3 Extract Zip Spec      14 (20) '2.0'\n-0259D4 Extract OS            00 (0) 'MS-DOS'\n-0259D5 General Purpose Flag  0000 (0)\n-0259D7 Compression Method    0000 (0) 'Stored'\n-0259D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0259DD CRC                   00000000 (0)\n-0259E1 Compressed Size       00000000 (0)\n-0259E5 Uncompressed Size     00000000 (0)\n-0259E9 Filename Length       0052 (82)\n-0259EB Extra Length          0009 (9)\n-0259ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x259ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-025A3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-025A41   Length              0005 (5)\n-025A43   Flags               01 (1) 'Modification'\n-025A44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-025A48 LOCAL HEADER #55      04034B50 (67324752)\n-025A4C Extract Zip Spec      14 (20) '2.0'\n-025A4D Extract OS            00 (0) 'MS-DOS'\n-025A4E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-025A50 Compression Method    0000 (0) 'Stored'\n-025A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-025A56 CRC                   00000000 (0)\n-025A5A Compressed Size       00000000 (0)\n-025A5E Uncompressed Size     00000000 (0)\n-025A62 Filename Length       0068 (104)\n-025A64 Extra Length          0009 (9)\n-025A66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x25A66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-025ACE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-025AD0   Length              0005 (5)\n-025AD2   Flags               01 (1) 'Modification'\n-025AD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-025AD7 PAYLOAD\n-\n-0269CD DATA DESCRIPTOR       08074B50 (134695760)\n-0269D1 CRC                   6BE0FFE8 (1809907688)\n-0269D5 Compressed Size       00000EF6 (3830)\n-0269D9 Uncompressed Size     00000EF6 (3830)\n-\n-0269DD LOCAL HEADER #56      04034B50 (67324752)\n-0269E1 Extract Zip Spec      14 (20) '2.0'\n-0269E2 Extract OS            00 (0) 'MS-DOS'\n-0269E3 General Purpose Flag  0000 (0)\n-0269E5 Compression Method    0000 (0) 'Stored'\n-0269E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0269EB CRC                   00000000 (0)\n-0269EF Compressed Size       00000000 (0)\n-0269F3 Uncompressed Size     00000000 (0)\n-0269F7 Filename Length       0057 (87)\n-0269F9 Extra Length          0009 (9)\n-0269FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x269FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026A52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026A54   Length              0005 (5)\n-026A56   Flags               01 (1) 'Modification'\n-026A57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-026A5B LOCAL HEADER #57      04034B50 (67324752)\n-026A5F Extract Zip Spec      14 (20) '2.0'\n-026A60 Extract OS            00 (0) 'MS-DOS'\n-026A61 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-026A63 Compression Method    0000 (0) 'Stored'\n-026A65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026A69 CRC                   00000000 (0)\n-026A6D Compressed Size       00000000 (0)\n-026A71 Uncompressed Size     00000000 (0)\n-026A75 Filename Length       006D (109)\n-026A77 Extra Length          0009 (9)\n-026A79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26A79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026AE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026AE8   Length              0005 (5)\n-026AEA   Flags               01 (1) 'Modification'\n-026AEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-026AEF PAYLOAD\n-\n-02720A DATA DESCRIPTOR       08074B50 (134695760)\n-02720E CRC                   988DC4AD (2559427757)\n-027212 Compressed Size       0000071B (1819)\n-027216 Uncompressed Size     0000071B (1819)\n-\n-02721A LOCAL HEADER #58      04034B50 (67324752)\n-02721E Extract Zip Spec      14 (20) '2.0'\n-02721F Extract OS            00 (0) 'MS-DOS'\n-027220 General Purpose Flag  0000 (0)\n-027222 Compression Method    0000 (0) 'Stored'\n-027224 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027228 CRC                   00000000 (0)\n-02722C Compressed Size       00000000 (0)\n-027230 Uncompressed Size     00000000 (0)\n-027234 Filename Length       0072 (114)\n-027236 Extra Length          0009 (9)\n-027238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0272AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0272AC   Length              0005 (5)\n-0272AE   Flags               01 (1) 'Modification'\n-0272AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0272B3 LOCAL HEADER #59      04034B50 (67324752)\n-0272B7 Extract Zip Spec      14 (20) '2.0'\n-0272B8 Extract OS            00 (0) 'MS-DOS'\n-0272B9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0272BB Compression Method    0000 (0) 'Stored'\n-0272BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0272C1 CRC                   00000000 (0)\n-0272C5 Compressed Size       00000000 (0)\n-0272C9 Uncompressed Size     00000000 (0)\n-0272CD Filename Length       0088 (136)\n-0272CF Extra Length          0009 (9)\n-0272D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+027591 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027593   Length              0005 (5)\n+027595   Flags               01 (1) 'Modification'\n+027596   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02759A PAYLOAD\n+\n+027DD2 DATA DESCRIPTOR       08074B50 (134695760)\n+027DD6 CRC                   63086228 (1661493800)\n+027DDA Compressed Size       00000838 (2104)\n+027DDE Uncompressed Size     00000838 (2104)\n+\n+027DE2 LOCAL HEADER #52      04034B50 (67324752)\n+027DE6 Extract Zip Spec      14 (20) '2.0'\n+027DE7 Extract OS            00 (0) 'MS-DOS'\n+027DE8 General Purpose Flag  0000 (0)\n+027DEA Compression Method    0000 (0) 'Stored'\n+027DEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027DF0 CRC                   00000000 (0)\n+027DF4 Compressed Size       00000000 (0)\n+027DF8 Uncompressed Size     00000000 (0)\n+027DFC Filename Length       006A (106)\n+027DFE Extra Length          0009 (9)\n+027E00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27E00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027E6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027E6C   Length              0005 (5)\n+027E6E   Flags               01 (1) 'Modification'\n+027E6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027E73 LOCAL HEADER #53      04034B50 (67324752)\n+027E77 Extract Zip Spec      14 (20) '2.0'\n+027E78 Extract OS            00 (0) 'MS-DOS'\n+027E79 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+027E7B Compression Method    0000 (0) 'Stored'\n+027E7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027E81 CRC                   00000000 (0)\n+027E85 Compressed Size       00000000 (0)\n+027E89 Uncompressed Size     00000000 (0)\n+027E8D Filename Length       0080 (128)\n+027E8F Extra Length          0009 (9)\n+027E91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27E91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027F11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027F13   Length              0005 (5)\n+027F15   Flags               01 (1) 'Modification'\n+027F16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+027F1A PAYLOAD\n+\n+028BAA DATA DESCRIPTOR       08074B50 (134695760)\n+028BAE CRC                   9EF621C1 (2666930625)\n+028BB2 Compressed Size       00000C90 (3216)\n+028BB6 Uncompressed Size     00000C90 (3216)\n+\n+028BBA LOCAL HEADER #54      04034B50 (67324752)\n+028BBE Extract Zip Spec      14 (20) '2.0'\n+028BBF Extract OS            00 (0) 'MS-DOS'\n+028BC0 General Purpose Flag  0000 (0)\n+028BC2 Compression Method    0000 (0) 'Stored'\n+028BC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028BC8 CRC                   00000000 (0)\n+028BCC Compressed Size       00000000 (0)\n+028BD0 Uncompressed Size     00000000 (0)\n+028BD4 Filename Length       0052 (82)\n+028BD6 Extra Length          0009 (9)\n+028BD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28BD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+028C2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+028C2C   Length              0005 (5)\n+028C2E   Flags               01 (1) 'Modification'\n+028C2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+028C33 LOCAL HEADER #55      04034B50 (67324752)\n+028C37 Extract Zip Spec      14 (20) '2.0'\n+028C38 Extract OS            00 (0) 'MS-DOS'\n+028C39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+028C3B Compression Method    0000 (0) 'Stored'\n+028C3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028C41 CRC                   00000000 (0)\n+028C45 Compressed Size       00000000 (0)\n+028C49 Uncompressed Size     00000000 (0)\n+028C4D Filename Length       0068 (104)\n+028C4F Extra Length          0009 (9)\n+028C51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28C51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+028CB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+028CBB   Length              0005 (5)\n+028CBD   Flags               01 (1) 'Modification'\n+028CBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+028CC2 PAYLOAD\n+\n+029BB8 DATA DESCRIPTOR       08074B50 (134695760)\n+029BBC CRC                   6BE0FFE8 (1809907688)\n+029BC0 Compressed Size       00000EF6 (3830)\n+029BC4 Uncompressed Size     00000EF6 (3830)\n+\n+029BC8 LOCAL HEADER #56      04034B50 (67324752)\n+029BCC Extract Zip Spec      14 (20) '2.0'\n+029BCD Extract OS            00 (0) 'MS-DOS'\n+029BCE General Purpose Flag  0000 (0)\n+029BD0 Compression Method    0000 (0) 'Stored'\n+029BD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029BD6 CRC                   00000000 (0)\n+029BDA Compressed Size       00000000 (0)\n+029BDE Uncompressed Size     00000000 (0)\n+029BE2 Filename Length       0057 (87)\n+029BE4 Extra Length          0009 (9)\n+029BE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29BE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029C3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029C3F   Length              0005 (5)\n+029C41   Flags               01 (1) 'Modification'\n+029C42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029C46 LOCAL HEADER #57      04034B50 (67324752)\n+029C4A Extract Zip Spec      14 (20) '2.0'\n+029C4B Extract OS            00 (0) 'MS-DOS'\n+029C4C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+029C4E Compression Method    0000 (0) 'Stored'\n+029C50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029C54 CRC                   00000000 (0)\n+029C58 Compressed Size       00000000 (0)\n+029C5C Uncompressed Size     00000000 (0)\n+029C60 Filename Length       006D (109)\n+029C62 Extra Length          0009 (9)\n+029C64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29C64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029CD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029CD3   Length              0005 (5)\n+029CD5   Flags               01 (1) 'Modification'\n+029CD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+029CDA PAYLOAD\n+\n+02A3F5 DATA DESCRIPTOR       08074B50 (134695760)\n+02A3F9 CRC                   988DC4AD (2559427757)\n+02A3FD Compressed Size       0000071B (1819)\n+02A401 Uncompressed Size     0000071B (1819)\n+\n+02A405 LOCAL HEADER #58      04034B50 (67324752)\n+02A409 Extract Zip Spec      14 (20) '2.0'\n+02A40A Extract OS            00 (0) 'MS-DOS'\n+02A40B General Purpose Flag  0000 (0)\n+02A40D Compression Method    0000 (0) 'Stored'\n+02A40F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02A413 CRC                   00000000 (0)\n+02A417 Compressed Size       00000000 (0)\n+02A41B Uncompressed Size     00000000 (0)\n+02A41F Filename Length       0072 (114)\n+02A421 Extra Length          0009 (9)\n+02A423 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A423: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02A495 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02A497   Length              0005 (5)\n+02A499   Flags               01 (1) 'Modification'\n+02A49A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02A49E LOCAL HEADER #59      04034B50 (67324752)\n+02A4A2 Extract Zip Spec      14 (20) '2.0'\n+02A4A3 Extract OS            00 (0) 'MS-DOS'\n+02A4A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02A4A6 Compression Method    0000 (0) 'Stored'\n+02A4A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02A4AC CRC                   00000000 (0)\n+02A4B0 Compressed Size       00000000 (0)\n+02A4B4 Uncompressed Size     00000000 (0)\n+02A4B8 Filename Length       0088 (136)\n+02A4BA Extra Length          0009 (9)\n+02A4BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x272D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2A4BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-027359 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02735B   Length              0005 (5)\n-02735D   Flags               01 (1) 'Modification'\n-02735E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-027362 PAYLOAD\n-\n-027F8B DATA DESCRIPTOR       08074B50 (134695760)\n-027F8F CRC                   07A59EC9 (128294601)\n-027F93 Compressed Size       00000C29 (3113)\n-027F97 Uncompressed Size     00000C29 (3113)\n-\n-027F9B LOCAL HEADER #60      04034B50 (67324752)\n-027F9F Extract Zip Spec      14 (20) '2.0'\n-027FA0 Extract OS            00 (0) 'MS-DOS'\n-027FA1 General Purpose Flag  0000 (0)\n-027FA3 Compression Method    0000 (0) 'Stored'\n-027FA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027FA9 CRC                   00000000 (0)\n-027FAD Compressed Size       00000000 (0)\n-027FB1 Uncompressed Size     00000000 (0)\n-027FB5 Filename Length       0024 (36)\n-027FB7 Extra Length          0009 (9)\n-027FB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27FB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027FDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027FDF   Length              0005 (5)\n-027FE1   Flags               01 (1) 'Modification'\n-027FE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027FE6 LOCAL HEADER #61      04034B50 (67324752)\n-027FEA Extract Zip Spec      14 (20) '2.0'\n-027FEB Extract OS            00 (0) 'MS-DOS'\n-027FEC General Purpose Flag  0000 (0)\n-027FEE Compression Method    0000 (0) 'Stored'\n-027FF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027FF4 CRC                   00000000 (0)\n-027FF8 Compressed Size       00000000 (0)\n-027FFC Uncompressed Size     00000000 (0)\n-028000 Filename Length       002B (43)\n-028002 Extra Length          0009 (9)\n-028004 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28004: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02802F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028031   Length              0005 (5)\n-028033   Flags               01 (1) 'Modification'\n-028034   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-028038 LOCAL HEADER #62      04034B50 (67324752)\n-02803C Extract Zip Spec      14 (20) '2.0'\n-02803D Extract OS            00 (0) 'MS-DOS'\n-02803E General Purpose Flag  0000 (0)\n-028040 Compression Method    0000 (0) 'Stored'\n-028042 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028046 CRC                   00000000 (0)\n-02804A Compressed Size       00000000 (0)\n-02804E Uncompressed Size     00000000 (0)\n-028052 Filename Length       006C (108)\n-028054 Extra Length          0009 (9)\n-028056 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28056: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0280C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0280C4   Length              0005 (5)\n-0280C6   Flags               01 (1) 'Modification'\n-0280C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0280CB LOCAL HEADER #63      04034B50 (67324752)\n-0280CF Extract Zip Spec      14 (20) '2.0'\n-0280D0 Extract OS            00 (0) 'MS-DOS'\n-0280D1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0280D3 Compression Method    0000 (0) 'Stored'\n-0280D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0280D9 CRC                   00000000 (0)\n-0280DD Compressed Size       00000000 (0)\n-0280E1 Uncompressed Size     00000000 (0)\n-0280E5 Filename Length       0082 (130)\n-0280E7 Extra Length          0009 (9)\n-0280E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x280E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02816B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02816D   Length              0005 (5)\n-02816F   Flags               01 (1) 'Modification'\n-028170   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028174 PAYLOAD\n-\n-028B40 DATA DESCRIPTOR       08074B50 (134695760)\n-028B44 CRC                   A7D3962C (2815661612)\n-028B48 Compressed Size       000009CC (2508)\n-028B4C Uncompressed Size     000009CC (2508)\n-\n-028B50 LOCAL HEADER #64      04034B50 (67324752)\n-028B54 Extract Zip Spec      14 (20) '2.0'\n-028B55 Extract OS            00 (0) 'MS-DOS'\n-028B56 General Purpose Flag  0000 (0)\n-028B58 Compression Method    0000 (0) 'Stored'\n-028B5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028B5E CRC                   00000000 (0)\n-028B62 Compressed Size       00000000 (0)\n-028B66 Uncompressed Size     00000000 (0)\n-028B6A Filename Length       0073 (115)\n-028B6C Extra Length          0009 (9)\n-028B6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28B6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-028BE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028BE3   Length              0005 (5)\n-028BE5   Flags               01 (1) 'Modification'\n-028BE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-028BEA LOCAL HEADER #65      04034B50 (67324752)\n-028BEE Extract Zip Spec      14 (20) '2.0'\n-028BEF Extract OS            00 (0) 'MS-DOS'\n-028BF0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-028BF2 Compression Method    0000 (0) 'Stored'\n-028BF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028BF8 CRC                   00000000 (0)\n-028BFC Compressed Size       00000000 (0)\n-028C00 Uncompressed Size     00000000 (0)\n-028C04 Filename Length       0089 (137)\n-028C06 Extra Length          0009 (9)\n-028C08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02A544 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02A546   Length              0005 (5)\n+02A548   Flags               01 (1) 'Modification'\n+02A549   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02A54D PAYLOAD\n+\n+02B176 DATA DESCRIPTOR       08074B50 (134695760)\n+02B17A CRC                   07A59EC9 (128294601)\n+02B17E Compressed Size       00000C29 (3113)\n+02B182 Uncompressed Size     00000C29 (3113)\n+\n+02B186 LOCAL HEADER #60      04034B50 (67324752)\n+02B18A Extract Zip Spec      14 (20) '2.0'\n+02B18B Extract OS            00 (0) 'MS-DOS'\n+02B18C General Purpose Flag  0000 (0)\n+02B18E Compression Method    0000 (0) 'Stored'\n+02B190 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B194 CRC                   00000000 (0)\n+02B198 Compressed Size       00000000 (0)\n+02B19C Uncompressed Size     00000000 (0)\n+02B1A0 Filename Length       0024 (36)\n+02B1A2 Extra Length          0009 (9)\n+02B1A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B1A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B1C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B1CA   Length              0005 (5)\n+02B1CC   Flags               01 (1) 'Modification'\n+02B1CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B1D1 LOCAL HEADER #61      04034B50 (67324752)\n+02B1D5 Extract Zip Spec      14 (20) '2.0'\n+02B1D6 Extract OS            00 (0) 'MS-DOS'\n+02B1D7 General Purpose Flag  0000 (0)\n+02B1D9 Compression Method    0000 (0) 'Stored'\n+02B1DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B1DF CRC                   00000000 (0)\n+02B1E3 Compressed Size       00000000 (0)\n+02B1E7 Uncompressed Size     00000000 (0)\n+02B1EB Filename Length       002B (43)\n+02B1ED Extra Length          0009 (9)\n+02B1EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B1EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B21A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B21C   Length              0005 (5)\n+02B21E   Flags               01 (1) 'Modification'\n+02B21F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B223 LOCAL HEADER #62      04034B50 (67324752)\n+02B227 Extract Zip Spec      14 (20) '2.0'\n+02B228 Extract OS            00 (0) 'MS-DOS'\n+02B229 General Purpose Flag  0000 (0)\n+02B22B Compression Method    0000 (0) 'Stored'\n+02B22D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B231 CRC                   00000000 (0)\n+02B235 Compressed Size       00000000 (0)\n+02B239 Uncompressed Size     00000000 (0)\n+02B23D Filename Length       006C (108)\n+02B23F Extra Length          0009 (9)\n+02B241 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B241: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B2AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B2AF   Length              0005 (5)\n+02B2B1   Flags               01 (1) 'Modification'\n+02B2B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B2B6 LOCAL HEADER #63      04034B50 (67324752)\n+02B2BA Extract Zip Spec      14 (20) '2.0'\n+02B2BB Extract OS            00 (0) 'MS-DOS'\n+02B2BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02B2BE Compression Method    0000 (0) 'Stored'\n+02B2C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B2C4 CRC                   00000000 (0)\n+02B2C8 Compressed Size       00000000 (0)\n+02B2CC Uncompressed Size     00000000 (0)\n+02B2D0 Filename Length       0082 (130)\n+02B2D2 Extra Length          0009 (9)\n+02B2D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B2D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B356 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B358   Length              0005 (5)\n+02B35A   Flags               01 (1) 'Modification'\n+02B35B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02B35F PAYLOAD\n+\n+02BD2B DATA DESCRIPTOR       08074B50 (134695760)\n+02BD2F CRC                   A7D3962C (2815661612)\n+02BD33 Compressed Size       000009CC (2508)\n+02BD37 Uncompressed Size     000009CC (2508)\n+\n+02BD3B LOCAL HEADER #64      04034B50 (67324752)\n+02BD3F Extract Zip Spec      14 (20) '2.0'\n+02BD40 Extract OS            00 (0) 'MS-DOS'\n+02BD41 General Purpose Flag  0000 (0)\n+02BD43 Compression Method    0000 (0) 'Stored'\n+02BD45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02BD49 CRC                   00000000 (0)\n+02BD4D Compressed Size       00000000 (0)\n+02BD51 Uncompressed Size     00000000 (0)\n+02BD55 Filename Length       0073 (115)\n+02BD57 Extra Length          0009 (9)\n+02BD59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2BD59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02BDCC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02BDCE   Length              0005 (5)\n+02BDD0   Flags               01 (1) 'Modification'\n+02BDD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02BDD5 LOCAL HEADER #65      04034B50 (67324752)\n+02BDD9 Extract Zip Spec      14 (20) '2.0'\n+02BDDA Extract OS            00 (0) 'MS-DOS'\n+02BDDB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02BDDD Compression Method    0000 (0) 'Stored'\n+02BDDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02BDE3 CRC                   00000000 (0)\n+02BDE7 Compressed Size       00000000 (0)\n+02BDEB Uncompressed Size     00000000 (0)\n+02BDEF Filename Length       0089 (137)\n+02BDF1 Extra Length          0009 (9)\n+02BDF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXX'\n #\n-# WARNING: Offset 0x28C08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BDF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-028C91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028C93   Length              0005 (5)\n-028C95   Flags               01 (1) 'Modification'\n-028C96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028C9A PAYLOAD\n-\n-029522 DATA DESCRIPTOR       08074B50 (134695760)\n-029526 CRC                   2E17013D (773259581)\n-02952A Compressed Size       00000888 (2184)\n-02952E Uncompressed Size     00000888 (2184)\n-\n-029532 LOCAL HEADER #66      04034B50 (67324752)\n-029536 Extract Zip Spec      14 (20) '2.0'\n-029537 Extract OS            00 (0) 'MS-DOS'\n-029538 General Purpose Flag  0000 (0)\n-02953A Compression Method    0000 (0) 'Stored'\n-02953C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029540 CRC                   00000000 (0)\n-029544 Compressed Size       00000000 (0)\n-029548 Uncompressed Size     00000000 (0)\n-02954C Filename Length       0022 (34)\n-02954E Extra Length          0009 (9)\n-029550 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29550: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029572 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029574   Length              0005 (5)\n-029576   Flags               01 (1) 'Modification'\n-029577   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02957B LOCAL HEADER #67      04034B50 (67324752)\n-02957F Extract Zip Spec      14 (20) '2.0'\n-029580 Extract OS            00 (0) 'MS-DOS'\n-029581 General Purpose Flag  0000 (0)\n-029583 Compression Method    0000 (0) 'Stored'\n-029585 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029589 CRC                   00000000 (0)\n-02958D Compressed Size       00000000 (0)\n-029591 Uncompressed Size     00000000 (0)\n-029595 Filename Length       0029 (41)\n-029597 Extra Length          0009 (9)\n-029599 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29599: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0295C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0295C4   Length              0005 (5)\n-0295C6   Flags               01 (1) 'Modification'\n-0295C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0295CB LOCAL HEADER #68      04034B50 (67324752)\n-0295CF Extract Zip Spec      14 (20) '2.0'\n-0295D0 Extract OS            00 (0) 'MS-DOS'\n-0295D1 General Purpose Flag  0000 (0)\n-0295D3 Compression Method    0000 (0) 'Stored'\n-0295D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0295D9 CRC                   00000000 (0)\n-0295DD Compressed Size       00000000 (0)\n-0295E1 Uncompressed Size     00000000 (0)\n-0295E5 Filename Length       0055 (85)\n-0295E7 Extra Length          0009 (9)\n-0295E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x295E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02963E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029640   Length              0005 (5)\n-029642   Flags               01 (1) 'Modification'\n-029643   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029647 LOCAL HEADER #69      04034B50 (67324752)\n-02964B Extract Zip Spec      14 (20) '2.0'\n-02964C Extract OS            00 (0) 'MS-DOS'\n-02964D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02964F Compression Method    0000 (0) 'Stored'\n-029651 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029655 CRC                   00000000 (0)\n-029659 Compressed Size       00000000 (0)\n-02965D Uncompressed Size     00000000 (0)\n-029661 Filename Length       006B (107)\n-029663 Extra Length          0009 (9)\n-029665 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29665: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0296D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0296D2   Length              0005 (5)\n-0296D4   Flags               01 (1) 'Modification'\n-0296D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0296D9 PAYLOAD\n-\n-029DE4 DATA DESCRIPTOR       08074B50 (134695760)\n-029DE8 CRC                   C1E5A225 (3253051941)\n-029DEC Compressed Size       0000070B (1803)\n-029DF0 Uncompressed Size     0000070B (1803)\n-\n-029DF4 LOCAL HEADER #70      04034B50 (67324752)\n-029DF8 Extract Zip Spec      14 (20) '2.0'\n-029DF9 Extract OS            00 (0) 'MS-DOS'\n-029DFA General Purpose Flag  0000 (0)\n-029DFC Compression Method    0000 (0) 'Stored'\n-029DFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029E02 CRC                   00000000 (0)\n-029E06 Compressed Size       00000000 (0)\n-029E0A Uncompressed Size     00000000 (0)\n-029E0E Filename Length       0054 (84)\n-029E10 Extra Length          0009 (9)\n-029E12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29E12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029E66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029E68   Length              0005 (5)\n-029E6A   Flags               01 (1) 'Modification'\n-029E6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029E6F LOCAL HEADER #71      04034B50 (67324752)\n-029E73 Extract Zip Spec      14 (20) '2.0'\n-029E74 Extract OS            00 (0) 'MS-DOS'\n-029E75 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-029E77 Compression Method    0000 (0) 'Stored'\n-029E79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029E7D CRC                   00000000 (0)\n-029E81 Compressed Size       00000000 (0)\n-029E85 Uncompressed Size     00000000 (0)\n-029E89 Filename Length       006A (106)\n-029E8B Extra Length          0009 (9)\n-029E8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29E8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029EF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029EF9   Length              0005 (5)\n-029EFB   Flags               01 (1) 'Modification'\n-029EFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-029F00 PAYLOAD\n-\n-02A54D DATA DESCRIPTOR       08074B50 (134695760)\n-02A551 CRC                   8950733E (2303750974)\n-02A555 Compressed Size       0000064D (1613)\n-02A559 Uncompressed Size     0000064D (1613)\n-\n-02A55D LOCAL HEADER #72      04034B50 (67324752)\n-02A561 Extract Zip Spec      14 (20) '2.0'\n-02A562 Extract OS            00 (0) 'MS-DOS'\n-02A563 General Purpose Flag  0000 (0)\n-02A565 Compression Method    0000 (0) 'Stored'\n-02A567 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02A56B CRC                   00000000 (0)\n-02A56F Compressed Size       00000000 (0)\n-02A573 Uncompressed Size     00000000 (0)\n-02A577 Filename Length       0053 (83)\n-02A579 Extra Length          0009 (9)\n-02A57B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2A57B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02A5CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02A5D0   Length              0005 (5)\n-02A5D2   Flags               01 (1) 'Modification'\n-02A5D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02A5D7 LOCAL HEADER #73      04034B50 (67324752)\n-02A5DB Extract Zip Spec      14 (20) '2.0'\n-02A5DC Extract OS            00 (0) 'MS-DOS'\n-02A5DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02A5DF Compression Method    0000 (0) 'Stored'\n-02A5E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02A5E5 CRC                   00000000 (0)\n-02A5E9 Compressed Size       00000000 (0)\n-02A5ED Uncompressed Size     00000000 (0)\n-02A5F1 Filename Length       0069 (105)\n-02A5F3 Extra Length          0009 (9)\n-02A5F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2A5F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02A65E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02A660   Length              0005 (5)\n-02A662   Flags               01 (1) 'Modification'\n-02A663   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02A667 PAYLOAD\n-\n-02ACAA DATA DESCRIPTOR       08074B50 (134695760)\n-02ACAE CRC                   A0157ABE (2685762238)\n-02ACB2 Compressed Size       00000643 (1603)\n-02ACB6 Uncompressed Size     00000643 (1603)\n-\n-02ACBA LOCAL HEADER #74      04034B50 (67324752)\n-02ACBE Extract Zip Spec      14 (20) '2.0'\n-02ACBF Extract OS            00 (0) 'MS-DOS'\n-02ACC0 General Purpose Flag  0000 (0)\n-02ACC2 Compression Method    0000 (0) 'Stored'\n-02ACC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02ACC8 CRC                   00000000 (0)\n-02ACCC Compressed Size       00000000 (0)\n-02ACD0 Uncompressed Size     00000000 (0)\n-02ACD4 Filename Length       002B (43)\n-02ACD6 Extra Length          0009 (9)\n-02ACD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2ACD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02AD03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02AD05   Length              0005 (5)\n-02AD07   Flags               01 (1) 'Modification'\n-02AD08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02AD0C LOCAL HEADER #75      04034B50 (67324752)\n-02AD10 Extract Zip Spec      14 (20) '2.0'\n-02AD11 Extract OS            00 (0) 'MS-DOS'\n-02AD12 General Purpose Flag  0000 (0)\n-02AD14 Compression Method    0000 (0) 'Stored'\n-02AD16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AD1A CRC                   00000000 (0)\n-02AD1E Compressed Size       00000000 (0)\n-02AD22 Uncompressed Size     00000000 (0)\n-02AD26 Filename Length       0032 (50)\n-02AD28 Extra Length          0009 (9)\n-02AD2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2AD2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02AD5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02AD5E   Length              0005 (5)\n-02AD60   Flags               01 (1) 'Modification'\n-02AD61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02AD65 LOCAL HEADER #76      04034B50 (67324752)\n-02AD69 Extract Zip Spec      14 (20) '2.0'\n-02AD6A Extract OS            00 (0) 'MS-DOS'\n-02AD6B General Purpose Flag  0000 (0)\n-02AD6D Compression Method    0000 (0) 'Stored'\n-02AD6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AD73 CRC                   00000000 (0)\n-02AD77 Compressed Size       00000000 (0)\n-02AD7B Uncompressed Size     00000000 (0)\n-02AD7F Filename Length       0079 (121)\n-02AD81 Extra Length          0009 (9)\n-02AD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2AD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02ADFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02ADFE   Length              0005 (5)\n-02AE00   Flags               01 (1) 'Modification'\n-02AE01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02AE05 LOCAL HEADER #77      04034B50 (67324752)\n-02AE09 Extract Zip Spec      14 (20) '2.0'\n-02AE0A Extract OS            00 (0) 'MS-DOS'\n-02AE0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02AE0D Compression Method    0000 (0) 'Stored'\n-02AE0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AE13 CRC                   00000000 (0)\n-02AE17 Compressed Size       00000000 (0)\n-02AE1B Uncompressed Size     00000000 (0)\n-02AE1F Filename Length       008F (143)\n-02AE21 Extra Length          0009 (9)\n-02AE23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02BE7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02BE7E   Length              0005 (5)\n+02BE80   Flags               01 (1) 'Modification'\n+02BE81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02BE85 PAYLOAD\n+\n+02C70D DATA DESCRIPTOR       08074B50 (134695760)\n+02C711 CRC                   2E17013D (773259581)\n+02C715 Compressed Size       00000888 (2184)\n+02C719 Uncompressed Size     00000888 (2184)\n+\n+02C71D LOCAL HEADER #66      04034B50 (67324752)\n+02C721 Extract Zip Spec      14 (20) '2.0'\n+02C722 Extract OS            00 (0) 'MS-DOS'\n+02C723 General Purpose Flag  0000 (0)\n+02C725 Compression Method    0000 (0) 'Stored'\n+02C727 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C72B CRC                   00000000 (0)\n+02C72F Compressed Size       00000000 (0)\n+02C733 Uncompressed Size     00000000 (0)\n+02C737 Filename Length       0022 (34)\n+02C739 Extra Length          0009 (9)\n+02C73B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C73B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C75D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C75F   Length              0005 (5)\n+02C761   Flags               01 (1) 'Modification'\n+02C762   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C766 LOCAL HEADER #67      04034B50 (67324752)\n+02C76A Extract Zip Spec      14 (20) '2.0'\n+02C76B Extract OS            00 (0) 'MS-DOS'\n+02C76C General Purpose Flag  0000 (0)\n+02C76E Compression Method    0000 (0) 'Stored'\n+02C770 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C774 CRC                   00000000 (0)\n+02C778 Compressed Size       00000000 (0)\n+02C77C Uncompressed Size     00000000 (0)\n+02C780 Filename Length       0029 (41)\n+02C782 Extra Length          0009 (9)\n+02C784 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C784: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C7AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C7AF   Length              0005 (5)\n+02C7B1   Flags               01 (1) 'Modification'\n+02C7B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C7B6 LOCAL HEADER #68      04034B50 (67324752)\n+02C7BA Extract Zip Spec      14 (20) '2.0'\n+02C7BB Extract OS            00 (0) 'MS-DOS'\n+02C7BC General Purpose Flag  0000 (0)\n+02C7BE Compression Method    0000 (0) 'Stored'\n+02C7C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C7C4 CRC                   00000000 (0)\n+02C7C8 Compressed Size       00000000 (0)\n+02C7CC Uncompressed Size     00000000 (0)\n+02C7D0 Filename Length       0055 (85)\n+02C7D2 Extra Length          0009 (9)\n+02C7D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C7D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C829 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C82B   Length              0005 (5)\n+02C82D   Flags               01 (1) 'Modification'\n+02C82E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C832 LOCAL HEADER #69      04034B50 (67324752)\n+02C836 Extract Zip Spec      14 (20) '2.0'\n+02C837 Extract OS            00 (0) 'MS-DOS'\n+02C838 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02C83A Compression Method    0000 (0) 'Stored'\n+02C83C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C840 CRC                   00000000 (0)\n+02C844 Compressed Size       00000000 (0)\n+02C848 Uncompressed Size     00000000 (0)\n+02C84C Filename Length       006B (107)\n+02C84E Extra Length          0009 (9)\n+02C850 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C850: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C8BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C8BD   Length              0005 (5)\n+02C8BF   Flags               01 (1) 'Modification'\n+02C8C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02C8C4 PAYLOAD\n+\n+02CFCF DATA DESCRIPTOR       08074B50 (134695760)\n+02CFD3 CRC                   C1E5A225 (3253051941)\n+02CFD7 Compressed Size       0000070B (1803)\n+02CFDB Uncompressed Size     0000070B (1803)\n+\n+02CFDF LOCAL HEADER #70      04034B50 (67324752)\n+02CFE3 Extract Zip Spec      14 (20) '2.0'\n+02CFE4 Extract OS            00 (0) 'MS-DOS'\n+02CFE5 General Purpose Flag  0000 (0)\n+02CFE7 Compression Method    0000 (0) 'Stored'\n+02CFE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CFED CRC                   00000000 (0)\n+02CFF1 Compressed Size       00000000 (0)\n+02CFF5 Uncompressed Size     00000000 (0)\n+02CFF9 Filename Length       0054 (84)\n+02CFFB Extra Length          0009 (9)\n+02CFFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CFFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D051 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D053   Length              0005 (5)\n+02D055   Flags               01 (1) 'Modification'\n+02D056   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D05A LOCAL HEADER #71      04034B50 (67324752)\n+02D05E Extract Zip Spec      14 (20) '2.0'\n+02D05F Extract OS            00 (0) 'MS-DOS'\n+02D060 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02D062 Compression Method    0000 (0) 'Stored'\n+02D064 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D068 CRC                   00000000 (0)\n+02D06C Compressed Size       00000000 (0)\n+02D070 Uncompressed Size     00000000 (0)\n+02D074 Filename Length       006A (106)\n+02D076 Extra Length          0009 (9)\n+02D078 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D078: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D0E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D0E4   Length              0005 (5)\n+02D0E6   Flags               01 (1) 'Modification'\n+02D0E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02D0EB PAYLOAD\n+\n+02D738 DATA DESCRIPTOR       08074B50 (134695760)\n+02D73C CRC                   8950733E (2303750974)\n+02D740 Compressed Size       0000064D (1613)\n+02D744 Uncompressed Size     0000064D (1613)\n+\n+02D748 LOCAL HEADER #72      04034B50 (67324752)\n+02D74C Extract Zip Spec      14 (20) '2.0'\n+02D74D Extract OS            00 (0) 'MS-DOS'\n+02D74E General Purpose Flag  0000 (0)\n+02D750 Compression Method    0000 (0) 'Stored'\n+02D752 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D756 CRC                   00000000 (0)\n+02D75A Compressed Size       00000000 (0)\n+02D75E Uncompressed Size     00000000 (0)\n+02D762 Filename Length       0053 (83)\n+02D764 Extra Length          0009 (9)\n+02D766 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D766: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D7B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D7BB   Length              0005 (5)\n+02D7BD   Flags               01 (1) 'Modification'\n+02D7BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D7C2 LOCAL HEADER #73      04034B50 (67324752)\n+02D7C6 Extract Zip Spec      14 (20) '2.0'\n+02D7C7 Extract OS            00 (0) 'MS-DOS'\n+02D7C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02D7CA Compression Method    0000 (0) 'Stored'\n+02D7CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D7D0 CRC                   00000000 (0)\n+02D7D4 Compressed Size       00000000 (0)\n+02D7D8 Uncompressed Size     00000000 (0)\n+02D7DC Filename Length       0069 (105)\n+02D7DE Extra Length          0009 (9)\n+02D7E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D7E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D849 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D84B   Length              0005 (5)\n+02D84D   Flags               01 (1) 'Modification'\n+02D84E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02D852 PAYLOAD\n+\n+02DE95 DATA DESCRIPTOR       08074B50 (134695760)\n+02DE99 CRC                   A0157ABE (2685762238)\n+02DE9D Compressed Size       00000643 (1603)\n+02DEA1 Uncompressed Size     00000643 (1603)\n+\n+02DEA5 LOCAL HEADER #74      04034B50 (67324752)\n+02DEA9 Extract Zip Spec      14 (20) '2.0'\n+02DEAA Extract OS            00 (0) 'MS-DOS'\n+02DEAB General Purpose Flag  0000 (0)\n+02DEAD Compression Method    0000 (0) 'Stored'\n+02DEAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02DEB3 CRC                   00000000 (0)\n+02DEB7 Compressed Size       00000000 (0)\n+02DEBB Uncompressed Size     00000000 (0)\n+02DEBF Filename Length       002B (43)\n+02DEC1 Extra Length          0009 (9)\n+02DEC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DEC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02DEEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02DEF0   Length              0005 (5)\n+02DEF2   Flags               01 (1) 'Modification'\n+02DEF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02DEF7 LOCAL HEADER #75      04034B50 (67324752)\n+02DEFB Extract Zip Spec      14 (20) '2.0'\n+02DEFC Extract OS            00 (0) 'MS-DOS'\n+02DEFD General Purpose Flag  0000 (0)\n+02DEFF Compression Method    0000 (0) 'Stored'\n+02DF01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02DF05 CRC                   00000000 (0)\n+02DF09 Compressed Size       00000000 (0)\n+02DF0D Uncompressed Size     00000000 (0)\n+02DF11 Filename Length       0032 (50)\n+02DF13 Extra Length          0009 (9)\n+02DF15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DF15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02DF47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02DF49   Length              0005 (5)\n+02DF4B   Flags               01 (1) 'Modification'\n+02DF4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02DF50 LOCAL HEADER #76      04034B50 (67324752)\n+02DF54 Extract Zip Spec      14 (20) '2.0'\n+02DF55 Extract OS            00 (0) 'MS-DOS'\n+02DF56 General Purpose Flag  0000 (0)\n+02DF58 Compression Method    0000 (0) 'Stored'\n+02DF5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02DF5E CRC                   00000000 (0)\n+02DF62 Compressed Size       00000000 (0)\n+02DF66 Uncompressed Size     00000000 (0)\n+02DF6A Filename Length       0079 (121)\n+02DF6C Extra Length          0009 (9)\n+02DF6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DF6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02DFE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02DFE9   Length              0005 (5)\n+02DFEB   Flags               01 (1) 'Modification'\n+02DFEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02DFF0 LOCAL HEADER #77      04034B50 (67324752)\n+02DFF4 Extract Zip Spec      14 (20) '2.0'\n+02DFF5 Extract OS            00 (0) 'MS-DOS'\n+02DFF6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02DFF8 Compression Method    0000 (0) 'Stored'\n+02DFFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02DFFE CRC                   00000000 (0)\n+02E002 Compressed Size       00000000 (0)\n+02E006 Uncompressed Size     00000000 (0)\n+02E00A Filename Length       008F (143)\n+02E00C Extra Length          0009 (9)\n+02E00E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AE23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E00E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02AEB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02AEB4   Length              0005 (5)\n-02AEB6   Flags               01 (1) 'Modification'\n-02AEB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02AEBB PAYLOAD\n-\n-02B9D0 DATA DESCRIPTOR       08074B50 (134695760)\n-02B9D4 CRC                   164EC61D (374261277)\n-02B9D8 Compressed Size       00000B15 (2837)\n-02B9DC Uncompressed Size     00000B15 (2837)\n-\n-02B9E0 LOCAL HEADER #78      04034B50 (67324752)\n-02B9E4 Extract Zip Spec      14 (20) '2.0'\n-02B9E5 Extract OS            00 (0) 'MS-DOS'\n-02B9E6 General Purpose Flag  0000 (0)\n-02B9E8 Compression Method    0000 (0) 'Stored'\n-02B9EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B9EE CRC                   00000000 (0)\n-02B9F2 Compressed Size       00000000 (0)\n-02B9F6 Uncompressed Size     00000000 (0)\n-02B9FA Filename Length       0023 (35)\n-02B9FC Extra Length          0009 (9)\n-02B9FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B9FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BA21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BA23   Length              0005 (5)\n-02BA25   Flags               01 (1) 'Modification'\n-02BA26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02BA2A LOCAL HEADER #79      04034B50 (67324752)\n-02BA2E Extract Zip Spec      14 (20) '2.0'\n-02BA2F Extract OS            00 (0) 'MS-DOS'\n-02BA30 General Purpose Flag  0000 (0)\n-02BA32 Compression Method    0000 (0) 'Stored'\n-02BA34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BA38 CRC                   00000000 (0)\n-02BA3C Compressed Size       00000000 (0)\n-02BA40 Uncompressed Size     00000000 (0)\n-02BA44 Filename Length       002A (42)\n-02BA46 Extra Length          0009 (9)\n-02BA48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BA48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BA72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BA74   Length              0005 (5)\n-02BA76   Flags               01 (1) 'Modification'\n-02BA77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02BA7B LOCAL HEADER #80      04034B50 (67324752)\n-02BA7F Extract Zip Spec      14 (20) '2.0'\n-02BA80 Extract OS            00 (0) 'MS-DOS'\n-02BA81 General Purpose Flag  0000 (0)\n-02BA83 Compression Method    0000 (0) 'Stored'\n-02BA85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BA89 CRC                   00000000 (0)\n-02BA8D Compressed Size       00000000 (0)\n-02BA91 Uncompressed Size     00000000 (0)\n-02BA95 Filename Length       0060 (96)\n-02BA97 Extra Length          0009 (9)\n-02BA99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BA99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BAF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BAFB   Length              0005 (5)\n-02BAFD   Flags               01 (1) 'Modification'\n-02BAFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02BB02 LOCAL HEADER #81      04034B50 (67324752)\n-02BB06 Extract Zip Spec      14 (20) '2.0'\n-02BB07 Extract OS            00 (0) 'MS-DOS'\n-02BB08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02BB0A Compression Method    0000 (0) 'Stored'\n-02BB0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BB10 CRC                   00000000 (0)\n-02BB14 Compressed Size       00000000 (0)\n-02BB18 Uncompressed Size     00000000 (0)\n-02BB1C Filename Length       0076 (118)\n-02BB1E Extra Length          0009 (9)\n-02BB20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BB20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BB96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BB98   Length              0005 (5)\n-02BB9A   Flags               01 (1) 'Modification'\n-02BB9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02BB9F PAYLOAD\n-\n-02C81E DATA DESCRIPTOR       08074B50 (134695760)\n-02C822 CRC                   A42AA4FE (2754258174)\n-02C826 Compressed Size       00000C7F (3199)\n-02C82A Uncompressed Size     00000C7F (3199)\n-\n-02C82E LOCAL HEADER #82      04034B50 (67324752)\n-02C832 Extract Zip Spec      14 (20) '2.0'\n-02C833 Extract OS            00 (0) 'MS-DOS'\n-02C834 General Purpose Flag  0000 (0)\n-02C836 Compression Method    0000 (0) 'Stored'\n-02C838 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C83C CRC                   00000000 (0)\n-02C840 Compressed Size       00000000 (0)\n-02C844 Uncompressed Size     00000000 (0)\n-02C848 Filename Length       0025 (37)\n-02C84A Extra Length          0009 (9)\n-02C84C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C84C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C871 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C873   Length              0005 (5)\n-02C875   Flags               01 (1) 'Modification'\n-02C876   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C87A LOCAL HEADER #83      04034B50 (67324752)\n-02C87E Extract Zip Spec      14 (20) '2.0'\n-02C87F Extract OS            00 (0) 'MS-DOS'\n-02C880 General Purpose Flag  0000 (0)\n-02C882 Compression Method    0000 (0) 'Stored'\n-02C884 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C888 CRC                   00000000 (0)\n-02C88C Compressed Size       00000000 (0)\n-02C890 Uncompressed Size     00000000 (0)\n-02C894 Filename Length       002C (44)\n-02C896 Extra Length          0009 (9)\n-02C898 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C898: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C8C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C8C6   Length              0005 (5)\n-02C8C8   Flags               01 (1) 'Modification'\n-02C8C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C8CD LOCAL HEADER #84      04034B50 (67324752)\n-02C8D1 Extract Zip Spec      14 (20) '2.0'\n-02C8D2 Extract OS            00 (0) 'MS-DOS'\n-02C8D3 General Purpose Flag  0000 (0)\n-02C8D5 Compression Method    0000 (0) 'Stored'\n-02C8D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C8DB CRC                   00000000 (0)\n-02C8DF Compressed Size       00000000 (0)\n-02C8E3 Uncompressed Size     00000000 (0)\n-02C8E7 Filename Length       005D (93)\n-02C8E9 Extra Length          0009 (9)\n-02C8EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C8EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C948 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C94A   Length              0005 (5)\n-02C94C   Flags               01 (1) 'Modification'\n-02C94D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C951 LOCAL HEADER #85      04034B50 (67324752)\n-02C955 Extract Zip Spec      14 (20) '2.0'\n-02C956 Extract OS            00 (0) 'MS-DOS'\n-02C957 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02C959 Compression Method    0000 (0) 'Stored'\n-02C95B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C95F CRC                   00000000 (0)\n-02C963 Compressed Size       00000000 (0)\n-02C967 Uncompressed Size     00000000 (0)\n-02C96B Filename Length       0073 (115)\n-02C96D Extra Length          0009 (9)\n-02C96F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C96F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C9E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C9E4   Length              0005 (5)\n-02C9E6   Flags               01 (1) 'Modification'\n-02C9E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02C9EB PAYLOAD\n-\n-02D39A DATA DESCRIPTOR       08074B50 (134695760)\n-02D39E CRC                   4F9A1C4F (1335499855)\n-02D3A2 Compressed Size       000009AF (2479)\n-02D3A6 Uncompressed Size     000009AF (2479)\n-\n-02D3AA LOCAL HEADER #86      04034B50 (67324752)\n-02D3AE Extract Zip Spec      14 (20) '2.0'\n-02D3AF Extract OS            00 (0) 'MS-DOS'\n-02D3B0 General Purpose Flag  0000 (0)\n-02D3B2 Compression Method    0000 (0) 'Stored'\n-02D3B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D3B8 CRC                   00000000 (0)\n-02D3BC Compressed Size       00000000 (0)\n-02D3C0 Uncompressed Size     00000000 (0)\n-02D3C4 Filename Length       006A (106)\n-02D3C6 Extra Length          0009 (9)\n-02D3C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D3C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D432 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D434   Length              0005 (5)\n-02D436   Flags               01 (1) 'Modification'\n-02D437   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02D43B LOCAL HEADER #87      04034B50 (67324752)\n-02D43F Extract Zip Spec      14 (20) '2.0'\n-02D440 Extract OS            00 (0) 'MS-DOS'\n-02D441 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02D443 Compression Method    0000 (0) 'Stored'\n-02D445 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D449 CRC                   00000000 (0)\n-02D44D Compressed Size       00000000 (0)\n-02D451 Uncompressed Size     00000000 (0)\n-02D455 Filename Length       0080 (128)\n-02D457 Extra Length          0009 (9)\n-02D459 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D459: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D4D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D4DB   Length              0005 (5)\n-02D4DD   Flags               01 (1) 'Modification'\n-02D4DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02D4E2 PAYLOAD\n-\n-02E747 DATA DESCRIPTOR       08074B50 (134695760)\n-02E74B CRC                   754F4527 (1968129319)\n-02E74F Compressed Size       00001265 (4709)\n-02E753 Uncompressed Size     00001265 (4709)\n-\n-02E757 LOCAL HEADER #88      04034B50 (67324752)\n-02E75B Extract Zip Spec      14 (20) '2.0'\n-02E75C Extract OS            00 (0) 'MS-DOS'\n-02E75D General Purpose Flag  0000 (0)\n-02E75F Compression Method    0000 (0) 'Stored'\n-02E761 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E765 CRC                   00000000 (0)\n-02E769 Compressed Size       00000000 (0)\n-02E76D Uncompressed Size     00000000 (0)\n-02E771 Filename Length       0028 (40)\n-02E773 Extra Length          0009 (9)\n-02E775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E79D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E79F   Length              0005 (5)\n-02E7A1   Flags               01 (1) 'Modification'\n-02E7A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E7A6 LOCAL HEADER #89      04034B50 (67324752)\n-02E7AA Extract Zip Spec      14 (20) '2.0'\n-02E7AB Extract OS            00 (0) 'MS-DOS'\n-02E7AC General Purpose Flag  0000 (0)\n-02E7AE Compression Method    0000 (0) 'Stored'\n-02E7B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E7B4 CRC                   00000000 (0)\n-02E7B8 Compressed Size       00000000 (0)\n-02E7BC Uncompressed Size     00000000 (0)\n-02E7C0 Filename Length       002F (47)\n-02E7C2 Extra Length          0009 (9)\n-02E7C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E7C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E7F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E7F5   Length              0005 (5)\n-02E7F7   Flags               01 (1) 'Modification'\n-02E7F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E7FC LOCAL HEADER #90      04034B50 (67324752)\n-02E800 Extract Zip Spec      14 (20) '2.0'\n-02E801 Extract OS            00 (0) 'MS-DOS'\n-02E802 General Purpose Flag  0000 (0)\n-02E804 Compression Method    0000 (0) 'Stored'\n-02E806 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E80A CRC                   00000000 (0)\n-02E80E Compressed Size       00000000 (0)\n-02E812 Uncompressed Size     00000000 (0)\n-02E816 Filename Length       0061 (97)\n-02E818 Extra Length          0009 (9)\n-02E81A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E81A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E87B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E87D   Length              0005 (5)\n-02E87F   Flags               01 (1) 'Modification'\n-02E880   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E884 LOCAL HEADER #91      04034B50 (67324752)\n-02E888 Extract Zip Spec      14 (20) '2.0'\n-02E889 Extract OS            00 (0) 'MS-DOS'\n-02E88A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02E88C Compression Method    0000 (0) 'Stored'\n-02E88E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E892 CRC                   00000000 (0)\n-02E896 Compressed Size       00000000 (0)\n-02E89A Uncompressed Size     00000000 (0)\n-02E89E Filename Length       0077 (119)\n-02E8A0 Extra Length          0009 (9)\n-02E8A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E8A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E919 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E91B   Length              0005 (5)\n-02E91D   Flags               01 (1) 'Modification'\n-02E91E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02E922 PAYLOAD\n-\n-02F121 DATA DESCRIPTOR       08074B50 (134695760)\n-02F125 CRC                   FE6DB49E (4268602526)\n-02F129 Compressed Size       000007FF (2047)\n-02F12D Uncompressed Size     000007FF (2047)\n-\n-02F131 LOCAL HEADER #92      04034B50 (67324752)\n-02F135 Extract Zip Spec      14 (20) '2.0'\n-02F136 Extract OS            00 (0) 'MS-DOS'\n-02F137 General Purpose Flag  0000 (0)\n-02F139 Compression Method    0000 (0) 'Stored'\n-02F13B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F13F CRC                   00000000 (0)\n-02F143 Compressed Size       00000000 (0)\n-02F147 Uncompressed Size     00000000 (0)\n-02F14B Filename Length       0026 (38)\n-02F14D Extra Length          0009 (9)\n-02F14F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F14F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F175 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F177   Length              0005 (5)\n-02F179   Flags               01 (1) 'Modification'\n-02F17A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F17E LOCAL HEADER #93      04034B50 (67324752)\n-02F182 Extract Zip Spec      14 (20) '2.0'\n-02F183 Extract OS            00 (0) 'MS-DOS'\n-02F184 General Purpose Flag  0000 (0)\n-02F186 Compression Method    0000 (0) 'Stored'\n-02F188 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F18C CRC                   00000000 (0)\n-02F190 Compressed Size       00000000 (0)\n-02F194 Uncompressed Size     00000000 (0)\n-02F198 Filename Length       002D (45)\n-02F19A Extra Length          0009 (9)\n-02F19C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F19C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F1C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F1CB   Length              0005 (5)\n-02F1CD   Flags               01 (1) 'Modification'\n-02F1CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F1D2 LOCAL HEADER #94      04034B50 (67324752)\n-02F1D6 Extract Zip Spec      14 (20) '2.0'\n-02F1D7 Extract OS            00 (0) 'MS-DOS'\n-02F1D8 General Purpose Flag  0000 (0)\n-02F1DA Compression Method    0000 (0) 'Stored'\n-02F1DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F1E0 CRC                   00000000 (0)\n-02F1E4 Compressed Size       00000000 (0)\n-02F1E8 Uncompressed Size     00000000 (0)\n-02F1EC Filename Length       0064 (100)\n-02F1EE Extra Length          0009 (9)\n-02F1F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F1F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F254 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F256   Length              0005 (5)\n-02F258   Flags               01 (1) 'Modification'\n-02F259   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F25D LOCAL HEADER #95      04034B50 (67324752)\n-02F261 Extract Zip Spec      14 (20) '2.0'\n-02F262 Extract OS            00 (0) 'MS-DOS'\n-02F263 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02F265 Compression Method    0000 (0) 'Stored'\n-02F267 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F26B CRC                   00000000 (0)\n-02F26F Compressed Size       00000000 (0)\n-02F273 Uncompressed Size     00000000 (0)\n-02F277 Filename Length       007A (122)\n-02F279 Extra Length          0009 (9)\n-02F27B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F27B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F2F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F2F7   Length              0005 (5)\n-02F2F9   Flags               01 (1) 'Modification'\n-02F2FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02F2FE PAYLOAD\n-\n-02FB66 DATA DESCRIPTOR       08074B50 (134695760)\n-02FB6A CRC                   FFF8AD9F (4294487455)\n-02FB6E Compressed Size       00000868 (2152)\n-02FB72 Uncompressed Size     00000868 (2152)\n-\n-02FB76 LOCAL HEADER #96      04034B50 (67324752)\n-02FB7A Extract Zip Spec      14 (20) '2.0'\n-02FB7B Extract OS            00 (0) 'MS-DOS'\n-02FB7C General Purpose Flag  0000 (0)\n-02FB7E Compression Method    0000 (0) 'Stored'\n-02FB80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02FB84 CRC                   00000000 (0)\n-02FB88 Compressed Size       00000000 (0)\n-02FB8C Uncompressed Size     00000000 (0)\n-02FB90 Filename Length       002F (47)\n-02FB92 Extra Length          0009 (9)\n-02FB94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2FB94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02FBC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02FBC5   Length              0005 (5)\n-02FBC7   Flags               01 (1) 'Modification'\n-02FBC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02FBCC LOCAL HEADER #97      04034B50 (67324752)\n-02FBD0 Extract Zip Spec      14 (20) '2.0'\n-02FBD1 Extract OS            00 (0) 'MS-DOS'\n-02FBD2 General Purpose Flag  0000 (0)\n-02FBD4 Compression Method    0000 (0) 'Stored'\n-02FBD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02FBDA CRC                   00000000 (0)\n-02FBDE Compressed Size       00000000 (0)\n-02FBE2 Uncompressed Size     00000000 (0)\n-02FBE6 Filename Length       0036 (54)\n-02FBE8 Extra Length          0009 (9)\n-02FBEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2FBEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02FC20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02FC22   Length              0005 (5)\n-02FC24   Flags               01 (1) 'Modification'\n-02FC25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02FC29 LOCAL HEADER #98      04034B50 (67324752)\n-02FC2D Extract Zip Spec      14 (20) '2.0'\n-02FC2E Extract OS            00 (0) 'MS-DOS'\n-02FC2F General Purpose Flag  0000 (0)\n-02FC31 Compression Method    0000 (0) 'Stored'\n-02FC33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02FC37 CRC                   00000000 (0)\n-02FC3B Compressed Size       00000000 (0)\n-02FC3F Uncompressed Size     00000000 (0)\n-02FC43 Filename Length       0078 (120)\n-02FC45 Extra Length          0009 (9)\n-02FC47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2FC47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02FCBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02FCC1   Length              0005 (5)\n-02FCC3   Flags               01 (1) 'Modification'\n-02FCC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02FCC8 LOCAL HEADER #99      04034B50 (67324752)\n-02FCCC Extract Zip Spec      14 (20) '2.0'\n-02FCCD Extract OS            00 (0) 'MS-DOS'\n-02FCCE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02FCD0 Compression Method    0000 (0) 'Stored'\n-02FCD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02FCD6 CRC                   00000000 (0)\n-02FCDA Compressed Size       00000000 (0)\n-02FCDE Uncompressed Size     00000000 (0)\n-02FCE2 Filename Length       008E (142)\n-02FCE4 Extra Length          0009 (9)\n-02FCE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02E09D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E09F   Length              0005 (5)\n+02E0A1   Flags               01 (1) 'Modification'\n+02E0A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E0A6 PAYLOAD\n+\n+02EBBB DATA DESCRIPTOR       08074B50 (134695760)\n+02EBBF CRC                   164EC61D (374261277)\n+02EBC3 Compressed Size       00000B15 (2837)\n+02EBC7 Uncompressed Size     00000B15 (2837)\n+\n+02EBCB LOCAL HEADER #78      04034B50 (67324752)\n+02EBCF Extract Zip Spec      14 (20) '2.0'\n+02EBD0 Extract OS            00 (0) 'MS-DOS'\n+02EBD1 General Purpose Flag  0000 (0)\n+02EBD3 Compression Method    0000 (0) 'Stored'\n+02EBD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02EBD9 CRC                   00000000 (0)\n+02EBDD Compressed Size       00000000 (0)\n+02EBE1 Uncompressed Size     00000000 (0)\n+02EBE5 Filename Length       0023 (35)\n+02EBE7 Extra Length          0009 (9)\n+02EBE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EBE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02EC0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02EC0E   Length              0005 (5)\n+02EC10   Flags               01 (1) 'Modification'\n+02EC11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02EC15 LOCAL HEADER #79      04034B50 (67324752)\n+02EC19 Extract Zip Spec      14 (20) '2.0'\n+02EC1A Extract OS            00 (0) 'MS-DOS'\n+02EC1B General Purpose Flag  0000 (0)\n+02EC1D Compression Method    0000 (0) 'Stored'\n+02EC1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02EC23 CRC                   00000000 (0)\n+02EC27 Compressed Size       00000000 (0)\n+02EC2B Uncompressed Size     00000000 (0)\n+02EC2F Filename Length       002A (42)\n+02EC31 Extra Length          0009 (9)\n+02EC33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EC33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02EC5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02EC5F   Length              0005 (5)\n+02EC61   Flags               01 (1) 'Modification'\n+02EC62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02EC66 LOCAL HEADER #80      04034B50 (67324752)\n+02EC6A Extract Zip Spec      14 (20) '2.0'\n+02EC6B Extract OS            00 (0) 'MS-DOS'\n+02EC6C General Purpose Flag  0000 (0)\n+02EC6E Compression Method    0000 (0) 'Stored'\n+02EC70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02EC74 CRC                   00000000 (0)\n+02EC78 Compressed Size       00000000 (0)\n+02EC7C Uncompressed Size     00000000 (0)\n+02EC80 Filename Length       0060 (96)\n+02EC82 Extra Length          0009 (9)\n+02EC84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EC84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02ECE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02ECE6   Length              0005 (5)\n+02ECE8   Flags               01 (1) 'Modification'\n+02ECE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02ECED LOCAL HEADER #81      04034B50 (67324752)\n+02ECF1 Extract Zip Spec      14 (20) '2.0'\n+02ECF2 Extract OS            00 (0) 'MS-DOS'\n+02ECF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02ECF5 Compression Method    0000 (0) 'Stored'\n+02ECF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02ECFB CRC                   00000000 (0)\n+02ECFF Compressed Size       00000000 (0)\n+02ED03 Uncompressed Size     00000000 (0)\n+02ED07 Filename Length       0076 (118)\n+02ED09 Extra Length          0009 (9)\n+02ED0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2ED0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02ED81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02ED83   Length              0005 (5)\n+02ED85   Flags               01 (1) 'Modification'\n+02ED86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02ED8A PAYLOAD\n+\n+02FA09 DATA DESCRIPTOR       08074B50 (134695760)\n+02FA0D CRC                   A42AA4FE (2754258174)\n+02FA11 Compressed Size       00000C7F (3199)\n+02FA15 Uncompressed Size     00000C7F (3199)\n+\n+02FA19 LOCAL HEADER #82      04034B50 (67324752)\n+02FA1D Extract Zip Spec      14 (20) '2.0'\n+02FA1E Extract OS            00 (0) 'MS-DOS'\n+02FA1F General Purpose Flag  0000 (0)\n+02FA21 Compression Method    0000 (0) 'Stored'\n+02FA23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02FA27 CRC                   00000000 (0)\n+02FA2B Compressed Size       00000000 (0)\n+02FA2F Uncompressed Size     00000000 (0)\n+02FA33 Filename Length       0025 (37)\n+02FA35 Extra Length          0009 (9)\n+02FA37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FA37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02FA5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02FA5E   Length              0005 (5)\n+02FA60   Flags               01 (1) 'Modification'\n+02FA61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02FA65 LOCAL HEADER #83      04034B50 (67324752)\n+02FA69 Extract Zip Spec      14 (20) '2.0'\n+02FA6A Extract OS            00 (0) 'MS-DOS'\n+02FA6B General Purpose Flag  0000 (0)\n+02FA6D Compression Method    0000 (0) 'Stored'\n+02FA6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02FA73 CRC                   00000000 (0)\n+02FA77 Compressed Size       00000000 (0)\n+02FA7B Uncompressed Size     00000000 (0)\n+02FA7F Filename Length       002C (44)\n+02FA81 Extra Length          0009 (9)\n+02FA83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FA83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02FAAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02FAB1   Length              0005 (5)\n+02FAB3   Flags               01 (1) 'Modification'\n+02FAB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02FAB8 LOCAL HEADER #84      04034B50 (67324752)\n+02FABC Extract Zip Spec      14 (20) '2.0'\n+02FABD Extract OS            00 (0) 'MS-DOS'\n+02FABE General Purpose Flag  0000 (0)\n+02FAC0 Compression Method    0000 (0) 'Stored'\n+02FAC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02FAC6 CRC                   00000000 (0)\n+02FACA Compressed Size       00000000 (0)\n+02FACE Uncompressed Size     00000000 (0)\n+02FAD2 Filename Length       005D (93)\n+02FAD4 Extra Length          0009 (9)\n+02FAD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FAD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02FB33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02FB35   Length              0005 (5)\n+02FB37   Flags               01 (1) 'Modification'\n+02FB38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02FB3C LOCAL HEADER #85      04034B50 (67324752)\n+02FB40 Extract Zip Spec      14 (20) '2.0'\n+02FB41 Extract OS            00 (0) 'MS-DOS'\n+02FB42 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02FB44 Compression Method    0000 (0) 'Stored'\n+02FB46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02FB4A CRC                   00000000 (0)\n+02FB4E Compressed Size       00000000 (0)\n+02FB52 Uncompressed Size     00000000 (0)\n+02FB56 Filename Length       0073 (115)\n+02FB58 Extra Length          0009 (9)\n+02FB5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FB5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02FBCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02FBCF   Length              0005 (5)\n+02FBD1   Flags               01 (1) 'Modification'\n+02FBD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02FBD6 PAYLOAD\n+\n+030585 DATA DESCRIPTOR       08074B50 (134695760)\n+030589 CRC                   4F9A1C4F (1335499855)\n+03058D Compressed Size       000009AF (2479)\n+030591 Uncompressed Size     000009AF (2479)\n+\n+030595 LOCAL HEADER #86      04034B50 (67324752)\n+030599 Extract Zip Spec      14 (20) '2.0'\n+03059A Extract OS            00 (0) 'MS-DOS'\n+03059B General Purpose Flag  0000 (0)\n+03059D Compression Method    0000 (0) 'Stored'\n+03059F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0305A3 CRC                   00000000 (0)\n+0305A7 Compressed Size       00000000 (0)\n+0305AB Uncompressed Size     00000000 (0)\n+0305AF Filename Length       006A (106)\n+0305B1 Extra Length          0009 (9)\n+0305B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x305B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03061D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03061F   Length              0005 (5)\n+030621   Flags               01 (1) 'Modification'\n+030622   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+030626 LOCAL HEADER #87      04034B50 (67324752)\n+03062A Extract Zip Spec      14 (20) '2.0'\n+03062B Extract OS            00 (0) 'MS-DOS'\n+03062C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03062E Compression Method    0000 (0) 'Stored'\n+030630 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030634 CRC                   00000000 (0)\n+030638 Compressed Size       00000000 (0)\n+03063C Uncompressed Size     00000000 (0)\n+030640 Filename Length       0080 (128)\n+030642 Extra Length          0009 (9)\n+030644 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30644: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0306C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0306C6   Length              0005 (5)\n+0306C8   Flags               01 (1) 'Modification'\n+0306C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0306CD PAYLOAD\n+\n+031932 DATA DESCRIPTOR       08074B50 (134695760)\n+031936 CRC                   754F4527 (1968129319)\n+03193A Compressed Size       00001265 (4709)\n+03193E Uncompressed Size     00001265 (4709)\n+\n+031942 LOCAL HEADER #88      04034B50 (67324752)\n+031946 Extract Zip Spec      14 (20) '2.0'\n+031947 Extract OS            00 (0) 'MS-DOS'\n+031948 General Purpose Flag  0000 (0)\n+03194A Compression Method    0000 (0) 'Stored'\n+03194C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031950 CRC                   00000000 (0)\n+031954 Compressed Size       00000000 (0)\n+031958 Uncompressed Size     00000000 (0)\n+03195C Filename Length       0028 (40)\n+03195E Extra Length          0009 (9)\n+031960 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31960: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+031988 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03198A   Length              0005 (5)\n+03198C   Flags               01 (1) 'Modification'\n+03198D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031991 LOCAL HEADER #89      04034B50 (67324752)\n+031995 Extract Zip Spec      14 (20) '2.0'\n+031996 Extract OS            00 (0) 'MS-DOS'\n+031997 General Purpose Flag  0000 (0)\n+031999 Compression Method    0000 (0) 'Stored'\n+03199B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03199F CRC                   00000000 (0)\n+0319A3 Compressed Size       00000000 (0)\n+0319A7 Uncompressed Size     00000000 (0)\n+0319AB Filename Length       002F (47)\n+0319AD Extra Length          0009 (9)\n+0319AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x319AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0319DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0319E0   Length              0005 (5)\n+0319E2   Flags               01 (1) 'Modification'\n+0319E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0319E7 LOCAL HEADER #90      04034B50 (67324752)\n+0319EB Extract Zip Spec      14 (20) '2.0'\n+0319EC Extract OS            00 (0) 'MS-DOS'\n+0319ED General Purpose Flag  0000 (0)\n+0319EF Compression Method    0000 (0) 'Stored'\n+0319F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0319F5 CRC                   00000000 (0)\n+0319F9 Compressed Size       00000000 (0)\n+0319FD Uncompressed Size     00000000 (0)\n+031A01 Filename Length       0061 (97)\n+031A03 Extra Length          0009 (9)\n+031A05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31A05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+031A66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+031A68   Length              0005 (5)\n+031A6A   Flags               01 (1) 'Modification'\n+031A6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031A6F LOCAL HEADER #91      04034B50 (67324752)\n+031A73 Extract Zip Spec      14 (20) '2.0'\n+031A74 Extract OS            00 (0) 'MS-DOS'\n+031A75 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+031A77 Compression Method    0000 (0) 'Stored'\n+031A79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031A7D CRC                   00000000 (0)\n+031A81 Compressed Size       00000000 (0)\n+031A85 Uncompressed Size     00000000 (0)\n+031A89 Filename Length       0077 (119)\n+031A8B Extra Length          0009 (9)\n+031A8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31A8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+031B04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+031B06   Length              0005 (5)\n+031B08   Flags               01 (1) 'Modification'\n+031B09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+031B0D PAYLOAD\n+\n+03230C DATA DESCRIPTOR       08074B50 (134695760)\n+032310 CRC                   FE6DB49E (4268602526)\n+032314 Compressed Size       000007FF (2047)\n+032318 Uncompressed Size     000007FF (2047)\n+\n+03231C LOCAL HEADER #92      04034B50 (67324752)\n+032320 Extract Zip Spec      14 (20) '2.0'\n+032321 Extract OS            00 (0) 'MS-DOS'\n+032322 General Purpose Flag  0000 (0)\n+032324 Compression Method    0000 (0) 'Stored'\n+032326 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03232A CRC                   00000000 (0)\n+03232E Compressed Size       00000000 (0)\n+032332 Uncompressed Size     00000000 (0)\n+032336 Filename Length       0026 (38)\n+032338 Extra Length          0009 (9)\n+03233A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3233A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032360 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032362   Length              0005 (5)\n+032364   Flags               01 (1) 'Modification'\n+032365   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032369 LOCAL HEADER #93      04034B50 (67324752)\n+03236D Extract Zip Spec      14 (20) '2.0'\n+03236E Extract OS            00 (0) 'MS-DOS'\n+03236F General Purpose Flag  0000 (0)\n+032371 Compression Method    0000 (0) 'Stored'\n+032373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032377 CRC                   00000000 (0)\n+03237B Compressed Size       00000000 (0)\n+03237F Uncompressed Size     00000000 (0)\n+032383 Filename Length       002D (45)\n+032385 Extra Length          0009 (9)\n+032387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0323B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0323B6   Length              0005 (5)\n+0323B8   Flags               01 (1) 'Modification'\n+0323B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0323BD LOCAL HEADER #94      04034B50 (67324752)\n+0323C1 Extract Zip Spec      14 (20) '2.0'\n+0323C2 Extract OS            00 (0) 'MS-DOS'\n+0323C3 General Purpose Flag  0000 (0)\n+0323C5 Compression Method    0000 (0) 'Stored'\n+0323C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0323CB CRC                   00000000 (0)\n+0323CF Compressed Size       00000000 (0)\n+0323D3 Uncompressed Size     00000000 (0)\n+0323D7 Filename Length       0064 (100)\n+0323D9 Extra Length          0009 (9)\n+0323DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x323DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03243F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032441   Length              0005 (5)\n+032443   Flags               01 (1) 'Modification'\n+032444   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032448 LOCAL HEADER #95      04034B50 (67324752)\n+03244C Extract Zip Spec      14 (20) '2.0'\n+03244D Extract OS            00 (0) 'MS-DOS'\n+03244E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+032450 Compression Method    0000 (0) 'Stored'\n+032452 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032456 CRC                   00000000 (0)\n+03245A Compressed Size       00000000 (0)\n+03245E Uncompressed Size     00000000 (0)\n+032462 Filename Length       007A (122)\n+032464 Extra Length          0009 (9)\n+032466 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32466: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0324E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0324E2   Length              0005 (5)\n+0324E4   Flags               01 (1) 'Modification'\n+0324E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0324E9 PAYLOAD\n+\n+032D51 DATA DESCRIPTOR       08074B50 (134695760)\n+032D55 CRC                   FFF8AD9F (4294487455)\n+032D59 Compressed Size       00000868 (2152)\n+032D5D Uncompressed Size     00000868 (2152)\n+\n+032D61 LOCAL HEADER #96      04034B50 (67324752)\n+032D65 Extract Zip Spec      14 (20) '2.0'\n+032D66 Extract OS            00 (0) 'MS-DOS'\n+032D67 General Purpose Flag  0000 (0)\n+032D69 Compression Method    0000 (0) 'Stored'\n+032D6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032D6F CRC                   00000000 (0)\n+032D73 Compressed Size       00000000 (0)\n+032D77 Uncompressed Size     00000000 (0)\n+032D7B Filename Length       002F (47)\n+032D7D Extra Length          0009 (9)\n+032D7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32D7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032DAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032DB0   Length              0005 (5)\n+032DB2   Flags               01 (1) 'Modification'\n+032DB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032DB7 LOCAL HEADER #97      04034B50 (67324752)\n+032DBB Extract Zip Spec      14 (20) '2.0'\n+032DBC Extract OS            00 (0) 'MS-DOS'\n+032DBD General Purpose Flag  0000 (0)\n+032DBF Compression Method    0000 (0) 'Stored'\n+032DC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032DC5 CRC                   00000000 (0)\n+032DC9 Compressed Size       00000000 (0)\n+032DCD Uncompressed Size     00000000 (0)\n+032DD1 Filename Length       0036 (54)\n+032DD3 Extra Length          0009 (9)\n+032DD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32DD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032E0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032E0D   Length              0005 (5)\n+032E0F   Flags               01 (1) 'Modification'\n+032E10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032E14 LOCAL HEADER #98      04034B50 (67324752)\n+032E18 Extract Zip Spec      14 (20) '2.0'\n+032E19 Extract OS            00 (0) 'MS-DOS'\n+032E1A General Purpose Flag  0000 (0)\n+032E1C Compression Method    0000 (0) 'Stored'\n+032E1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032E22 CRC                   00000000 (0)\n+032E26 Compressed Size       00000000 (0)\n+032E2A Uncompressed Size     00000000 (0)\n+032E2E Filename Length       0078 (120)\n+032E30 Extra Length          0009 (9)\n+032E32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32E32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032EAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032EAC   Length              0005 (5)\n+032EAE   Flags               01 (1) 'Modification'\n+032EAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032EB3 LOCAL HEADER #99      04034B50 (67324752)\n+032EB7 Extract Zip Spec      14 (20) '2.0'\n+032EB8 Extract OS            00 (0) 'MS-DOS'\n+032EB9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+032EBB Compression Method    0000 (0) 'Stored'\n+032EBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032EC1 CRC                   00000000 (0)\n+032EC5 Compressed Size       00000000 (0)\n+032EC9 Uncompressed Size     00000000 (0)\n+032ECD Filename Length       008E (142)\n+032ECF Extra Length          0009 (9)\n+032ED1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x2FCE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x32ED1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02FD74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02FD76   Length              0005 (5)\n-02FD78   Flags               01 (1) 'Modification'\n-02FD79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02FD7D PAYLOAD\n-\n-0310A4 DATA DESCRIPTOR       08074B50 (134695760)\n-0310A8 CRC                   896578EC (2305128684)\n-0310AC Compressed Size       00001327 (4903)\n-0310B0 Uncompressed Size     00001327 (4903)\n-\n-0310B4 LOCAL HEADER #100     04034B50 (67324752)\n-0310B8 Extract Zip Spec      14 (20) '2.0'\n-0310B9 Extract OS            00 (0) 'MS-DOS'\n-0310BA General Purpose Flag  0000 (0)\n-0310BC Compression Method    0000 (0) 'Stored'\n-0310BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0310C2 CRC                   00000000 (0)\n-0310C6 Compressed Size       00000000 (0)\n-0310CA Uncompressed Size     00000000 (0)\n-0310CE Filename Length       003B (59)\n-0310D0 Extra Length          0009 (9)\n-0310D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x310D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03110D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03110F   Length              0005 (5)\n-031111   Flags               01 (1) 'Modification'\n-031112   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031116 LOCAL HEADER #101     04034B50 (67324752)\n-03111A Extract Zip Spec      14 (20) '2.0'\n-03111B Extract OS            00 (0) 'MS-DOS'\n-03111C General Purpose Flag  0000 (0)\n-03111E Compression Method    0000 (0) 'Stored'\n-031120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031124 CRC                   00000000 (0)\n-031128 Compressed Size       00000000 (0)\n-03112C Uncompressed Size     00000000 (0)\n-031130 Filename Length       0042 (66)\n-031132 Extra Length          0009 (9)\n-031134 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31134: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031176 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031178   Length              0005 (5)\n-03117A   Flags               01 (1) 'Modification'\n-03117B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03117F LOCAL HEADER #102     04034B50 (67324752)\n-031183 Extract Zip Spec      14 (20) '2.0'\n-031184 Extract OS            00 (0) 'MS-DOS'\n-031185 General Purpose Flag  0000 (0)\n-031187 Compression Method    0000 (0) 'Stored'\n-031189 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03118D CRC                   00000000 (0)\n-031191 Compressed Size       00000000 (0)\n-031195 Uncompressed Size     00000000 (0)\n-031199 Filename Length       007F (127)\n-03119B Extra Length          0009 (9)\n-03119D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3119D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03121C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03121E   Length              0005 (5)\n-031220   Flags               01 (1) 'Modification'\n-031221   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031225 LOCAL HEADER #103     04034B50 (67324752)\n-031229 Extract Zip Spec      14 (20) '2.0'\n-03122A Extract OS            00 (0) 'MS-DOS'\n-03122B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03122D Compression Method    0000 (0) 'Stored'\n-03122F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031233 CRC                   00000000 (0)\n-031237 Compressed Size       00000000 (0)\n-03123B Uncompressed Size     00000000 (0)\n-03123F Filename Length       0095 (149)\n-031241 Extra Length          0009 (9)\n-031243 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+032F5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+032F61   Length              0005 (5)\n+032F63   Flags               01 (1) 'Modification'\n+032F64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+032F68 PAYLOAD\n+\n+03428F DATA DESCRIPTOR       08074B50 (134695760)\n+034293 CRC                   896578EC (2305128684)\n+034297 Compressed Size       00001327 (4903)\n+03429B Uncompressed Size     00001327 (4903)\n+\n+03429F LOCAL HEADER #100     04034B50 (67324752)\n+0342A3 Extract Zip Spec      14 (20) '2.0'\n+0342A4 Extract OS            00 (0) 'MS-DOS'\n+0342A5 General Purpose Flag  0000 (0)\n+0342A7 Compression Method    0000 (0) 'Stored'\n+0342A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0342AD CRC                   00000000 (0)\n+0342B1 Compressed Size       00000000 (0)\n+0342B5 Uncompressed Size     00000000 (0)\n+0342B9 Filename Length       003B (59)\n+0342BB Extra Length          0009 (9)\n+0342BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x342BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0342F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0342FA   Length              0005 (5)\n+0342FC   Flags               01 (1) 'Modification'\n+0342FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034301 LOCAL HEADER #101     04034B50 (67324752)\n+034305 Extract Zip Spec      14 (20) '2.0'\n+034306 Extract OS            00 (0) 'MS-DOS'\n+034307 General Purpose Flag  0000 (0)\n+034309 Compression Method    0000 (0) 'Stored'\n+03430B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03430F CRC                   00000000 (0)\n+034313 Compressed Size       00000000 (0)\n+034317 Uncompressed Size     00000000 (0)\n+03431B Filename Length       0042 (66)\n+03431D Extra Length          0009 (9)\n+03431F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3431F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034361 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034363   Length              0005 (5)\n+034365   Flags               01 (1) 'Modification'\n+034366   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03436A LOCAL HEADER #102     04034B50 (67324752)\n+03436E Extract Zip Spec      14 (20) '2.0'\n+03436F Extract OS            00 (0) 'MS-DOS'\n+034370 General Purpose Flag  0000 (0)\n+034372 Compression Method    0000 (0) 'Stored'\n+034374 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034378 CRC                   00000000 (0)\n+03437C Compressed Size       00000000 (0)\n+034380 Uncompressed Size     00000000 (0)\n+034384 Filename Length       007F (127)\n+034386 Extra Length          0009 (9)\n+034388 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34388: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034407 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034409   Length              0005 (5)\n+03440B   Flags               01 (1) 'Modification'\n+03440C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034410 LOCAL HEADER #103     04034B50 (67324752)\n+034414 Extract Zip Spec      14 (20) '2.0'\n+034415 Extract OS            00 (0) 'MS-DOS'\n+034416 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034418 Compression Method    0000 (0) 'Stored'\n+03441A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03441E CRC                   00000000 (0)\n+034422 Compressed Size       00000000 (0)\n+034426 Uncompressed Size     00000000 (0)\n+03442A Filename Length       0095 (149)\n+03442C Extra Length          0009 (9)\n+03442E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x31243: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3442E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0312D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0312DA   Length              0005 (5)\n-0312DC   Flags               01 (1) 'Modification'\n-0312DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0312E1 PAYLOAD\n-\n-031D3A DATA DESCRIPTOR       08074B50 (134695760)\n-031D3E CRC                   33B19866 (867276902)\n-031D42 Compressed Size       00000A59 (2649)\n-031D46 Uncompressed Size     00000A59 (2649)\n-\n-031D4A LOCAL HEADER #104     04034B50 (67324752)\n-031D4E Extract Zip Spec      14 (20) '2.0'\n-031D4F Extract OS            00 (0) 'MS-DOS'\n-031D50 General Purpose Flag  0000 (0)\n-031D52 Compression Method    0000 (0) 'Stored'\n-031D54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031D58 CRC                   00000000 (0)\n-031D5C Compressed Size       00000000 (0)\n-031D60 Uncompressed Size     00000000 (0)\n-031D64 Filename Length       007B (123)\n-031D66 Extra Length          0009 (9)\n-031D68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31D68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031DE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031DE5   Length              0005 (5)\n-031DE7   Flags               01 (1) 'Modification'\n-031DE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031DEC LOCAL HEADER #105     04034B50 (67324752)\n-031DF0 Extract Zip Spec      14 (20) '2.0'\n-031DF1 Extract OS            00 (0) 'MS-DOS'\n-031DF2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-031DF4 Compression Method    0000 (0) 'Stored'\n-031DF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031DFA CRC                   00000000 (0)\n-031DFE Compressed Size       00000000 (0)\n-031E02 Uncompressed Size     00000000 (0)\n-031E06 Filename Length       0091 (145)\n-031E08 Extra Length          0009 (9)\n-031E0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0344C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0344C5   Length              0005 (5)\n+0344C7   Flags               01 (1) 'Modification'\n+0344C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0344CC PAYLOAD\n+\n+034F25 DATA DESCRIPTOR       08074B50 (134695760)\n+034F29 CRC                   33B19866 (867276902)\n+034F2D Compressed Size       00000A59 (2649)\n+034F31 Uncompressed Size     00000A59 (2649)\n+\n+034F35 LOCAL HEADER #104     04034B50 (67324752)\n+034F39 Extract Zip Spec      14 (20) '2.0'\n+034F3A Extract OS            00 (0) 'MS-DOS'\n+034F3B General Purpose Flag  0000 (0)\n+034F3D Compression Method    0000 (0) 'Stored'\n+034F3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034F43 CRC                   00000000 (0)\n+034F47 Compressed Size       00000000 (0)\n+034F4B Uncompressed Size     00000000 (0)\n+034F4F Filename Length       007B (123)\n+034F51 Extra Length          0009 (9)\n+034F53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34F53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034FCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034FD0   Length              0005 (5)\n+034FD2   Flags               01 (1) 'Modification'\n+034FD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034FD7 LOCAL HEADER #105     04034B50 (67324752)\n+034FDB Extract Zip Spec      14 (20) '2.0'\n+034FDC Extract OS            00 (0) 'MS-DOS'\n+034FDD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034FDF Compression Method    0000 (0) 'Stored'\n+034FE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034FE5 CRC                   00000000 (0)\n+034FE9 Compressed Size       00000000 (0)\n+034FED Uncompressed Size     00000000 (0)\n+034FF1 Filename Length       0091 (145)\n+034FF3 Extra Length          0009 (9)\n+034FF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x31E0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x34FF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-031E9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031E9D   Length              0005 (5)\n-031E9F   Flags               01 (1) 'Modification'\n-031EA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031EA4 PAYLOAD\n-\n-032771 DATA DESCRIPTOR       08074B50 (134695760)\n-032775 CRC                   2B6EF697 (728692375)\n-032779 Compressed Size       000008CD (2253)\n-03277D Uncompressed Size     000008CD (2253)\n-\n-032781 LOCAL HEADER #106     04034B50 (67324752)\n-032785 Extract Zip Spec      14 (20) '2.0'\n-032786 Extract OS            00 (0) 'MS-DOS'\n-032787 General Purpose Flag  0000 (0)\n-032789 Compression Method    0000 (0) 'Stored'\n-03278B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03278F CRC                   00000000 (0)\n-032793 Compressed Size       00000000 (0)\n-032797 Uncompressed Size     00000000 (0)\n-03279B Filename Length       0034 (52)\n-03279D Extra Length          0009 (9)\n-03279F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3279F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0327D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0327D5   Length              0005 (5)\n-0327D7   Flags               01 (1) 'Modification'\n-0327D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0327DC LOCAL HEADER #107     04034B50 (67324752)\n-0327E0 Extract Zip Spec      14 (20) '2.0'\n-0327E1 Extract OS            00 (0) 'MS-DOS'\n-0327E2 General Purpose Flag  0000 (0)\n-0327E4 Compression Method    0000 (0) 'Stored'\n-0327E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0327EA CRC                   00000000 (0)\n-0327EE Compressed Size       00000000 (0)\n-0327F2 Uncompressed Size     00000000 (0)\n-0327F6 Filename Length       003B (59)\n-0327F8 Extra Length          0009 (9)\n-0327FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x327FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-032835 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-032837   Length              0005 (5)\n-032839   Flags               01 (1) 'Modification'\n-03283A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03283E LOCAL HEADER #108     04034B50 (67324752)\n-032842 Extract Zip Spec      14 (20) '2.0'\n-032843 Extract OS            00 (0) 'MS-DOS'\n-032844 General Purpose Flag  0000 (0)\n-032846 Compression Method    0000 (0) 'Stored'\n-032848 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03284C CRC                   00000000 (0)\n-032850 Compressed Size       00000000 (0)\n-032854 Uncompressed Size     00000000 (0)\n-032858 Filename Length       007F (127)\n-03285A Extra Length          0009 (9)\n-03285C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3285C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0328DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0328DD   Length              0005 (5)\n-0328DF   Flags               01 (1) 'Modification'\n-0328E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0328E4 LOCAL HEADER #109     04034B50 (67324752)\n-0328E8 Extract Zip Spec      14 (20) '2.0'\n-0328E9 Extract OS            00 (0) 'MS-DOS'\n-0328EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0328EC Compression Method    0000 (0) 'Stored'\n-0328EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0328F2 CRC                   00000000 (0)\n-0328F6 Compressed Size       00000000 (0)\n-0328FA Uncompressed Size     00000000 (0)\n-0328FE Filename Length       0095 (149)\n-032900 Extra Length          0009 (9)\n-032902 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035086 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035088   Length              0005 (5)\n+03508A   Flags               01 (1) 'Modification'\n+03508B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03508F PAYLOAD\n+\n+03595C DATA DESCRIPTOR       08074B50 (134695760)\n+035960 CRC                   2B6EF697 (728692375)\n+035964 Compressed Size       000008CD (2253)\n+035968 Uncompressed Size     000008CD (2253)\n+\n+03596C LOCAL HEADER #106     04034B50 (67324752)\n+035970 Extract Zip Spec      14 (20) '2.0'\n+035971 Extract OS            00 (0) 'MS-DOS'\n+035972 General Purpose Flag  0000 (0)\n+035974 Compression Method    0000 (0) 'Stored'\n+035976 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03597A CRC                   00000000 (0)\n+03597E Compressed Size       00000000 (0)\n+035982 Uncompressed Size     00000000 (0)\n+035986 Filename Length       0034 (52)\n+035988 Extra Length          0009 (9)\n+03598A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3598A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0359BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0359C0   Length              0005 (5)\n+0359C2   Flags               01 (1) 'Modification'\n+0359C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0359C7 LOCAL HEADER #107     04034B50 (67324752)\n+0359CB Extract Zip Spec      14 (20) '2.0'\n+0359CC Extract OS            00 (0) 'MS-DOS'\n+0359CD General Purpose Flag  0000 (0)\n+0359CF Compression Method    0000 (0) 'Stored'\n+0359D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0359D5 CRC                   00000000 (0)\n+0359D9 Compressed Size       00000000 (0)\n+0359DD Uncompressed Size     00000000 (0)\n+0359E1 Filename Length       003B (59)\n+0359E3 Extra Length          0009 (9)\n+0359E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x359E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035A20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035A22   Length              0005 (5)\n+035A24   Flags               01 (1) 'Modification'\n+035A25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035A29 LOCAL HEADER #108     04034B50 (67324752)\n+035A2D Extract Zip Spec      14 (20) '2.0'\n+035A2E Extract OS            00 (0) 'MS-DOS'\n+035A2F General Purpose Flag  0000 (0)\n+035A31 Compression Method    0000 (0) 'Stored'\n+035A33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035A37 CRC                   00000000 (0)\n+035A3B Compressed Size       00000000 (0)\n+035A3F Uncompressed Size     00000000 (0)\n+035A43 Filename Length       007F (127)\n+035A45 Extra Length          0009 (9)\n+035A47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35A47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035AC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035AC8   Length              0005 (5)\n+035ACA   Flags               01 (1) 'Modification'\n+035ACB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035ACF LOCAL HEADER #109     04034B50 (67324752)\n+035AD3 Extract Zip Spec      14 (20) '2.0'\n+035AD4 Extract OS            00 (0) 'MS-DOS'\n+035AD5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+035AD7 Compression Method    0000 (0) 'Stored'\n+035AD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035ADD CRC                   00000000 (0)\n+035AE1 Compressed Size       00000000 (0)\n+035AE5 Uncompressed Size     00000000 (0)\n+035AE9 Filename Length       0095 (149)\n+035AEB Extra Length          0009 (9)\n+035AED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x32902: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x35AED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-032997 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-032999   Length              0005 (5)\n-03299B   Flags               01 (1) 'Modification'\n-03299C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0329A0 PAYLOAD\n-\n-032FEE DATA DESCRIPTOR       08074B50 (134695760)\n-032FF2 CRC                   9AFFB21B (2600448539)\n-032FF6 Compressed Size       0000064E (1614)\n-032FFA Uncompressed Size     0000064E (1614)\n-\n-032FFE LOCAL HEADER #110     04034B50 (67324752)\n-033002 Extract Zip Spec      14 (20) '2.0'\n-033003 Extract OS            00 (0) 'MS-DOS'\n-033004 General Purpose Flag  0000 (0)\n-033006 Compression Method    0000 (0) 'Stored'\n-033008 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03300C CRC                   00000000 (0)\n-033010 Compressed Size       00000000 (0)\n-033014 Uncompressed Size     00000000 (0)\n-033018 Filename Length       007B (123)\n-03301A Extra Length          0009 (9)\n-03301C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3301C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-033097 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033099   Length              0005 (5)\n-03309B   Flags               01 (1) 'Modification'\n-03309C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0330A0 LOCAL HEADER #111     04034B50 (67324752)\n-0330A4 Extract Zip Spec      14 (20) '2.0'\n-0330A5 Extract OS            00 (0) 'MS-DOS'\n-0330A6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0330A8 Compression Method    0000 (0) 'Stored'\n-0330AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0330AE CRC                   00000000 (0)\n-0330B2 Compressed Size       00000000 (0)\n-0330B6 Uncompressed Size     00000000 (0)\n-0330BA Filename Length       0091 (145)\n-0330BC Extra Length          0009 (9)\n-0330BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035B82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035B84   Length              0005 (5)\n+035B86   Flags               01 (1) 'Modification'\n+035B87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+035B8B PAYLOAD\n+\n+0361D9 DATA DESCRIPTOR       08074B50 (134695760)\n+0361DD CRC                   9AFFB21B (2600448539)\n+0361E1 Compressed Size       0000064E (1614)\n+0361E5 Uncompressed Size     0000064E (1614)\n+\n+0361E9 LOCAL HEADER #110     04034B50 (67324752)\n+0361ED Extract Zip Spec      14 (20) '2.0'\n+0361EE Extract OS            00 (0) 'MS-DOS'\n+0361EF General Purpose Flag  0000 (0)\n+0361F1 Compression Method    0000 (0) 'Stored'\n+0361F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0361F7 CRC                   00000000 (0)\n+0361FB Compressed Size       00000000 (0)\n+0361FF Uncompressed Size     00000000 (0)\n+036203 Filename Length       007B (123)\n+036205 Extra Length          0009 (9)\n+036207 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36207: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036282 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036284   Length              0005 (5)\n+036286   Flags               01 (1) 'Modification'\n+036287   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03628B LOCAL HEADER #111     04034B50 (67324752)\n+03628F Extract Zip Spec      14 (20) '2.0'\n+036290 Extract OS            00 (0) 'MS-DOS'\n+036291 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+036293 Compression Method    0000 (0) 'Stored'\n+036295 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036299 CRC                   00000000 (0)\n+03629D Compressed Size       00000000 (0)\n+0362A1 Uncompressed Size     00000000 (0)\n+0362A5 Filename Length       0091 (145)\n+0362A7 Extra Length          0009 (9)\n+0362A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x330BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x362A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03314F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033151   Length              0005 (5)\n-033153   Flags               01 (1) 'Modification'\n-033154   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-033158 PAYLOAD\n-\n-033BA7 DATA DESCRIPTOR       08074B50 (134695760)\n-033BAB CRC                   88CF36AA (2295281322)\n-033BAF Compressed Size       00000A4F (2639)\n-033BB3 Uncompressed Size     00000A4F (2639)\n-\n-033BB7 LOCAL HEADER #112     04034B50 (67324752)\n-033BBB Extract Zip Spec      14 (20) '2.0'\n-033BBC Extract OS            00 (0) 'MS-DOS'\n-033BBD General Purpose Flag  0000 (0)\n-033BBF Compression Method    0000 (0) 'Stored'\n-033BC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033BC5 CRC                   00000000 (0)\n-033BC9 Compressed Size       00000000 (0)\n-033BCD Uncompressed Size     00000000 (0)\n-033BD1 Filename Length       0084 (132)\n-033BD3 Extra Length          0009 (9)\n-033BD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03633A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03633C   Length              0005 (5)\n+03633E   Flags               01 (1) 'Modification'\n+03633F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+036343 PAYLOAD\n+\n+036D92 DATA DESCRIPTOR       08074B50 (134695760)\n+036D96 CRC                   88CF36AA (2295281322)\n+036D9A Compressed Size       00000A4F (2639)\n+036D9E Uncompressed Size     00000A4F (2639)\n+\n+036DA2 LOCAL HEADER #112     04034B50 (67324752)\n+036DA6 Extract Zip Spec      14 (20) '2.0'\n+036DA7 Extract OS            00 (0) 'MS-DOS'\n+036DA8 General Purpose Flag  0000 (0)\n+036DAA Compression Method    0000 (0) 'Stored'\n+036DAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036DB0 CRC                   00000000 (0)\n+036DB4 Compressed Size       00000000 (0)\n+036DB8 Uncompressed Size     00000000 (0)\n+036DBC Filename Length       0084 (132)\n+036DBE Extra Length          0009 (9)\n+036DC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x33BD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36DC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-033C59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033C5B   Length              0005 (5)\n-033C5D   Flags               01 (1) 'Modification'\n-033C5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-033C62 LOCAL HEADER #113     04034B50 (67324752)\n-033C66 Extract Zip Spec      14 (20) '2.0'\n-033C67 Extract OS            00 (0) 'MS-DOS'\n-033C68 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-033C6A Compression Method    0000 (0) 'Stored'\n-033C6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033C70 CRC                   00000000 (0)\n-033C74 Compressed Size       00000000 (0)\n-033C78 Uncompressed Size     00000000 (0)\n-033C7C Filename Length       009A (154)\n-033C7E Extra Length          0009 (9)\n-033C80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+036E44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036E46   Length              0005 (5)\n+036E48   Flags               01 (1) 'Modification'\n+036E49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+036E4D LOCAL HEADER #113     04034B50 (67324752)\n+036E51 Extract Zip Spec      14 (20) '2.0'\n+036E52 Extract OS            00 (0) 'MS-DOS'\n+036E53 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+036E55 Compression Method    0000 (0) 'Stored'\n+036E57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036E5B CRC                   00000000 (0)\n+036E5F Compressed Size       00000000 (0)\n+036E63 Uncompressed Size     00000000 (0)\n+036E67 Filename Length       009A (154)\n+036E69 Extra Length          0009 (9)\n+036E6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x33C80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36E6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-033D1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033D1C   Length              0005 (5)\n-033D1E   Flags               01 (1) 'Modification'\n-033D1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-033D23 PAYLOAD\n-\n-034A2C DATA DESCRIPTOR       08074B50 (134695760)\n-034A30 CRC                   217E01B2 (561906098)\n-034A34 Compressed Size       00000D09 (3337)\n-034A38 Uncompressed Size     00000D09 (3337)\n-\n-034A3C LOCAL HEADER #114     04034B50 (67324752)\n-034A40 Extract Zip Spec      14 (20) '2.0'\n-034A41 Extract OS            00 (0) 'MS-DOS'\n-034A42 General Purpose Flag  0000 (0)\n-034A44 Compression Method    0000 (0) 'Stored'\n-034A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034A4A CRC                   00000000 (0)\n-034A4E Compressed Size       00000000 (0)\n-034A52 Uncompressed Size     00000000 (0)\n-034A56 Filename Length       0079 (121)\n-034A58 Extra Length          0009 (9)\n-034A5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34A5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034AD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034AD5   Length              0005 (5)\n-034AD7   Flags               01 (1) 'Modification'\n-034AD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-034ADC LOCAL HEADER #115     04034B50 (67324752)\n-034AE0 Extract Zip Spec      14 (20) '2.0'\n-034AE1 Extract OS            00 (0) 'MS-DOS'\n-034AE2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-034AE4 Compression Method    0000 (0) 'Stored'\n-034AE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034AEA CRC                   00000000 (0)\n-034AEE Compressed Size       00000000 (0)\n-034AF2 Uncompressed Size     00000000 (0)\n-034AF6 Filename Length       008F (143)\n-034AF8 Extra Length          0009 (9)\n-034AFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+036F05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036F07   Length              0005 (5)\n+036F09   Flags               01 (1) 'Modification'\n+036F0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+036F0E PAYLOAD\n+\n+037C17 DATA DESCRIPTOR       08074B50 (134695760)\n+037C1B CRC                   217E01B2 (561906098)\n+037C1F Compressed Size       00000D09 (3337)\n+037C23 Uncompressed Size     00000D09 (3337)\n+\n+037C27 LOCAL HEADER #114     04034B50 (67324752)\n+037C2B Extract Zip Spec      14 (20) '2.0'\n+037C2C Extract OS            00 (0) 'MS-DOS'\n+037C2D General Purpose Flag  0000 (0)\n+037C2F Compression Method    0000 (0) 'Stored'\n+037C31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037C35 CRC                   00000000 (0)\n+037C39 Compressed Size       00000000 (0)\n+037C3D Uncompressed Size     00000000 (0)\n+037C41 Filename Length       0079 (121)\n+037C43 Extra Length          0009 (9)\n+037C45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37C45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037CBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037CC0   Length              0005 (5)\n+037CC2   Flags               01 (1) 'Modification'\n+037CC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+037CC7 LOCAL HEADER #115     04034B50 (67324752)\n+037CCB Extract Zip Spec      14 (20) '2.0'\n+037CCC Extract OS            00 (0) 'MS-DOS'\n+037CCD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+037CCF Compression Method    0000 (0) 'Stored'\n+037CD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037CD5 CRC                   00000000 (0)\n+037CD9 Compressed Size       00000000 (0)\n+037CDD Uncompressed Size     00000000 (0)\n+037CE1 Filename Length       008F (143)\n+037CE3 Extra Length          0009 (9)\n+037CE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x34AFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37CE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-034B89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034B8B   Length              0005 (5)\n-034B8D   Flags               01 (1) 'Modification'\n-034B8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-034B92 PAYLOAD\n-\n-035F6F DATA DESCRIPTOR       08074B50 (134695760)\n-035F73 CRC                   9640338D (2520789901)\n-035F77 Compressed Size       000013DD (5085)\n-035F7B Uncompressed Size     000013DD (5085)\n-\n-035F7F LOCAL HEADER #116     04034B50 (67324752)\n-035F83 Extract Zip Spec      14 (20) '2.0'\n-035F84 Extract OS            00 (0) 'MS-DOS'\n-035F85 General Purpose Flag  0000 (0)\n-035F87 Compression Method    0000 (0) 'Stored'\n-035F89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035F8D CRC                   00000000 (0)\n-035F91 Compressed Size       00000000 (0)\n-035F95 Uncompressed Size     00000000 (0)\n-035F99 Filename Length       007B (123)\n-035F9B Extra Length          0009 (9)\n-035F9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35F9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-036018 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03601A   Length              0005 (5)\n-03601C   Flags               01 (1) 'Modification'\n-03601D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-036021 LOCAL HEADER #117     04034B50 (67324752)\n-036025 Extract Zip Spec      14 (20) '2.0'\n-036026 Extract OS            00 (0) 'MS-DOS'\n-036027 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-036029 Compression Method    0000 (0) 'Stored'\n-03602B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03602F CRC                   00000000 (0)\n-036033 Compressed Size       00000000 (0)\n-036037 Uncompressed Size     00000000 (0)\n-03603B Filename Length       0091 (145)\n-03603D Extra Length          0009 (9)\n-03603F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+037D74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037D76   Length              0005 (5)\n+037D78   Flags               01 (1) 'Modification'\n+037D79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+037D7D PAYLOAD\n+\n+03915A DATA DESCRIPTOR       08074B50 (134695760)\n+03915E CRC                   9640338D (2520789901)\n+039162 Compressed Size       000013DD (5085)\n+039166 Uncompressed Size     000013DD (5085)\n+\n+03916A LOCAL HEADER #116     04034B50 (67324752)\n+03916E Extract Zip Spec      14 (20) '2.0'\n+03916F Extract OS            00 (0) 'MS-DOS'\n+039170 General Purpose Flag  0000 (0)\n+039172 Compression Method    0000 (0) 'Stored'\n+039174 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039178 CRC                   00000000 (0)\n+03917C Compressed Size       00000000 (0)\n+039180 Uncompressed Size     00000000 (0)\n+039184 Filename Length       007B (123)\n+039186 Extra Length          0009 (9)\n+039188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+039203 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039205   Length              0005 (5)\n+039207   Flags               01 (1) 'Modification'\n+039208   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03920C LOCAL HEADER #117     04034B50 (67324752)\n+039210 Extract Zip Spec      14 (20) '2.0'\n+039211 Extract OS            00 (0) 'MS-DOS'\n+039212 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+039214 Compression Method    0000 (0) 'Stored'\n+039216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03921A CRC                   00000000 (0)\n+03921E Compressed Size       00000000 (0)\n+039222 Uncompressed Size     00000000 (0)\n+039226 Filename Length       0091 (145)\n+039228 Extra Length          0009 (9)\n+03922A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3603F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3922A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0360D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0360D2   Length              0005 (5)\n-0360D4   Flags               01 (1) 'Modification'\n-0360D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0360D9 PAYLOAD\n-\n-037CF8 DATA DESCRIPTOR       08074B50 (134695760)\n-037CFC CRC                   5232B519 (1379054873)\n-037D00 Compressed Size       00001C1F (7199)\n-037D04 Uncompressed Size     00001C1F (7199)\n-\n-037D08 LOCAL HEADER #118     04034B50 (67324752)\n-037D0C Extract Zip Spec      14 (20) '2.0'\n-037D0D Extract OS            00 (0) 'MS-DOS'\n-037D0E General Purpose Flag  0000 (0)\n-037D10 Compression Method    0000 (0) 'Stored'\n-037D12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037D16 CRC                   00000000 (0)\n-037D1A Compressed Size       00000000 (0)\n-037D1E Uncompressed Size     00000000 (0)\n-037D22 Filename Length       0078 (120)\n-037D24 Extra Length          0009 (9)\n-037D26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37D26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037D9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037DA0   Length              0005 (5)\n-037DA2   Flags               01 (1) 'Modification'\n-037DA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-037DA7 LOCAL HEADER #119     04034B50 (67324752)\n-037DAB Extract Zip Spec      14 (20) '2.0'\n-037DAC Extract OS            00 (0) 'MS-DOS'\n-037DAD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-037DAF Compression Method    0000 (0) 'Stored'\n-037DB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037DB5 CRC                   00000000 (0)\n-037DB9 Compressed Size       00000000 (0)\n-037DBD Uncompressed Size     00000000 (0)\n-037DC1 Filename Length       008E (142)\n-037DC3 Extra Length          0009 (9)\n-037DC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0392BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0392BD   Length              0005 (5)\n+0392BF   Flags               01 (1) 'Modification'\n+0392C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0392C4 PAYLOAD\n+\n+03AEE3 DATA DESCRIPTOR       08074B50 (134695760)\n+03AEE7 CRC                   5232B519 (1379054873)\n+03AEEB Compressed Size       00001C1F (7199)\n+03AEEF Uncompressed Size     00001C1F (7199)\n+\n+03AEF3 LOCAL HEADER #118     04034B50 (67324752)\n+03AEF7 Extract Zip Spec      14 (20) '2.0'\n+03AEF8 Extract OS            00 (0) 'MS-DOS'\n+03AEF9 General Purpose Flag  0000 (0)\n+03AEFB Compression Method    0000 (0) 'Stored'\n+03AEFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AF01 CRC                   00000000 (0)\n+03AF05 Compressed Size       00000000 (0)\n+03AF09 Uncompressed Size     00000000 (0)\n+03AF0D Filename Length       0078 (120)\n+03AF0F Extra Length          0009 (9)\n+03AF11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AF11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03AF89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AF8B   Length              0005 (5)\n+03AF8D   Flags               01 (1) 'Modification'\n+03AF8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03AF92 LOCAL HEADER #119     04034B50 (67324752)\n+03AF96 Extract Zip Spec      14 (20) '2.0'\n+03AF97 Extract OS            00 (0) 'MS-DOS'\n+03AF98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03AF9A Compression Method    0000 (0) 'Stored'\n+03AF9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AFA0 CRC                   00000000 (0)\n+03AFA4 Compressed Size       00000000 (0)\n+03AFA8 Uncompressed Size     00000000 (0)\n+03AFAC Filename Length       008E (142)\n+03AFAE Extra Length          0009 (9)\n+03AFB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x37DC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AFB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-037E53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037E55   Length              0005 (5)\n-037E57   Flags               01 (1) 'Modification'\n-037E58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-037E5C PAYLOAD\n-\n-039019 DATA DESCRIPTOR       08074B50 (134695760)\n-03901D CRC                   1D7E8FA2 (494833570)\n-039021 Compressed Size       000011BD (4541)\n-039025 Uncompressed Size     000011BD (4541)\n-\n-039029 LOCAL HEADER #120     04034B50 (67324752)\n-03902D Extract Zip Spec      14 (20) '2.0'\n-03902E Extract OS            00 (0) 'MS-DOS'\n-03902F General Purpose Flag  0000 (0)\n-039031 Compression Method    0000 (0) 'Stored'\n-039033 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-039037 CRC                   00000000 (0)\n-03903B Compressed Size       00000000 (0)\n-03903F Uncompressed Size     00000000 (0)\n-039043 Filename Length       007F (127)\n-039045 Extra Length          0009 (9)\n-039047 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39047: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0390C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0390C8   Length              0005 (5)\n-0390CA   Flags               01 (1) 'Modification'\n-0390CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0390CF LOCAL HEADER #121     04034B50 (67324752)\n-0390D3 Extract Zip Spec      14 (20) '2.0'\n-0390D4 Extract OS            00 (0) 'MS-DOS'\n-0390D5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0390D7 Compression Method    0000 (0) 'Stored'\n-0390D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0390DD CRC                   00000000 (0)\n-0390E1 Compressed Size       00000000 (0)\n-0390E5 Uncompressed Size     00000000 (0)\n-0390E9 Filename Length       0095 (149)\n-0390EB Extra Length          0009 (9)\n-0390ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03B03E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B040   Length              0005 (5)\n+03B042   Flags               01 (1) 'Modification'\n+03B043   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03B047 PAYLOAD\n+\n+03C204 DATA DESCRIPTOR       08074B50 (134695760)\n+03C208 CRC                   1D7E8FA2 (494833570)\n+03C20C Compressed Size       000011BD (4541)\n+03C210 Uncompressed Size     000011BD (4541)\n+\n+03C214 LOCAL HEADER #120     04034B50 (67324752)\n+03C218 Extract Zip Spec      14 (20) '2.0'\n+03C219 Extract OS            00 (0) 'MS-DOS'\n+03C21A General Purpose Flag  0000 (0)\n+03C21C Compression Method    0000 (0) 'Stored'\n+03C21E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C222 CRC                   00000000 (0)\n+03C226 Compressed Size       00000000 (0)\n+03C22A Uncompressed Size     00000000 (0)\n+03C22E Filename Length       007F (127)\n+03C230 Extra Length          0009 (9)\n+03C232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C2B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C2B3   Length              0005 (5)\n+03C2B5   Flags               01 (1) 'Modification'\n+03C2B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C2BA LOCAL HEADER #121     04034B50 (67324752)\n+03C2BE Extract Zip Spec      14 (20) '2.0'\n+03C2BF Extract OS            00 (0) 'MS-DOS'\n+03C2C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03C2C2 Compression Method    0000 (0) 'Stored'\n+03C2C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C2C8 CRC                   00000000 (0)\n+03C2CC Compressed Size       00000000 (0)\n+03C2D0 Uncompressed Size     00000000 (0)\n+03C2D4 Filename Length       0095 (149)\n+03C2D6 Extra Length          0009 (9)\n+03C2D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x390ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3C2D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-039182 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039184   Length              0005 (5)\n-039186   Flags               01 (1) 'Modification'\n-039187   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03918B PAYLOAD\n-\n-0398C1 DATA DESCRIPTOR       08074B50 (134695760)\n-0398C5 CRC                   333FC2BB (859816635)\n-0398C9 Compressed Size       00000736 (1846)\n-0398CD Uncompressed Size     00000736 (1846)\n-\n-0398D1 LOCAL HEADER #122     04034B50 (67324752)\n-0398D5 Extract Zip Spec      14 (20) '2.0'\n-0398D6 Extract OS            00 (0) 'MS-DOS'\n-0398D7 General Purpose Flag  0000 (0)\n-0398D9 Compression Method    0000 (0) 'Stored'\n-0398DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0398DF CRC                   00000000 (0)\n-0398E3 Compressed Size       00000000 (0)\n-0398E7 Uncompressed Size     00000000 (0)\n-0398EB Filename Length       0024 (36)\n-0398ED Extra Length          0009 (9)\n-0398EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x398EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-039913 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039915   Length              0005 (5)\n-039917   Flags               01 (1) 'Modification'\n-039918   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03991C LOCAL HEADER #123     04034B50 (67324752)\n-039920 Extract Zip Spec      14 (20) '2.0'\n-039921 Extract OS            00 (0) 'MS-DOS'\n-039922 General Purpose Flag  0000 (0)\n-039924 Compression Method    0000 (0) 'Stored'\n-039926 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03992A CRC                   00000000 (0)\n-03992E Compressed Size       00000000 (0)\n-039932 Uncompressed Size     00000000 (0)\n-039936 Filename Length       002B (43)\n-039938 Extra Length          0009 (9)\n-03993A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3993A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-039965 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039967   Length              0005 (5)\n-039969   Flags               01 (1) 'Modification'\n-03996A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03996E LOCAL HEADER #124     04034B50 (67324752)\n-039972 Extract Zip Spec      14 (20) '2.0'\n-039973 Extract OS            00 (0) 'MS-DOS'\n-039974 General Purpose Flag  0000 (0)\n-039976 Compression Method    0000 (0) 'Stored'\n-039978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03997C CRC                   00000000 (0)\n-039980 Compressed Size       00000000 (0)\n-039984 Uncompressed Size     00000000 (0)\n-039988 Filename Length       0058 (88)\n-03998A Extra Length          0009 (9)\n-03998C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3998C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0399E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0399E6   Length              0005 (5)\n-0399E8   Flags               01 (1) 'Modification'\n-0399E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0399ED LOCAL HEADER #125     04034B50 (67324752)\n-0399F1 Extract Zip Spec      14 (20) '2.0'\n-0399F2 Extract OS            00 (0) 'MS-DOS'\n-0399F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0399F5 Compression Method    0000 (0) 'Stored'\n-0399F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0399FB CRC                   00000000 (0)\n-0399FF Compressed Size       00000000 (0)\n-039A03 Uncompressed Size     00000000 (0)\n-039A07 Filename Length       006E (110)\n-039A09 Extra Length          0009 (9)\n-039A0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39A0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-039A79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039A7B   Length              0005 (5)\n-039A7D   Flags               01 (1) 'Modification'\n-039A7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-039A82 PAYLOAD\n-\n-03A44F DATA DESCRIPTOR       08074B50 (134695760)\n-03A453 CRC                   10CC5E74 (281828980)\n-03A457 Compressed Size       000009CD (2509)\n-03A45B Uncompressed Size     000009CD (2509)\n-\n-03A45F LOCAL HEADER #126     04034B50 (67324752)\n-03A463 Extract Zip Spec      14 (20) '2.0'\n-03A464 Extract OS            00 (0) 'MS-DOS'\n-03A465 General Purpose Flag  0000 (0)\n-03A467 Compression Method    0000 (0) 'Stored'\n-03A469 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A46D CRC                   00000000 (0)\n-03A471 Compressed Size       00000000 (0)\n-03A475 Uncompressed Size     00000000 (0)\n-03A479 Filename Length       0058 (88)\n-03A47B Extra Length          0009 (9)\n-03A47D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A47D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A4D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A4D7   Length              0005 (5)\n-03A4D9   Flags               01 (1) 'Modification'\n-03A4DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03A4DE LOCAL HEADER #127     04034B50 (67324752)\n-03A4E2 Extract Zip Spec      14 (20) '2.0'\n-03A4E3 Extract OS            00 (0) 'MS-DOS'\n-03A4E4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03A4E6 Compression Method    0000 (0) 'Stored'\n-03A4E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A4EC CRC                   00000000 (0)\n-03A4F0 Compressed Size       00000000 (0)\n-03A4F4 Uncompressed Size     00000000 (0)\n-03A4F8 Filename Length       006E (110)\n-03A4FA Extra Length          0009 (9)\n-03A4FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A4FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A56A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A56C   Length              0005 (5)\n-03A56E   Flags               01 (1) 'Modification'\n-03A56F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03A573 PAYLOAD\n-\n-03AF13 DATA DESCRIPTOR       08074B50 (134695760)\n-03AF17 CRC                   5F6BF872 (1600911474)\n-03AF1B Compressed Size       000009A0 (2464)\n-03AF1F Uncompressed Size     000009A0 (2464)\n-\n-03AF23 LOCAL HEADER #128     04034B50 (67324752)\n-03AF27 Extract Zip Spec      14 (20) '2.0'\n-03AF28 Extract OS            00 (0) 'MS-DOS'\n-03AF29 General Purpose Flag  0000 (0)\n-03AF2B Compression Method    0000 (0) 'Stored'\n-03AF2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AF31 CRC                   00000000 (0)\n-03AF35 Compressed Size       00000000 (0)\n-03AF39 Uncompressed Size     00000000 (0)\n-03AF3D Filename Length       0023 (35)\n-03AF3F Extra Length          0009 (9)\n-03AF41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AF41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03AF64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03AF66   Length              0005 (5)\n-03AF68   Flags               01 (1) 'Modification'\n-03AF69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03AF6D LOCAL HEADER #129     04034B50 (67324752)\n-03AF71 Extract Zip Spec      14 (20) '2.0'\n-03AF72 Extract OS            00 (0) 'MS-DOS'\n-03AF73 General Purpose Flag  0000 (0)\n-03AF75 Compression Method    0000 (0) 'Stored'\n-03AF77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AF7B CRC                   00000000 (0)\n-03AF7F Compressed Size       00000000 (0)\n-03AF83 Uncompressed Size     00000000 (0)\n-03AF87 Filename Length       002A (42)\n-03AF89 Extra Length          0009 (9)\n-03AF8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AF8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03AFB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03AFB7   Length              0005 (5)\n-03AFB9   Flags               01 (1) 'Modification'\n-03AFBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03AFBE LOCAL HEADER #130     04034B50 (67324752)\n-03AFC2 Extract Zip Spec      14 (20) '2.0'\n-03AFC3 Extract OS            00 (0) 'MS-DOS'\n-03AFC4 General Purpose Flag  0000 (0)\n-03AFC6 Compression Method    0000 (0) 'Stored'\n-03AFC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AFCC CRC                   00000000 (0)\n-03AFD0 Compressed Size       00000000 (0)\n-03AFD4 Uncompressed Size     00000000 (0)\n-03AFD8 Filename Length       0054 (84)\n-03AFDA Extra Length          0009 (9)\n-03AFDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AFDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B030 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B032   Length              0005 (5)\n-03B034   Flags               01 (1) 'Modification'\n-03B035   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B039 LOCAL HEADER #131     04034B50 (67324752)\n-03B03D Extract Zip Spec      14 (20) '2.0'\n-03B03E Extract OS            00 (0) 'MS-DOS'\n-03B03F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03B041 Compression Method    0000 (0) 'Stored'\n-03B043 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B047 CRC                   00000000 (0)\n-03B04B Compressed Size       00000000 (0)\n-03B04F Uncompressed Size     00000000 (0)\n-03B053 Filename Length       006A (106)\n-03B055 Extra Length          0009 (9)\n-03B057 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B057: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B0C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B0C3   Length              0005 (5)\n-03B0C5   Flags               01 (1) 'Modification'\n-03B0C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03B0CA PAYLOAD\n-\n-03C1FF DATA DESCRIPTOR       08074B50 (134695760)\n-03C203 CRC                   456B0BC9 (1164643273)\n-03C207 Compressed Size       00001135 (4405)\n-03C20B Uncompressed Size     00001135 (4405)\n-\n-03C20F LOCAL HEADER #132     04034B50 (67324752)\n-03C213 Extract Zip Spec      14 (20) '2.0'\n-03C214 Extract OS            00 (0) 'MS-DOS'\n-03C215 General Purpose Flag  0000 (0)\n-03C217 Compression Method    0000 (0) 'Stored'\n-03C219 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C21D CRC                   00000000 (0)\n-03C221 Compressed Size       00000000 (0)\n-03C225 Uncompressed Size     00000000 (0)\n-03C229 Filename Length       0022 (34)\n-03C22B Extra Length          0009 (9)\n-03C22D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C22D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C24F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C251   Length              0005 (5)\n-03C253   Flags               01 (1) 'Modification'\n-03C254   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C258 LOCAL HEADER #133     04034B50 (67324752)\n-03C25C Extract Zip Spec      14 (20) '2.0'\n-03C25D Extract OS            00 (0) 'MS-DOS'\n-03C25E General Purpose Flag  0000 (0)\n-03C260 Compression Method    0000 (0) 'Stored'\n-03C262 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C266 CRC                   00000000 (0)\n-03C26A Compressed Size       00000000 (0)\n-03C26E Uncompressed Size     00000000 (0)\n-03C272 Filename Length       0029 (41)\n-03C274 Extra Length          0009 (9)\n-03C276 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C276: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C29F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C2A1   Length              0005 (5)\n-03C2A3   Flags               01 (1) 'Modification'\n-03C2A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C2A8 LOCAL HEADER #134     04034B50 (67324752)\n-03C2AC Extract Zip Spec      14 (20) '2.0'\n-03C2AD Extract OS            00 (0) 'MS-DOS'\n-03C2AE General Purpose Flag  0000 (0)\n-03C2B0 Compression Method    0000 (0) 'Stored'\n-03C2B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C2B6 CRC                   00000000 (0)\n-03C2BA Compressed Size       00000000 (0)\n-03C2BE Uncompressed Size     00000000 (0)\n-03C2C2 Filename Length       005D (93)\n-03C2C4 Extra Length          0009 (9)\n-03C2C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C2C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C323 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C325   Length              0005 (5)\n-03C327   Flags               01 (1) 'Modification'\n-03C328   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C32C LOCAL HEADER #135     04034B50 (67324752)\n-03C330 Extract Zip Spec      14 (20) '2.0'\n-03C331 Extract OS            00 (0) 'MS-DOS'\n-03C332 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03C334 Compression Method    0000 (0) 'Stored'\n-03C336 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C33A CRC                   00000000 (0)\n-03C33E Compressed Size       00000000 (0)\n-03C342 Uncompressed Size     00000000 (0)\n-03C346 Filename Length       0073 (115)\n-03C348 Extra Length          0009 (9)\n-03C34A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C34A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C3BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C3BF   Length              0005 (5)\n-03C3C1   Flags               01 (1) 'Modification'\n-03C3C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03C3C6 PAYLOAD\n-\n-03CDA6 DATA DESCRIPTOR       08074B50 (134695760)\n-03CDAA CRC                   6A45582D (1782929453)\n-03CDAE Compressed Size       000009E0 (2528)\n-03CDB2 Uncompressed Size     000009E0 (2528)\n-\n-03CDB6 LOCAL HEADER #136     04034B50 (67324752)\n-03CDBA Extract Zip Spec      14 (20) '2.0'\n-03CDBB Extract OS            00 (0) 'MS-DOS'\n-03CDBC General Purpose Flag  0000 (0)\n-03CDBE Compression Method    0000 (0) 'Stored'\n-03CDC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CDC4 CRC                   00000000 (0)\n-03CDC8 Compressed Size       00000000 (0)\n-03CDCC Uncompressed Size     00000000 (0)\n-03CDD0 Filename Length       005F (95)\n-03CDD2 Extra Length          0009 (9)\n-03CDD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CDD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CE33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CE35   Length              0005 (5)\n-03CE37   Flags               01 (1) 'Modification'\n-03CE38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03CE3C LOCAL HEADER #137     04034B50 (67324752)\n-03CE40 Extract Zip Spec      14 (20) '2.0'\n-03CE41 Extract OS            00 (0) 'MS-DOS'\n-03CE42 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03CE44 Compression Method    0000 (0) 'Stored'\n-03CE46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CE4A CRC                   00000000 (0)\n-03CE4E Compressed Size       00000000 (0)\n-03CE52 Uncompressed Size     00000000 (0)\n-03CE56 Filename Length       0075 (117)\n-03CE58 Extra Length          0009 (9)\n-03CE5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CE5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CECF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CED1   Length              0005 (5)\n-03CED3   Flags               01 (1) 'Modification'\n-03CED4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03CED8 PAYLOAD\n-\n-03DA68 DATA DESCRIPTOR       08074B50 (134695760)\n-03DA6C CRC                   4731534C (1194414924)\n-03DA70 Compressed Size       00000B90 (2960)\n-03DA74 Uncompressed Size     00000B90 (2960)\n-\n-03DA78 LOCAL HEADER #138     04034B50 (67324752)\n-03DA7C Extract Zip Spec      14 (20) '2.0'\n-03DA7D Extract OS            00 (0) 'MS-DOS'\n-03DA7E General Purpose Flag  0000 (0)\n-03DA80 Compression Method    0000 (0) 'Stored'\n-03DA82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DA86 CRC                   00000000 (0)\n-03DA8A Compressed Size       00000000 (0)\n-03DA8E Uncompressed Size     00000000 (0)\n-03DA92 Filename Length       005E (94)\n-03DA94 Extra Length          0009 (9)\n-03DA96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DA96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DAF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DAF6   Length              0005 (5)\n-03DAF8   Flags               01 (1) 'Modification'\n-03DAF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03DAFD LOCAL HEADER #139     04034B50 (67324752)\n-03DB01 Extract Zip Spec      14 (20) '2.0'\n-03DB02 Extract OS            00 (0) 'MS-DOS'\n-03DB03 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03DB05 Compression Method    0000 (0) 'Stored'\n-03DB07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DB0B CRC                   00000000 (0)\n-03DB0F Compressed Size       00000000 (0)\n-03DB13 Uncompressed Size     00000000 (0)\n-03DB17 Filename Length       0074 (116)\n-03DB19 Extra Length          0009 (9)\n-03DB1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DB1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DB8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DB91   Length              0005 (5)\n-03DB93   Flags               01 (1) 'Modification'\n-03DB94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03DB98 PAYLOAD\n-\n-03E615 DATA DESCRIPTOR       08074B50 (134695760)\n-03E619 CRC                   CEBA8B64 (3468331876)\n-03E61D Compressed Size       00000A7D (2685)\n-03E621 Uncompressed Size     00000A7D (2685)\n-\n-03E625 LOCAL HEADER #140     04034B50 (67324752)\n-03E629 Extract Zip Spec      14 (20) '2.0'\n-03E62A Extract OS            00 (0) 'MS-DOS'\n-03E62B General Purpose Flag  0000 (0)\n-03E62D Compression Method    0000 (0) 'Stored'\n-03E62F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E633 CRC                   00000000 (0)\n-03E637 Compressed Size       00000000 (0)\n-03E63B Uncompressed Size     00000000 (0)\n-03E63F Filename Length       005D (93)\n-03E641 Extra Length          0009 (9)\n-03E643 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E643: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E6A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E6A2   Length              0005 (5)\n-03E6A4   Flags               01 (1) 'Modification'\n-03E6A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03E6A9 LOCAL HEADER #141     04034B50 (67324752)\n-03E6AD Extract Zip Spec      14 (20) '2.0'\n-03E6AE Extract OS            00 (0) 'MS-DOS'\n-03E6AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03E6B1 Compression Method    0000 (0) 'Stored'\n-03E6B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E6B7 CRC                   00000000 (0)\n-03E6BB Compressed Size       00000000 (0)\n-03E6BF Uncompressed Size     00000000 (0)\n-03E6C3 Filename Length       0073 (115)\n-03E6C5 Extra Length          0009 (9)\n-03E6C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E6C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E73A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E73C   Length              0005 (5)\n-03E73E   Flags               01 (1) 'Modification'\n-03E73F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03E743 PAYLOAD\n-\n-03F1D8 DATA DESCRIPTOR       08074B50 (134695760)\n-03F1DC CRC                   0DACEA84 (229436036)\n-03F1E0 Compressed Size       00000A95 (2709)\n-03F1E4 Uncompressed Size     00000A95 (2709)\n-\n-03F1E8 LOCAL HEADER #142     04034B50 (67324752)\n-03F1EC Extract Zip Spec      14 (20) '2.0'\n-03F1ED Extract OS            00 (0) 'MS-DOS'\n-03F1EE General Purpose Flag  0000 (0)\n-03F1F0 Compression Method    0000 (0) 'Stored'\n-03F1F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03F1F6 CRC                   00000000 (0)\n-03F1FA Compressed Size       00000000 (0)\n-03F1FE Uncompressed Size     00000000 (0)\n-03F202 Filename Length       005E (94)\n-03F204 Extra Length          0009 (9)\n-03F206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F264 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F266   Length              0005 (5)\n-03F268   Flags               01 (1) 'Modification'\n-03F269   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03F26D LOCAL HEADER #143     04034B50 (67324752)\n-03F271 Extract Zip Spec      14 (20) '2.0'\n-03F272 Extract OS            00 (0) 'MS-DOS'\n-03F273 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03F275 Compression Method    0000 (0) 'Stored'\n-03F277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03F27B CRC                   00000000 (0)\n-03F27F Compressed Size       00000000 (0)\n-03F283 Uncompressed Size     00000000 (0)\n-03F287 Filename Length       0074 (116)\n-03F289 Extra Length          0009 (9)\n-03F28B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F28B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F2FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F301   Length              0005 (5)\n-03F303   Flags               01 (1) 'Modification'\n-03F304   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03F308 PAYLOAD\n-\n-040525 DATA DESCRIPTOR       08074B50 (134695760)\n-040529 CRC                   2E84B239 (780448313)\n-04052D Compressed Size       0000121D (4637)\n-040531 Uncompressed Size     0000121D (4637)\n-\n-040535 LOCAL HEADER #144     04034B50 (67324752)\n-040539 Extract Zip Spec      14 (20) '2.0'\n-04053A Extract OS            00 (0) 'MS-DOS'\n-04053B General Purpose Flag  0000 (0)\n-04053D Compression Method    0000 (0) 'Stored'\n-04053F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040543 CRC                   00000000 (0)\n-040547 Compressed Size       00000000 (0)\n-04054B Uncompressed Size     00000000 (0)\n-04054F Filename Length       0078 (120)\n-040551 Extra Length          0009 (9)\n-040553 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40553: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0405CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0405CD   Length              0005 (5)\n-0405CF   Flags               01 (1) 'Modification'\n-0405D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0405D4 LOCAL HEADER #145     04034B50 (67324752)\n-0405D8 Extract Zip Spec      14 (20) '2.0'\n-0405D9 Extract OS            00 (0) 'MS-DOS'\n-0405DA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0405DC Compression Method    0000 (0) 'Stored'\n-0405DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0405E2 CRC                   00000000 (0)\n-0405E6 Compressed Size       00000000 (0)\n-0405EA Uncompressed Size     00000000 (0)\n-0405EE Filename Length       008E (142)\n-0405F0 Extra Length          0009 (9)\n-0405F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03C36D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C36F   Length              0005 (5)\n+03C371   Flags               01 (1) 'Modification'\n+03C372   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03C376 PAYLOAD\n+\n+03CAAC DATA DESCRIPTOR       08074B50 (134695760)\n+03CAB0 CRC                   333FC2BB (859816635)\n+03CAB4 Compressed Size       00000736 (1846)\n+03CAB8 Uncompressed Size     00000736 (1846)\n+\n+03CABC LOCAL HEADER #122     04034B50 (67324752)\n+03CAC0 Extract Zip Spec      14 (20) '2.0'\n+03CAC1 Extract OS            00 (0) 'MS-DOS'\n+03CAC2 General Purpose Flag  0000 (0)\n+03CAC4 Compression Method    0000 (0) 'Stored'\n+03CAC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CACA CRC                   00000000 (0)\n+03CACE Compressed Size       00000000 (0)\n+03CAD2 Uncompressed Size     00000000 (0)\n+03CAD6 Filename Length       0024 (36)\n+03CAD8 Extra Length          0009 (9)\n+03CADA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CADA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CAFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CB00   Length              0005 (5)\n+03CB02   Flags               01 (1) 'Modification'\n+03CB03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CB07 LOCAL HEADER #123     04034B50 (67324752)\n+03CB0B Extract Zip Spec      14 (20) '2.0'\n+03CB0C Extract OS            00 (0) 'MS-DOS'\n+03CB0D General Purpose Flag  0000 (0)\n+03CB0F Compression Method    0000 (0) 'Stored'\n+03CB11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CB15 CRC                   00000000 (0)\n+03CB19 Compressed Size       00000000 (0)\n+03CB1D Uncompressed Size     00000000 (0)\n+03CB21 Filename Length       002B (43)\n+03CB23 Extra Length          0009 (9)\n+03CB25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CB25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CB50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CB52   Length              0005 (5)\n+03CB54   Flags               01 (1) 'Modification'\n+03CB55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CB59 LOCAL HEADER #124     04034B50 (67324752)\n+03CB5D Extract Zip Spec      14 (20) '2.0'\n+03CB5E Extract OS            00 (0) 'MS-DOS'\n+03CB5F General Purpose Flag  0000 (0)\n+03CB61 Compression Method    0000 (0) 'Stored'\n+03CB63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CB67 CRC                   00000000 (0)\n+03CB6B Compressed Size       00000000 (0)\n+03CB6F Uncompressed Size     00000000 (0)\n+03CB73 Filename Length       0058 (88)\n+03CB75 Extra Length          0009 (9)\n+03CB77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CB77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CBCF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CBD1   Length              0005 (5)\n+03CBD3   Flags               01 (1) 'Modification'\n+03CBD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CBD8 LOCAL HEADER #125     04034B50 (67324752)\n+03CBDC Extract Zip Spec      14 (20) '2.0'\n+03CBDD Extract OS            00 (0) 'MS-DOS'\n+03CBDE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03CBE0 Compression Method    0000 (0) 'Stored'\n+03CBE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CBE6 CRC                   00000000 (0)\n+03CBEA Compressed Size       00000000 (0)\n+03CBEE Uncompressed Size     00000000 (0)\n+03CBF2 Filename Length       006E (110)\n+03CBF4 Extra Length          0009 (9)\n+03CBF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CBF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CC64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CC66   Length              0005 (5)\n+03CC68   Flags               01 (1) 'Modification'\n+03CC69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03CC6D PAYLOAD\n+\n+03D63A DATA DESCRIPTOR       08074B50 (134695760)\n+03D63E CRC                   10CC5E74 (281828980)\n+03D642 Compressed Size       000009CD (2509)\n+03D646 Uncompressed Size     000009CD (2509)\n+\n+03D64A LOCAL HEADER #126     04034B50 (67324752)\n+03D64E Extract Zip Spec      14 (20) '2.0'\n+03D64F Extract OS            00 (0) 'MS-DOS'\n+03D650 General Purpose Flag  0000 (0)\n+03D652 Compression Method    0000 (0) 'Stored'\n+03D654 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D658 CRC                   00000000 (0)\n+03D65C Compressed Size       00000000 (0)\n+03D660 Uncompressed Size     00000000 (0)\n+03D664 Filename Length       0058 (88)\n+03D666 Extra Length          0009 (9)\n+03D668 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D668: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D6C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D6C2   Length              0005 (5)\n+03D6C4   Flags               01 (1) 'Modification'\n+03D6C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D6C9 LOCAL HEADER #127     04034B50 (67324752)\n+03D6CD Extract Zip Spec      14 (20) '2.0'\n+03D6CE Extract OS            00 (0) 'MS-DOS'\n+03D6CF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03D6D1 Compression Method    0000 (0) 'Stored'\n+03D6D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D6D7 CRC                   00000000 (0)\n+03D6DB Compressed Size       00000000 (0)\n+03D6DF Uncompressed Size     00000000 (0)\n+03D6E3 Filename Length       006E (110)\n+03D6E5 Extra Length          0009 (9)\n+03D6E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D6E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D755 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D757   Length              0005 (5)\n+03D759   Flags               01 (1) 'Modification'\n+03D75A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03D75E PAYLOAD\n+\n+03E0FE DATA DESCRIPTOR       08074B50 (134695760)\n+03E102 CRC                   5F6BF872 (1600911474)\n+03E106 Compressed Size       000009A0 (2464)\n+03E10A Uncompressed Size     000009A0 (2464)\n+\n+03E10E LOCAL HEADER #128     04034B50 (67324752)\n+03E112 Extract Zip Spec      14 (20) '2.0'\n+03E113 Extract OS            00 (0) 'MS-DOS'\n+03E114 General Purpose Flag  0000 (0)\n+03E116 Compression Method    0000 (0) 'Stored'\n+03E118 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E11C CRC                   00000000 (0)\n+03E120 Compressed Size       00000000 (0)\n+03E124 Uncompressed Size     00000000 (0)\n+03E128 Filename Length       0023 (35)\n+03E12A Extra Length          0009 (9)\n+03E12C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E12C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E14F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E151   Length              0005 (5)\n+03E153   Flags               01 (1) 'Modification'\n+03E154   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03E158 LOCAL HEADER #129     04034B50 (67324752)\n+03E15C Extract Zip Spec      14 (20) '2.0'\n+03E15D Extract OS            00 (0) 'MS-DOS'\n+03E15E General Purpose Flag  0000 (0)\n+03E160 Compression Method    0000 (0) 'Stored'\n+03E162 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E166 CRC                   00000000 (0)\n+03E16A Compressed Size       00000000 (0)\n+03E16E Uncompressed Size     00000000 (0)\n+03E172 Filename Length       002A (42)\n+03E174 Extra Length          0009 (9)\n+03E176 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E176: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E1A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E1A2   Length              0005 (5)\n+03E1A4   Flags               01 (1) 'Modification'\n+03E1A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03E1A9 LOCAL HEADER #130     04034B50 (67324752)\n+03E1AD Extract Zip Spec      14 (20) '2.0'\n+03E1AE Extract OS            00 (0) 'MS-DOS'\n+03E1AF General Purpose Flag  0000 (0)\n+03E1B1 Compression Method    0000 (0) 'Stored'\n+03E1B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E1B7 CRC                   00000000 (0)\n+03E1BB Compressed Size       00000000 (0)\n+03E1BF Uncompressed Size     00000000 (0)\n+03E1C3 Filename Length       0054 (84)\n+03E1C5 Extra Length          0009 (9)\n+03E1C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E1C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E21B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E21D   Length              0005 (5)\n+03E21F   Flags               01 (1) 'Modification'\n+03E220   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03E224 LOCAL HEADER #131     04034B50 (67324752)\n+03E228 Extract Zip Spec      14 (20) '2.0'\n+03E229 Extract OS            00 (0) 'MS-DOS'\n+03E22A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03E22C Compression Method    0000 (0) 'Stored'\n+03E22E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E232 CRC                   00000000 (0)\n+03E236 Compressed Size       00000000 (0)\n+03E23A Uncompressed Size     00000000 (0)\n+03E23E Filename Length       006A (106)\n+03E240 Extra Length          0009 (9)\n+03E242 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E242: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E2AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E2AE   Length              0005 (5)\n+03E2B0   Flags               01 (1) 'Modification'\n+03E2B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03E2B5 PAYLOAD\n+\n+03F3EA DATA DESCRIPTOR       08074B50 (134695760)\n+03F3EE CRC                   456B0BC9 (1164643273)\n+03F3F2 Compressed Size       00001135 (4405)\n+03F3F6 Uncompressed Size     00001135 (4405)\n+\n+03F3FA LOCAL HEADER #132     04034B50 (67324752)\n+03F3FE Extract Zip Spec      14 (20) '2.0'\n+03F3FF Extract OS            00 (0) 'MS-DOS'\n+03F400 General Purpose Flag  0000 (0)\n+03F402 Compression Method    0000 (0) 'Stored'\n+03F404 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F408 CRC                   00000000 (0)\n+03F40C Compressed Size       00000000 (0)\n+03F410 Uncompressed Size     00000000 (0)\n+03F414 Filename Length       0022 (34)\n+03F416 Extra Length          0009 (9)\n+03F418 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F418: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F43A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F43C   Length              0005 (5)\n+03F43E   Flags               01 (1) 'Modification'\n+03F43F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03F443 LOCAL HEADER #133     04034B50 (67324752)\n+03F447 Extract Zip Spec      14 (20) '2.0'\n+03F448 Extract OS            00 (0) 'MS-DOS'\n+03F449 General Purpose Flag  0000 (0)\n+03F44B Compression Method    0000 (0) 'Stored'\n+03F44D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F451 CRC                   00000000 (0)\n+03F455 Compressed Size       00000000 (0)\n+03F459 Uncompressed Size     00000000 (0)\n+03F45D Filename Length       0029 (41)\n+03F45F Extra Length          0009 (9)\n+03F461 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F461: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F48A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F48C   Length              0005 (5)\n+03F48E   Flags               01 (1) 'Modification'\n+03F48F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03F493 LOCAL HEADER #134     04034B50 (67324752)\n+03F497 Extract Zip Spec      14 (20) '2.0'\n+03F498 Extract OS            00 (0) 'MS-DOS'\n+03F499 General Purpose Flag  0000 (0)\n+03F49B Compression Method    0000 (0) 'Stored'\n+03F49D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F4A1 CRC                   00000000 (0)\n+03F4A5 Compressed Size       00000000 (0)\n+03F4A9 Uncompressed Size     00000000 (0)\n+03F4AD Filename Length       005D (93)\n+03F4AF Extra Length          0009 (9)\n+03F4B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F4B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F50E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F510   Length              0005 (5)\n+03F512   Flags               01 (1) 'Modification'\n+03F513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03F517 LOCAL HEADER #135     04034B50 (67324752)\n+03F51B Extract Zip Spec      14 (20) '2.0'\n+03F51C Extract OS            00 (0) 'MS-DOS'\n+03F51D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03F51F Compression Method    0000 (0) 'Stored'\n+03F521 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F525 CRC                   00000000 (0)\n+03F529 Compressed Size       00000000 (0)\n+03F52D Uncompressed Size     00000000 (0)\n+03F531 Filename Length       0073 (115)\n+03F533 Extra Length          0009 (9)\n+03F535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F5A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F5AA   Length              0005 (5)\n+03F5AC   Flags               01 (1) 'Modification'\n+03F5AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03F5B1 PAYLOAD\n+\n+03FF91 DATA DESCRIPTOR       08074B50 (134695760)\n+03FF95 CRC                   6A45582D (1782929453)\n+03FF99 Compressed Size       000009E0 (2528)\n+03FF9D Uncompressed Size     000009E0 (2528)\n+\n+03FFA1 LOCAL HEADER #136     04034B50 (67324752)\n+03FFA5 Extract Zip Spec      14 (20) '2.0'\n+03FFA6 Extract OS            00 (0) 'MS-DOS'\n+03FFA7 General Purpose Flag  0000 (0)\n+03FFA9 Compression Method    0000 (0) 'Stored'\n+03FFAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03FFAF CRC                   00000000 (0)\n+03FFB3 Compressed Size       00000000 (0)\n+03FFB7 Uncompressed Size     00000000 (0)\n+03FFBB Filename Length       005F (95)\n+03FFBD Extra Length          0009 (9)\n+03FFBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FFBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04001E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040020   Length              0005 (5)\n+040022   Flags               01 (1) 'Modification'\n+040023   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040027 LOCAL HEADER #137     04034B50 (67324752)\n+04002B Extract Zip Spec      14 (20) '2.0'\n+04002C Extract OS            00 (0) 'MS-DOS'\n+04002D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04002F Compression Method    0000 (0) 'Stored'\n+040031 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040035 CRC                   00000000 (0)\n+040039 Compressed Size       00000000 (0)\n+04003D Uncompressed Size     00000000 (0)\n+040041 Filename Length       0075 (117)\n+040043 Extra Length          0009 (9)\n+040045 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40045: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0400BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0400BC   Length              0005 (5)\n+0400BE   Flags               01 (1) 'Modification'\n+0400BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0400C3 PAYLOAD\n+\n+040C53 DATA DESCRIPTOR       08074B50 (134695760)\n+040C57 CRC                   4731534C (1194414924)\n+040C5B Compressed Size       00000B90 (2960)\n+040C5F Uncompressed Size     00000B90 (2960)\n+\n+040C63 LOCAL HEADER #138     04034B50 (67324752)\n+040C67 Extract Zip Spec      14 (20) '2.0'\n+040C68 Extract OS            00 (0) 'MS-DOS'\n+040C69 General Purpose Flag  0000 (0)\n+040C6B Compression Method    0000 (0) 'Stored'\n+040C6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040C71 CRC                   00000000 (0)\n+040C75 Compressed Size       00000000 (0)\n+040C79 Uncompressed Size     00000000 (0)\n+040C7D Filename Length       005E (94)\n+040C7F Extra Length          0009 (9)\n+040C81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40C81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040CDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040CE1   Length              0005 (5)\n+040CE3   Flags               01 (1) 'Modification'\n+040CE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040CE8 LOCAL HEADER #139     04034B50 (67324752)\n+040CEC Extract Zip Spec      14 (20) '2.0'\n+040CED Extract OS            00 (0) 'MS-DOS'\n+040CEE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+040CF0 Compression Method    0000 (0) 'Stored'\n+040CF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040CF6 CRC                   00000000 (0)\n+040CFA Compressed Size       00000000 (0)\n+040CFE Uncompressed Size     00000000 (0)\n+040D02 Filename Length       0074 (116)\n+040D04 Extra Length          0009 (9)\n+040D06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40D06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040D7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040D7C   Length              0005 (5)\n+040D7E   Flags               01 (1) 'Modification'\n+040D7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+040D83 PAYLOAD\n+\n+041800 DATA DESCRIPTOR       08074B50 (134695760)\n+041804 CRC                   CEBA8B64 (3468331876)\n+041808 Compressed Size       00000A7D (2685)\n+04180C Uncompressed Size     00000A7D (2685)\n+\n+041810 LOCAL HEADER #140     04034B50 (67324752)\n+041814 Extract Zip Spec      14 (20) '2.0'\n+041815 Extract OS            00 (0) 'MS-DOS'\n+041816 General Purpose Flag  0000 (0)\n+041818 Compression Method    0000 (0) 'Stored'\n+04181A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04181E CRC                   00000000 (0)\n+041822 Compressed Size       00000000 (0)\n+041826 Uncompressed Size     00000000 (0)\n+04182A Filename Length       005D (93)\n+04182C Extra Length          0009 (9)\n+04182E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4182E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04188B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04188D   Length              0005 (5)\n+04188F   Flags               01 (1) 'Modification'\n+041890   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+041894 LOCAL HEADER #141     04034B50 (67324752)\n+041898 Extract Zip Spec      14 (20) '2.0'\n+041899 Extract OS            00 (0) 'MS-DOS'\n+04189A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04189C Compression Method    0000 (0) 'Stored'\n+04189E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0418A2 CRC                   00000000 (0)\n+0418A6 Compressed Size       00000000 (0)\n+0418AA Uncompressed Size     00000000 (0)\n+0418AE Filename Length       0073 (115)\n+0418B0 Extra Length          0009 (9)\n+0418B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x418B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+041925 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041927   Length              0005 (5)\n+041929   Flags               01 (1) 'Modification'\n+04192A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04192E PAYLOAD\n+\n+0423C3 DATA DESCRIPTOR       08074B50 (134695760)\n+0423C7 CRC                   0DACEA84 (229436036)\n+0423CB Compressed Size       00000A95 (2709)\n+0423CF Uncompressed Size     00000A95 (2709)\n+\n+0423D3 LOCAL HEADER #142     04034B50 (67324752)\n+0423D7 Extract Zip Spec      14 (20) '2.0'\n+0423D8 Extract OS            00 (0) 'MS-DOS'\n+0423D9 General Purpose Flag  0000 (0)\n+0423DB Compression Method    0000 (0) 'Stored'\n+0423DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0423E1 CRC                   00000000 (0)\n+0423E5 Compressed Size       00000000 (0)\n+0423E9 Uncompressed Size     00000000 (0)\n+0423ED Filename Length       005E (94)\n+0423EF Extra Length          0009 (9)\n+0423F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x423F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04244F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042451   Length              0005 (5)\n+042453   Flags               01 (1) 'Modification'\n+042454   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+042458 LOCAL HEADER #143     04034B50 (67324752)\n+04245C Extract Zip Spec      14 (20) '2.0'\n+04245D Extract OS            00 (0) 'MS-DOS'\n+04245E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+042460 Compression Method    0000 (0) 'Stored'\n+042462 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042466 CRC                   00000000 (0)\n+04246A Compressed Size       00000000 (0)\n+04246E Uncompressed Size     00000000 (0)\n+042472 Filename Length       0074 (116)\n+042474 Extra Length          0009 (9)\n+042476 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42476: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0424EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0424EC   Length              0005 (5)\n+0424EE   Flags               01 (1) 'Modification'\n+0424EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0424F3 PAYLOAD\n+\n+043710 DATA DESCRIPTOR       08074B50 (134695760)\n+043714 CRC                   2E84B239 (780448313)\n+043718 Compressed Size       0000121D (4637)\n+04371C Uncompressed Size     0000121D (4637)\n+\n+043720 LOCAL HEADER #144     04034B50 (67324752)\n+043724 Extract Zip Spec      14 (20) '2.0'\n+043725 Extract OS            00 (0) 'MS-DOS'\n+043726 General Purpose Flag  0000 (0)\n+043728 Compression Method    0000 (0) 'Stored'\n+04372A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04372E CRC                   00000000 (0)\n+043732 Compressed Size       00000000 (0)\n+043736 Uncompressed Size     00000000 (0)\n+04373A Filename Length       0078 (120)\n+04373C Extra Length          0009 (9)\n+04373E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4373E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0437B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0437B8   Length              0005 (5)\n+0437BA   Flags               01 (1) 'Modification'\n+0437BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0437BF LOCAL HEADER #145     04034B50 (67324752)\n+0437C3 Extract Zip Spec      14 (20) '2.0'\n+0437C4 Extract OS            00 (0) 'MS-DOS'\n+0437C5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0437C7 Compression Method    0000 (0) 'Stored'\n+0437C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0437CD CRC                   00000000 (0)\n+0437D1 Compressed Size       00000000 (0)\n+0437D5 Uncompressed Size     00000000 (0)\n+0437D9 Filename Length       008E (142)\n+0437DB Extra Length          0009 (9)\n+0437DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x405F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x437DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-040680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-040682   Length              0005 (5)\n-040684   Flags               01 (1) 'Modification'\n-040685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-040689 PAYLOAD\n-\n-040D84 DATA DESCRIPTOR       08074B50 (134695760)\n-040D88 CRC                   10E7267F (283584127)\n-040D8C Compressed Size       000006FB (1787)\n-040D90 Uncompressed Size     000006FB (1787)\n-\n-040D94 LOCAL HEADER #146     04034B50 (67324752)\n-040D98 Extract Zip Spec      14 (20) '2.0'\n-040D99 Extract OS            00 (0) 'MS-DOS'\n-040D9A General Purpose Flag  0000 (0)\n-040D9C Compression Method    0000 (0) 'Stored'\n-040D9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040DA2 CRC                   00000000 (0)\n-040DA6 Compressed Size       00000000 (0)\n-040DAA Uncompressed Size     00000000 (0)\n-040DAE Filename Length       0079 (121)\n-040DB0 Extra Length          0009 (9)\n-040DB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40DB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-040E2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-040E2D   Length              0005 (5)\n-040E2F   Flags               01 (1) 'Modification'\n-040E30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-040E34 LOCAL HEADER #147     04034B50 (67324752)\n-040E38 Extract Zip Spec      14 (20) '2.0'\n-040E39 Extract OS            00 (0) 'MS-DOS'\n-040E3A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-040E3C Compression Method    0000 (0) 'Stored'\n-040E3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040E42 CRC                   00000000 (0)\n-040E46 Compressed Size       00000000 (0)\n-040E4A Uncompressed Size     00000000 (0)\n-040E4E Filename Length       008F (143)\n-040E50 Extra Length          0009 (9)\n-040E52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04386B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04386D   Length              0005 (5)\n+04386F   Flags               01 (1) 'Modification'\n+043870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+043874 PAYLOAD\n+\n+043F6F DATA DESCRIPTOR       08074B50 (134695760)\n+043F73 CRC                   10E7267F (283584127)\n+043F77 Compressed Size       000006FB (1787)\n+043F7B Uncompressed Size     000006FB (1787)\n+\n+043F7F LOCAL HEADER #146     04034B50 (67324752)\n+043F83 Extract Zip Spec      14 (20) '2.0'\n+043F84 Extract OS            00 (0) 'MS-DOS'\n+043F85 General Purpose Flag  0000 (0)\n+043F87 Compression Method    0000 (0) 'Stored'\n+043F89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+043F8D CRC                   00000000 (0)\n+043F91 Compressed Size       00000000 (0)\n+043F95 Uncompressed Size     00000000 (0)\n+043F99 Filename Length       0079 (121)\n+043F9B Extra Length          0009 (9)\n+043F9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43F9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044018   Length              0005 (5)\n+04401A   Flags               01 (1) 'Modification'\n+04401B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04401F LOCAL HEADER #147     04034B50 (67324752)\n+044023 Extract Zip Spec      14 (20) '2.0'\n+044024 Extract OS            00 (0) 'MS-DOS'\n+044025 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+044027 Compression Method    0000 (0) 'Stored'\n+044029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04402D CRC                   00000000 (0)\n+044031 Compressed Size       00000000 (0)\n+044035 Uncompressed Size     00000000 (0)\n+044039 Filename Length       008F (143)\n+04403B Extra Length          0009 (9)\n+04403D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x40E52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4403D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-040EE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-040EE3   Length              0005 (5)\n-040EE5   Flags               01 (1) 'Modification'\n-040EE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-040EEA PAYLOAD\n-\n-0415E9 DATA DESCRIPTOR       08074B50 (134695760)\n-0415ED CRC                   24E47A3B (618953275)\n-0415F1 Compressed Size       000006FF (1791)\n-0415F5 Uncompressed Size     000006FF (1791)\n-\n-0415F9 LOCAL HEADER #148     04034B50 (67324752)\n-0415FD Extract Zip Spec      14 (20) '2.0'\n-0415FE Extract OS            00 (0) 'MS-DOS'\n-0415FF General Purpose Flag  0000 (0)\n-041601 Compression Method    0000 (0) 'Stored'\n-041603 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-041607 CRC                   00000000 (0)\n-04160B Compressed Size       00000000 (0)\n-04160F Uncompressed Size     00000000 (0)\n-041613 Filename Length       0074 (116)\n-041615 Extra Length          0009 (9)\n-041617 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x41617: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04168B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04168D   Length              0005 (5)\n-04168F   Flags               01 (1) 'Modification'\n-041690   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-041694 LOCAL HEADER #149     04034B50 (67324752)\n-041698 Extract Zip Spec      14 (20) '2.0'\n-041699 Extract OS            00 (0) 'MS-DOS'\n-04169A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04169C Compression Method    0000 (0) 'Stored'\n-04169E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0416A2 CRC                   00000000 (0)\n-0416A6 Compressed Size       00000000 (0)\n-0416AA Uncompressed Size     00000000 (0)\n-0416AE Filename Length       008A (138)\n-0416B0 Extra Length          0009 (9)\n-0416B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0440CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0440CE   Length              0005 (5)\n+0440D0   Flags               01 (1) 'Modification'\n+0440D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0440D5 PAYLOAD\n+\n+0447D4 DATA DESCRIPTOR       08074B50 (134695760)\n+0447D8 CRC                   24E47A3B (618953275)\n+0447DC Compressed Size       000006FF (1791)\n+0447E0 Uncompressed Size     000006FF (1791)\n+\n+0447E4 LOCAL HEADER #148     04034B50 (67324752)\n+0447E8 Extract Zip Spec      14 (20) '2.0'\n+0447E9 Extract OS            00 (0) 'MS-DOS'\n+0447EA General Purpose Flag  0000 (0)\n+0447EC Compression Method    0000 (0) 'Stored'\n+0447EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0447F2 CRC                   00000000 (0)\n+0447F6 Compressed Size       00000000 (0)\n+0447FA Uncompressed Size     00000000 (0)\n+0447FE Filename Length       0074 (116)\n+044800 Extra Length          0009 (9)\n+044802 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44802: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044876 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044878   Length              0005 (5)\n+04487A   Flags               01 (1) 'Modification'\n+04487B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04487F LOCAL HEADER #149     04034B50 (67324752)\n+044883 Extract Zip Spec      14 (20) '2.0'\n+044884 Extract OS            00 (0) 'MS-DOS'\n+044885 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+044887 Compression Method    0000 (0) 'Stored'\n+044889 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04488D CRC                   00000000 (0)\n+044891 Compressed Size       00000000 (0)\n+044895 Uncompressed Size     00000000 (0)\n+044899 Filename Length       008A (138)\n+04489B Extra Length          0009 (9)\n+04489D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x416B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4489D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04173C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04173E   Length              0005 (5)\n-041740   Flags               01 (1) 'Modification'\n-041741   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-041745 PAYLOAD\n-\n-042AA9 DATA DESCRIPTOR       08074B50 (134695760)\n-042AAD CRC                   042BB565 (69973349)\n-042AB1 Compressed Size       00001364 (4964)\n-042AB5 Uncompressed Size     00001364 (4964)\n-\n-042AB9 LOCAL HEADER #150     04034B50 (67324752)\n-042ABD Extract Zip Spec      14 (20) '2.0'\n-042ABE Extract OS            00 (0) 'MS-DOS'\n-042ABF General Purpose Flag  0000 (0)\n-042AC1 Compression Method    0000 (0) 'Stored'\n-042AC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042AC7 CRC                   00000000 (0)\n-042ACB Compressed Size       00000000 (0)\n-042ACF Uncompressed Size     00000000 (0)\n-042AD3 Filename Length       0075 (117)\n-042AD5 Extra Length          0009 (9)\n-042AD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42AD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042B4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042B4E   Length              0005 (5)\n-042B50   Flags               01 (1) 'Modification'\n-042B51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-042B55 LOCAL HEADER #151     04034B50 (67324752)\n-042B59 Extract Zip Spec      14 (20) '2.0'\n-042B5A Extract OS            00 (0) 'MS-DOS'\n-042B5B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-042B5D Compression Method    0000 (0) 'Stored'\n-042B5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042B63 CRC                   00000000 (0)\n-042B67 Compressed Size       00000000 (0)\n-042B6B Uncompressed Size     00000000 (0)\n-042B6F Filename Length       008B (139)\n-042B71 Extra Length          0009 (9)\n-042B73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+044927 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044929   Length              0005 (5)\n+04492B   Flags               01 (1) 'Modification'\n+04492C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+044930 PAYLOAD\n+\n+045C94 DATA DESCRIPTOR       08074B50 (134695760)\n+045C98 CRC                   042BB565 (69973349)\n+045C9C Compressed Size       00001364 (4964)\n+045CA0 Uncompressed Size     00001364 (4964)\n+\n+045CA4 LOCAL HEADER #150     04034B50 (67324752)\n+045CA8 Extract Zip Spec      14 (20) '2.0'\n+045CA9 Extract OS            00 (0) 'MS-DOS'\n+045CAA General Purpose Flag  0000 (0)\n+045CAC Compression Method    0000 (0) 'Stored'\n+045CAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045CB2 CRC                   00000000 (0)\n+045CB6 Compressed Size       00000000 (0)\n+045CBA Uncompressed Size     00000000 (0)\n+045CBE Filename Length       0075 (117)\n+045CC0 Extra Length          0009 (9)\n+045CC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x45CC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+045D37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045D39   Length              0005 (5)\n+045D3B   Flags               01 (1) 'Modification'\n+045D3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+045D40 LOCAL HEADER #151     04034B50 (67324752)\n+045D44 Extract Zip Spec      14 (20) '2.0'\n+045D45 Extract OS            00 (0) 'MS-DOS'\n+045D46 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+045D48 Compression Method    0000 (0) 'Stored'\n+045D4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045D4E CRC                   00000000 (0)\n+045D52 Compressed Size       00000000 (0)\n+045D56 Uncompressed Size     00000000 (0)\n+045D5A Filename Length       008B (139)\n+045D5C Extra Length          0009 (9)\n+045D5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x42B73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45D5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-042BFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042C00   Length              0005 (5)\n-042C02   Flags               01 (1) 'Modification'\n-042C03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042C07 PAYLOAD\n-\n-043FC7 DATA DESCRIPTOR       08074B50 (134695760)\n-043FCB CRC                   7A63232B (2053317419)\n-043FCF Compressed Size       000013C0 (5056)\n-043FD3 Uncompressed Size     000013C0 (5056)\n-\n-043FD7 LOCAL HEADER #152     04034B50 (67324752)\n-043FDB Extract Zip Spec      14 (20) '2.0'\n-043FDC Extract OS            00 (0) 'MS-DOS'\n-043FDD General Purpose Flag  0000 (0)\n-043FDF Compression Method    0000 (0) 'Stored'\n-043FE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043FE5 CRC                   00000000 (0)\n-043FE9 Compressed Size       00000000 (0)\n-043FED Uncompressed Size     00000000 (0)\n-043FF1 Filename Length       0026 (38)\n-043FF3 Extra Length          0009 (9)\n-043FF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43FF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04401B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04401D   Length              0005 (5)\n-04401F   Flags               01 (1) 'Modification'\n-044020   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044024 LOCAL HEADER #153     04034B50 (67324752)\n-044028 Extract Zip Spec      14 (20) '2.0'\n-044029 Extract OS            00 (0) 'MS-DOS'\n-04402A General Purpose Flag  0000 (0)\n-04402C Compression Method    0000 (0) 'Stored'\n-04402E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044032 CRC                   00000000 (0)\n-044036 Compressed Size       00000000 (0)\n-04403A Uncompressed Size     00000000 (0)\n-04403E Filename Length       002D (45)\n-044040 Extra Length          0009 (9)\n-044042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04406F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044071   Length              0005 (5)\n-044073   Flags               01 (1) 'Modification'\n-044074   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044078 LOCAL HEADER #154     04034B50 (67324752)\n-04407C Extract Zip Spec      14 (20) '2.0'\n-04407D Extract OS            00 (0) 'MS-DOS'\n-04407E General Purpose Flag  0000 (0)\n-044080 Compression Method    0000 (0) 'Stored'\n-044082 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044086 CRC                   00000000 (0)\n-04408A Compressed Size       00000000 (0)\n-04408E Uncompressed Size     00000000 (0)\n-044092 Filename Length       005E (94)\n-044094 Extra Length          0009 (9)\n-044096 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44096: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0440F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0440F6   Length              0005 (5)\n-0440F8   Flags               01 (1) 'Modification'\n-0440F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0440FD LOCAL HEADER #155     04034B50 (67324752)\n-044101 Extract Zip Spec      14 (20) '2.0'\n-044102 Extract OS            00 (0) 'MS-DOS'\n-044103 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-044105 Compression Method    0000 (0) 'Stored'\n-044107 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04410B CRC                   00000000 (0)\n-04410F Compressed Size       00000000 (0)\n-044113 Uncompressed Size     00000000 (0)\n-044117 Filename Length       0074 (116)\n-044119 Extra Length          0009 (9)\n-04411B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4411B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04418F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044191   Length              0005 (5)\n-044193   Flags               01 (1) 'Modification'\n-044194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-044198 PAYLOAD\n-\n-044AC6 DATA DESCRIPTOR       08074B50 (134695760)\n-044ACA CRC                   19888393 (428376979)\n-044ACE Compressed Size       0000092E (2350)\n-044AD2 Uncompressed Size     0000092E (2350)\n-\n-044AD6 LOCAL HEADER #156     04034B50 (67324752)\n-044ADA Extract Zip Spec      14 (20) '2.0'\n-044ADB Extract OS            00 (0) 'MS-DOS'\n-044ADC General Purpose Flag  0000 (0)\n-044ADE Compression Method    0000 (0) 'Stored'\n-044AE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044AE4 CRC                   00000000 (0)\n-044AE8 Compressed Size       00000000 (0)\n-044AEC Uncompressed Size     00000000 (0)\n-044AF0 Filename Length       0026 (38)\n-044AF2 Extra Length          0009 (9)\n-044AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044B1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044B1C   Length              0005 (5)\n-044B1E   Flags               01 (1) 'Modification'\n-044B1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044B23 LOCAL HEADER #157     04034B50 (67324752)\n-044B27 Extract Zip Spec      14 (20) '2.0'\n-044B28 Extract OS            00 (0) 'MS-DOS'\n-044B29 General Purpose Flag  0000 (0)\n-044B2B Compression Method    0000 (0) 'Stored'\n-044B2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044B31 CRC                   00000000 (0)\n-044B35 Compressed Size       00000000 (0)\n-044B39 Uncompressed Size     00000000 (0)\n-044B3D Filename Length       002D (45)\n-044B3F Extra Length          0009 (9)\n-044B41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44B41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044B6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044B70   Length              0005 (5)\n-044B72   Flags               01 (1) 'Modification'\n-044B73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044B77 LOCAL HEADER #158     04034B50 (67324752)\n-044B7B Extract Zip Spec      14 (20) '2.0'\n-044B7C Extract OS            00 (0) 'MS-DOS'\n-044B7D General Purpose Flag  0000 (0)\n-044B7F Compression Method    0000 (0) 'Stored'\n-044B81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044B85 CRC                   00000000 (0)\n-044B89 Compressed Size       00000000 (0)\n-044B8D Uncompressed Size     00000000 (0)\n-044B91 Filename Length       0064 (100)\n-044B93 Extra Length          0009 (9)\n-044B95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44B95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044BF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044BFB   Length              0005 (5)\n-044BFD   Flags               01 (1) 'Modification'\n-044BFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044C02 LOCAL HEADER #159     04034B50 (67324752)\n-044C06 Extract Zip Spec      14 (20) '2.0'\n-044C07 Extract OS            00 (0) 'MS-DOS'\n-044C08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-044C0A Compression Method    0000 (0) 'Stored'\n-044C0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044C10 CRC                   00000000 (0)\n-044C14 Compressed Size       00000000 (0)\n-044C18 Uncompressed Size     00000000 (0)\n-044C1C Filename Length       007A (122)\n-044C1E Extra Length          0009 (9)\n-044C20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44C20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044C9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044C9C   Length              0005 (5)\n-044C9E   Flags               01 (1) 'Modification'\n-044C9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-044CA3 PAYLOAD\n-\n-046D34 DATA DESCRIPTOR       08074B50 (134695760)\n-046D38 CRC                   8B1E3BB7 (2334014391)\n-046D3C Compressed Size       00002091 (8337)\n-046D40 Uncompressed Size     00002091 (8337)\n-\n-046D44 LOCAL HEADER #160     04034B50 (67324752)\n-046D48 Extract Zip Spec      14 (20) '2.0'\n-046D49 Extract OS            00 (0) 'MS-DOS'\n-046D4A General Purpose Flag  0000 (0)\n-046D4C Compression Method    0000 (0) 'Stored'\n-046D4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046D52 CRC                   00000000 (0)\n-046D56 Compressed Size       00000000 (0)\n-046D5A Uncompressed Size     00000000 (0)\n-046D5E Filename Length       0025 (37)\n-046D60 Extra Length          0009 (9)\n-046D62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46D62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046D87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046D89   Length              0005 (5)\n-046D8B   Flags               01 (1) 'Modification'\n-046D8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046D90 LOCAL HEADER #161     04034B50 (67324752)\n-046D94 Extract Zip Spec      14 (20) '2.0'\n-046D95 Extract OS            00 (0) 'MS-DOS'\n-046D96 General Purpose Flag  0000 (0)\n-046D98 Compression Method    0000 (0) 'Stored'\n-046D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046D9E CRC                   00000000 (0)\n-046DA2 Compressed Size       00000000 (0)\n-046DA6 Uncompressed Size     00000000 (0)\n-046DAA Filename Length       002C (44)\n-046DAC Extra Length          0009 (9)\n-046DAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46DAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046DDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046DDC   Length              0005 (5)\n-046DDE   Flags               01 (1) 'Modification'\n-046DDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046DE3 LOCAL HEADER #162     04034B50 (67324752)\n-046DE7 Extract Zip Spec      14 (20) '2.0'\n-046DE8 Extract OS            00 (0) 'MS-DOS'\n-046DE9 General Purpose Flag  0000 (0)\n-046DEB Compression Method    0000 (0) 'Stored'\n-046DED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046DF1 CRC                   00000000 (0)\n-046DF5 Compressed Size       00000000 (0)\n-046DF9 Uncompressed Size     00000000 (0)\n-046DFD Filename Length       0067 (103)\n-046DFF Extra Length          0009 (9)\n-046E01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46E01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046E68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046E6A   Length              0005 (5)\n-046E6C   Flags               01 (1) 'Modification'\n-046E6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046E71 LOCAL HEADER #163     04034B50 (67324752)\n-046E75 Extract Zip Spec      14 (20) '2.0'\n-046E76 Extract OS            00 (0) 'MS-DOS'\n-046E77 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-046E79 Compression Method    0000 (0) 'Stored'\n-046E7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046E7F CRC                   00000000 (0)\n-046E83 Compressed Size       00000000 (0)\n-046E87 Uncompressed Size     00000000 (0)\n-046E8B Filename Length       007D (125)\n-046E8D Extra Length          0009 (9)\n-046E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046F0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046F0E   Length              0005 (5)\n-046F10   Flags               01 (1) 'Modification'\n-046F11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-046F15 PAYLOAD\n-\n-048396 DATA DESCRIPTOR       08074B50 (134695760)\n-04839A CRC                   EAE74E6F (3941027439)\n-04839E Compressed Size       00001481 (5249)\n-0483A2 Uncompressed Size     00001481 (5249)\n-\n-0483A6 LOCAL HEADER #164     04034B50 (67324752)\n-0483AA Extract Zip Spec      14 (20) '2.0'\n-0483AB Extract OS            00 (0) 'MS-DOS'\n-0483AC General Purpose Flag  0000 (0)\n-0483AE Compression Method    0000 (0) 'Stored'\n-0483B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0483B4 CRC                   00000000 (0)\n-0483B8 Compressed Size       00000000 (0)\n-0483BC Uncompressed Size     00000000 (0)\n-0483C0 Filename Length       0057 (87)\n-0483C2 Extra Length          0009 (9)\n-0483C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x483C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04841B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04841D   Length              0005 (5)\n-04841F   Flags               01 (1) 'Modification'\n-048420   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-048424 LOCAL HEADER #165     04034B50 (67324752)\n-048428 Extract Zip Spec      14 (20) '2.0'\n-048429 Extract OS            00 (0) 'MS-DOS'\n-04842A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04842C Compression Method    0000 (0) 'Stored'\n-04842E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048432 CRC                   00000000 (0)\n-048436 Compressed Size       00000000 (0)\n-04843A Uncompressed Size     00000000 (0)\n-04843E Filename Length       006D (109)\n-048440 Extra Length          0009 (9)\n-048442 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48442: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0484AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0484B1   Length              0005 (5)\n-0484B3   Flags               01 (1) 'Modification'\n-0484B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0484B8 PAYLOAD\n-\n-04AA81 DATA DESCRIPTOR       08074B50 (134695760)\n-04AA85 CRC                   49F8AFD7 (1241034711)\n-04AA89 Compressed Size       000025C9 (9673)\n-04AA8D Uncompressed Size     000025C9 (9673)\n-\n-04AA91 LOCAL HEADER #166     04034B50 (67324752)\n-04AA95 Extract Zip Spec      14 (20) '2.0'\n-04AA96 Extract OS            00 (0) 'MS-DOS'\n-04AA97 General Purpose Flag  0000 (0)\n-04AA99 Compression Method    0000 (0) 'Stored'\n-04AA9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04AA9F CRC                   00000000 (0)\n-04AAA3 Compressed Size       00000000 (0)\n-04AAA7 Uncompressed Size     00000000 (0)\n-04AAAB Filename Length       0056 (86)\n-04AAAD Extra Length          0009 (9)\n-04AAAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4AAAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04AB05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04AB07   Length              0005 (5)\n-04AB09   Flags               01 (1) 'Modification'\n-04AB0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04AB0E LOCAL HEADER #167     04034B50 (67324752)\n-04AB12 Extract Zip Spec      14 (20) '2.0'\n-04AB13 Extract OS            00 (0) 'MS-DOS'\n-04AB14 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04AB16 Compression Method    0000 (0) 'Stored'\n-04AB18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04AB1C CRC                   00000000 (0)\n-04AB20 Compressed Size       00000000 (0)\n-04AB24 Uncompressed Size     00000000 (0)\n-04AB28 Filename Length       006C (108)\n-04AB2A Extra Length          0009 (9)\n-04AB2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4AB2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04AB98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04AB9A   Length              0005 (5)\n-04AB9C   Flags               01 (1) 'Modification'\n-04AB9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04ABA1 PAYLOAD\n-\n-04B9B1 DATA DESCRIPTOR       08074B50 (134695760)\n-04B9B5 CRC                   332580F8 (858095864)\n-04B9B9 Compressed Size       00000E10 (3600)\n-04B9BD Uncompressed Size     00000E10 (3600)\n-\n-04B9C1 LOCAL HEADER #168     04034B50 (67324752)\n-04B9C5 Extract Zip Spec      14 (20) '2.0'\n-04B9C6 Extract OS            00 (0) 'MS-DOS'\n-04B9C7 General Purpose Flag  0000 (0)\n-04B9C9 Compression Method    0000 (0) 'Stored'\n-04B9CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04B9CF CRC                   00000000 (0)\n-04B9D3 Compressed Size       00000000 (0)\n-04B9D7 Uncompressed Size     00000000 (0)\n-04B9DB Filename Length       002E (46)\n-04B9DD Extra Length          0009 (9)\n-04B9DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B9DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BA0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BA0F   Length              0005 (5)\n-04BA11   Flags               01 (1) 'Modification'\n-04BA12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BA16 LOCAL HEADER #169     04034B50 (67324752)\n-04BA1A Extract Zip Spec      14 (20) '2.0'\n-04BA1B Extract OS            00 (0) 'MS-DOS'\n-04BA1C General Purpose Flag  0000 (0)\n-04BA1E Compression Method    0000 (0) 'Stored'\n-04BA20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BA24 CRC                   00000000 (0)\n-04BA28 Compressed Size       00000000 (0)\n-04BA2C Uncompressed Size     00000000 (0)\n-04BA30 Filename Length       0035 (53)\n-04BA32 Extra Length          0009 (9)\n-04BA34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BA34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BA69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BA6B   Length              0005 (5)\n-04BA6D   Flags               01 (1) 'Modification'\n-04BA6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BA72 LOCAL HEADER #170     04034B50 (67324752)\n-04BA76 Extract Zip Spec      14 (20) '2.0'\n-04BA77 Extract OS            00 (0) 'MS-DOS'\n-04BA78 General Purpose Flag  0000 (0)\n-04BA7A Compression Method    0000 (0) 'Stored'\n-04BA7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BA80 CRC                   00000000 (0)\n-04BA84 Compressed Size       00000000 (0)\n-04BA88 Uncompressed Size     00000000 (0)\n-04BA8C Filename Length       0079 (121)\n-04BA8E Extra Length          0009 (9)\n-04BA90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BA90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BB09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BB0B   Length              0005 (5)\n-04BB0D   Flags               01 (1) 'Modification'\n-04BB0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BB12 LOCAL HEADER #171     04034B50 (67324752)\n-04BB16 Extract Zip Spec      14 (20) '2.0'\n-04BB17 Extract OS            00 (0) 'MS-DOS'\n-04BB18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04BB1A Compression Method    0000 (0) 'Stored'\n-04BB1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BB20 CRC                   00000000 (0)\n-04BB24 Compressed Size       00000000 (0)\n-04BB28 Uncompressed Size     00000000 (0)\n-04BB2C Filename Length       008F (143)\n-04BB2E Extra Length          0009 (9)\n-04BB30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+045DE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045DEB   Length              0005 (5)\n+045DED   Flags               01 (1) 'Modification'\n+045DEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+045DF2 PAYLOAD\n+\n+0471B2 DATA DESCRIPTOR       08074B50 (134695760)\n+0471B6 CRC                   7A63232B (2053317419)\n+0471BA Compressed Size       000013C0 (5056)\n+0471BE Uncompressed Size     000013C0 (5056)\n+\n+0471C2 LOCAL HEADER #152     04034B50 (67324752)\n+0471C6 Extract Zip Spec      14 (20) '2.0'\n+0471C7 Extract OS            00 (0) 'MS-DOS'\n+0471C8 General Purpose Flag  0000 (0)\n+0471CA Compression Method    0000 (0) 'Stored'\n+0471CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0471D0 CRC                   00000000 (0)\n+0471D4 Compressed Size       00000000 (0)\n+0471D8 Uncompressed Size     00000000 (0)\n+0471DC Filename Length       0026 (38)\n+0471DE Extra Length          0009 (9)\n+0471E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x471E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047208   Length              0005 (5)\n+04720A   Flags               01 (1) 'Modification'\n+04720B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04720F LOCAL HEADER #153     04034B50 (67324752)\n+047213 Extract Zip Spec      14 (20) '2.0'\n+047214 Extract OS            00 (0) 'MS-DOS'\n+047215 General Purpose Flag  0000 (0)\n+047217 Compression Method    0000 (0) 'Stored'\n+047219 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04721D CRC                   00000000 (0)\n+047221 Compressed Size       00000000 (0)\n+047225 Uncompressed Size     00000000 (0)\n+047229 Filename Length       002D (45)\n+04722B Extra Length          0009 (9)\n+04722D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4722D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04725A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04725C   Length              0005 (5)\n+04725E   Flags               01 (1) 'Modification'\n+04725F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+047263 LOCAL HEADER #154     04034B50 (67324752)\n+047267 Extract Zip Spec      14 (20) '2.0'\n+047268 Extract OS            00 (0) 'MS-DOS'\n+047269 General Purpose Flag  0000 (0)\n+04726B Compression Method    0000 (0) 'Stored'\n+04726D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047271 CRC                   00000000 (0)\n+047275 Compressed Size       00000000 (0)\n+047279 Uncompressed Size     00000000 (0)\n+04727D Filename Length       005E (94)\n+04727F Extra Length          0009 (9)\n+047281 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47281: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0472DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0472E1   Length              0005 (5)\n+0472E3   Flags               01 (1) 'Modification'\n+0472E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0472E8 LOCAL HEADER #155     04034B50 (67324752)\n+0472EC Extract Zip Spec      14 (20) '2.0'\n+0472ED Extract OS            00 (0) 'MS-DOS'\n+0472EE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0472F0 Compression Method    0000 (0) 'Stored'\n+0472F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0472F6 CRC                   00000000 (0)\n+0472FA Compressed Size       00000000 (0)\n+0472FE Uncompressed Size     00000000 (0)\n+047302 Filename Length       0074 (116)\n+047304 Extra Length          0009 (9)\n+047306 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47306: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04737A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04737C   Length              0005 (5)\n+04737E   Flags               01 (1) 'Modification'\n+04737F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+047383 PAYLOAD\n+\n+047CB1 DATA DESCRIPTOR       08074B50 (134695760)\n+047CB5 CRC                   19888393 (428376979)\n+047CB9 Compressed Size       0000092E (2350)\n+047CBD Uncompressed Size     0000092E (2350)\n+\n+047CC1 LOCAL HEADER #156     04034B50 (67324752)\n+047CC5 Extract Zip Spec      14 (20) '2.0'\n+047CC6 Extract OS            00 (0) 'MS-DOS'\n+047CC7 General Purpose Flag  0000 (0)\n+047CC9 Compression Method    0000 (0) 'Stored'\n+047CCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047CCF CRC                   00000000 (0)\n+047CD3 Compressed Size       00000000 (0)\n+047CD7 Uncompressed Size     00000000 (0)\n+047CDB Filename Length       0026 (38)\n+047CDD Extra Length          0009 (9)\n+047CDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47CDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047D05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047D07   Length              0005 (5)\n+047D09   Flags               01 (1) 'Modification'\n+047D0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+047D0E LOCAL HEADER #157     04034B50 (67324752)\n+047D12 Extract Zip Spec      14 (20) '2.0'\n+047D13 Extract OS            00 (0) 'MS-DOS'\n+047D14 General Purpose Flag  0000 (0)\n+047D16 Compression Method    0000 (0) 'Stored'\n+047D18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047D1C CRC                   00000000 (0)\n+047D20 Compressed Size       00000000 (0)\n+047D24 Uncompressed Size     00000000 (0)\n+047D28 Filename Length       002D (45)\n+047D2A Extra Length          0009 (9)\n+047D2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47D2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047D59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047D5B   Length              0005 (5)\n+047D5D   Flags               01 (1) 'Modification'\n+047D5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+047D62 LOCAL HEADER #158     04034B50 (67324752)\n+047D66 Extract Zip Spec      14 (20) '2.0'\n+047D67 Extract OS            00 (0) 'MS-DOS'\n+047D68 General Purpose Flag  0000 (0)\n+047D6A Compression Method    0000 (0) 'Stored'\n+047D6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047D70 CRC                   00000000 (0)\n+047D74 Compressed Size       00000000 (0)\n+047D78 Uncompressed Size     00000000 (0)\n+047D7C Filename Length       0064 (100)\n+047D7E Extra Length          0009 (9)\n+047D80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47D80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047DE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047DE6   Length              0005 (5)\n+047DE8   Flags               01 (1) 'Modification'\n+047DE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+047DED LOCAL HEADER #159     04034B50 (67324752)\n+047DF1 Extract Zip Spec      14 (20) '2.0'\n+047DF2 Extract OS            00 (0) 'MS-DOS'\n+047DF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+047DF5 Compression Method    0000 (0) 'Stored'\n+047DF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047DFB CRC                   00000000 (0)\n+047DFF Compressed Size       00000000 (0)\n+047E03 Uncompressed Size     00000000 (0)\n+047E07 Filename Length       007A (122)\n+047E09 Extra Length          0009 (9)\n+047E0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47E0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047E85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047E87   Length              0005 (5)\n+047E89   Flags               01 (1) 'Modification'\n+047E8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+047E8E PAYLOAD\n+\n+049F1F DATA DESCRIPTOR       08074B50 (134695760)\n+049F23 CRC                   8B1E3BB7 (2334014391)\n+049F27 Compressed Size       00002091 (8337)\n+049F2B Uncompressed Size     00002091 (8337)\n+\n+049F2F LOCAL HEADER #160     04034B50 (67324752)\n+049F33 Extract Zip Spec      14 (20) '2.0'\n+049F34 Extract OS            00 (0) 'MS-DOS'\n+049F35 General Purpose Flag  0000 (0)\n+049F37 Compression Method    0000 (0) 'Stored'\n+049F39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049F3D CRC                   00000000 (0)\n+049F41 Compressed Size       00000000 (0)\n+049F45 Uncompressed Size     00000000 (0)\n+049F49 Filename Length       0025 (37)\n+049F4B Extra Length          0009 (9)\n+049F4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49F4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+049F72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+049F74   Length              0005 (5)\n+049F76   Flags               01 (1) 'Modification'\n+049F77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+049F7B LOCAL HEADER #161     04034B50 (67324752)\n+049F7F Extract Zip Spec      14 (20) '2.0'\n+049F80 Extract OS            00 (0) 'MS-DOS'\n+049F81 General Purpose Flag  0000 (0)\n+049F83 Compression Method    0000 (0) 'Stored'\n+049F85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049F89 CRC                   00000000 (0)\n+049F8D Compressed Size       00000000 (0)\n+049F91 Uncompressed Size     00000000 (0)\n+049F95 Filename Length       002C (44)\n+049F97 Extra Length          0009 (9)\n+049F99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49F99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+049FC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+049FC7   Length              0005 (5)\n+049FC9   Flags               01 (1) 'Modification'\n+049FCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+049FCE LOCAL HEADER #162     04034B50 (67324752)\n+049FD2 Extract Zip Spec      14 (20) '2.0'\n+049FD3 Extract OS            00 (0) 'MS-DOS'\n+049FD4 General Purpose Flag  0000 (0)\n+049FD6 Compression Method    0000 (0) 'Stored'\n+049FD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049FDC CRC                   00000000 (0)\n+049FE0 Compressed Size       00000000 (0)\n+049FE4 Uncompressed Size     00000000 (0)\n+049FE8 Filename Length       0067 (103)\n+049FEA Extra Length          0009 (9)\n+049FEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49FEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A055   Length              0005 (5)\n+04A057   Flags               01 (1) 'Modification'\n+04A058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04A05C LOCAL HEADER #163     04034B50 (67324752)\n+04A060 Extract Zip Spec      14 (20) '2.0'\n+04A061 Extract OS            00 (0) 'MS-DOS'\n+04A062 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04A064 Compression Method    0000 (0) 'Stored'\n+04A066 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A06A CRC                   00000000 (0)\n+04A06E Compressed Size       00000000 (0)\n+04A072 Uncompressed Size     00000000 (0)\n+04A076 Filename Length       007D (125)\n+04A078 Extra Length          0009 (9)\n+04A07A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A07A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A0F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A0F9   Length              0005 (5)\n+04A0FB   Flags               01 (1) 'Modification'\n+04A0FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04A100 PAYLOAD\n+\n+04B581 DATA DESCRIPTOR       08074B50 (134695760)\n+04B585 CRC                   EAE74E6F (3941027439)\n+04B589 Compressed Size       00001481 (5249)\n+04B58D Uncompressed Size     00001481 (5249)\n+\n+04B591 LOCAL HEADER #164     04034B50 (67324752)\n+04B595 Extract Zip Spec      14 (20) '2.0'\n+04B596 Extract OS            00 (0) 'MS-DOS'\n+04B597 General Purpose Flag  0000 (0)\n+04B599 Compression Method    0000 (0) 'Stored'\n+04B59B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B59F CRC                   00000000 (0)\n+04B5A3 Compressed Size       00000000 (0)\n+04B5A7 Uncompressed Size     00000000 (0)\n+04B5AB Filename Length       0057 (87)\n+04B5AD Extra Length          0009 (9)\n+04B5AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B5AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B606 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B608   Length              0005 (5)\n+04B60A   Flags               01 (1) 'Modification'\n+04B60B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B60F LOCAL HEADER #165     04034B50 (67324752)\n+04B613 Extract Zip Spec      14 (20) '2.0'\n+04B614 Extract OS            00 (0) 'MS-DOS'\n+04B615 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04B617 Compression Method    0000 (0) 'Stored'\n+04B619 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B61D CRC                   00000000 (0)\n+04B621 Compressed Size       00000000 (0)\n+04B625 Uncompressed Size     00000000 (0)\n+04B629 Filename Length       006D (109)\n+04B62B Extra Length          0009 (9)\n+04B62D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B62D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B69A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B69C   Length              0005 (5)\n+04B69E   Flags               01 (1) 'Modification'\n+04B69F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04B6A3 PAYLOAD\n+\n+04DC6C DATA DESCRIPTOR       08074B50 (134695760)\n+04DC70 CRC                   49F8AFD7 (1241034711)\n+04DC74 Compressed Size       000025C9 (9673)\n+04DC78 Uncompressed Size     000025C9 (9673)\n+\n+04DC7C LOCAL HEADER #166     04034B50 (67324752)\n+04DC80 Extract Zip Spec      14 (20) '2.0'\n+04DC81 Extract OS            00 (0) 'MS-DOS'\n+04DC82 General Purpose Flag  0000 (0)\n+04DC84 Compression Method    0000 (0) 'Stored'\n+04DC86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DC8A CRC                   00000000 (0)\n+04DC8E Compressed Size       00000000 (0)\n+04DC92 Uncompressed Size     00000000 (0)\n+04DC96 Filename Length       0056 (86)\n+04DC98 Extra Length          0009 (9)\n+04DC9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DC9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DCF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DCF2   Length              0005 (5)\n+04DCF4   Flags               01 (1) 'Modification'\n+04DCF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04DCF9 LOCAL HEADER #167     04034B50 (67324752)\n+04DCFD Extract Zip Spec      14 (20) '2.0'\n+04DCFE Extract OS            00 (0) 'MS-DOS'\n+04DCFF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04DD01 Compression Method    0000 (0) 'Stored'\n+04DD03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DD07 CRC                   00000000 (0)\n+04DD0B Compressed Size       00000000 (0)\n+04DD0F Uncompressed Size     00000000 (0)\n+04DD13 Filename Length       006C (108)\n+04DD15 Extra Length          0009 (9)\n+04DD17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DD17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DD83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DD85   Length              0005 (5)\n+04DD87   Flags               01 (1) 'Modification'\n+04DD88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04DD8C PAYLOAD\n+\n+04EB9C DATA DESCRIPTOR       08074B50 (134695760)\n+04EBA0 CRC                   332580F8 (858095864)\n+04EBA4 Compressed Size       00000E10 (3600)\n+04EBA8 Uncompressed Size     00000E10 (3600)\n+\n+04EBAC LOCAL HEADER #168     04034B50 (67324752)\n+04EBB0 Extract Zip Spec      14 (20) '2.0'\n+04EBB1 Extract OS            00 (0) 'MS-DOS'\n+04EBB2 General Purpose Flag  0000 (0)\n+04EBB4 Compression Method    0000 (0) 'Stored'\n+04EBB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04EBBA CRC                   00000000 (0)\n+04EBBE Compressed Size       00000000 (0)\n+04EBC2 Uncompressed Size     00000000 (0)\n+04EBC6 Filename Length       002E (46)\n+04EBC8 Extra Length          0009 (9)\n+04EBCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4EBCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04EBF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04EBFA   Length              0005 (5)\n+04EBFC   Flags               01 (1) 'Modification'\n+04EBFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04EC01 LOCAL HEADER #169     04034B50 (67324752)\n+04EC05 Extract Zip Spec      14 (20) '2.0'\n+04EC06 Extract OS            00 (0) 'MS-DOS'\n+04EC07 General Purpose Flag  0000 (0)\n+04EC09 Compression Method    0000 (0) 'Stored'\n+04EC0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04EC0F CRC                   00000000 (0)\n+04EC13 Compressed Size       00000000 (0)\n+04EC17 Uncompressed Size     00000000 (0)\n+04EC1B Filename Length       0035 (53)\n+04EC1D Extra Length          0009 (9)\n+04EC1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4EC1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04EC54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04EC56   Length              0005 (5)\n+04EC58   Flags               01 (1) 'Modification'\n+04EC59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04EC5D LOCAL HEADER #170     04034B50 (67324752)\n+04EC61 Extract Zip Spec      14 (20) '2.0'\n+04EC62 Extract OS            00 (0) 'MS-DOS'\n+04EC63 General Purpose Flag  0000 (0)\n+04EC65 Compression Method    0000 (0) 'Stored'\n+04EC67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04EC6B CRC                   00000000 (0)\n+04EC6F Compressed Size       00000000 (0)\n+04EC73 Uncompressed Size     00000000 (0)\n+04EC77 Filename Length       0079 (121)\n+04EC79 Extra Length          0009 (9)\n+04EC7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4EC7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04ECF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04ECF6   Length              0005 (5)\n+04ECF8   Flags               01 (1) 'Modification'\n+04ECF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04ECFD LOCAL HEADER #171     04034B50 (67324752)\n+04ED01 Extract Zip Spec      14 (20) '2.0'\n+04ED02 Extract OS            00 (0) 'MS-DOS'\n+04ED03 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04ED05 Compression Method    0000 (0) 'Stored'\n+04ED07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04ED0B CRC                   00000000 (0)\n+04ED0F Compressed Size       00000000 (0)\n+04ED13 Uncompressed Size     00000000 (0)\n+04ED17 Filename Length       008F (143)\n+04ED19 Extra Length          0009 (9)\n+04ED1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4BB30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4ED1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04BBBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BBC1   Length              0005 (5)\n-04BBC3   Flags               01 (1) 'Modification'\n-04BBC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04BBC8 PAYLOAD\n-\n-04D643 DATA DESCRIPTOR       08074B50 (134695760)\n-04D647 CRC                   0D142FFC (219426812)\n-04D64B Compressed Size       00001A7B (6779)\n-04D64F Uncompressed Size     00001A7B (6779)\n-\n-04D653 LOCAL HEADER #172     04034B50 (67324752)\n-04D657 Extract Zip Spec      14 (20) '2.0'\n-04D658 Extract OS            00 (0) 'MS-DOS'\n-04D659 General Purpose Flag  0000 (0)\n-04D65B Compression Method    0000 (0) 'Stored'\n-04D65D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D661 CRC                   00000000 (0)\n-04D665 Compressed Size       00000000 (0)\n-04D669 Uncompressed Size     00000000 (0)\n-04D66D Filename Length       0031 (49)\n-04D66F Extra Length          0009 (9)\n-04D671 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D671: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D6A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D6A4   Length              0005 (5)\n-04D6A6   Flags               01 (1) 'Modification'\n-04D6A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D6AB LOCAL HEADER #173     04034B50 (67324752)\n-04D6AF Extract Zip Spec      14 (20) '2.0'\n-04D6B0 Extract OS            00 (0) 'MS-DOS'\n-04D6B1 General Purpose Flag  0000 (0)\n-04D6B3 Compression Method    0000 (0) 'Stored'\n-04D6B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D6B9 CRC                   00000000 (0)\n-04D6BD Compressed Size       00000000 (0)\n-04D6C1 Uncompressed Size     00000000 (0)\n-04D6C5 Filename Length       0038 (56)\n-04D6C7 Extra Length          0009 (9)\n-04D6C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D6C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D703   Length              0005 (5)\n-04D705   Flags               01 (1) 'Modification'\n-04D706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D70A LOCAL HEADER #174     04034B50 (67324752)\n-04D70E Extract Zip Spec      14 (20) '2.0'\n-04D70F Extract OS            00 (0) 'MS-DOS'\n-04D710 General Purpose Flag  0000 (0)\n-04D712 Compression Method    0000 (0) 'Stored'\n-04D714 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D718 CRC                   00000000 (0)\n-04D71C Compressed Size       00000000 (0)\n-04D720 Uncompressed Size     00000000 (0)\n-04D724 Filename Length       007F (127)\n-04D726 Extra Length          0009 (9)\n-04D728 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D728: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D7A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D7A9   Length              0005 (5)\n-04D7AB   Flags               01 (1) 'Modification'\n-04D7AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D7B0 LOCAL HEADER #175     04034B50 (67324752)\n-04D7B4 Extract Zip Spec      14 (20) '2.0'\n-04D7B5 Extract OS            00 (0) 'MS-DOS'\n-04D7B6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04D7B8 Compression Method    0000 (0) 'Stored'\n-04D7BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D7BE CRC                   00000000 (0)\n-04D7C2 Compressed Size       00000000 (0)\n-04D7C6 Uncompressed Size     00000000 (0)\n-04D7CA Filename Length       0095 (149)\n-04D7CC Extra Length          0009 (9)\n-04D7CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04EDAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04EDAC   Length              0005 (5)\n+04EDAE   Flags               01 (1) 'Modification'\n+04EDAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04EDB3 PAYLOAD\n+\n+05082E DATA DESCRIPTOR       08074B50 (134695760)\n+050832 CRC                   0D142FFC (219426812)\n+050836 Compressed Size       00001A7B (6779)\n+05083A Uncompressed Size     00001A7B (6779)\n+\n+05083E LOCAL HEADER #172     04034B50 (67324752)\n+050842 Extract Zip Spec      14 (20) '2.0'\n+050843 Extract OS            00 (0) 'MS-DOS'\n+050844 General Purpose Flag  0000 (0)\n+050846 Compression Method    0000 (0) 'Stored'\n+050848 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05084C CRC                   00000000 (0)\n+050850 Compressed Size       00000000 (0)\n+050854 Uncompressed Size     00000000 (0)\n+050858 Filename Length       0031 (49)\n+05085A Extra Length          0009 (9)\n+05085C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5085C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05088D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05088F   Length              0005 (5)\n+050891   Flags               01 (1) 'Modification'\n+050892   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+050896 LOCAL HEADER #173     04034B50 (67324752)\n+05089A Extract Zip Spec      14 (20) '2.0'\n+05089B Extract OS            00 (0) 'MS-DOS'\n+05089C General Purpose Flag  0000 (0)\n+05089E Compression Method    0000 (0) 'Stored'\n+0508A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0508A4 CRC                   00000000 (0)\n+0508A8 Compressed Size       00000000 (0)\n+0508AC Uncompressed Size     00000000 (0)\n+0508B0 Filename Length       0038 (56)\n+0508B2 Extra Length          0009 (9)\n+0508B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x508B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0508EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0508EE   Length              0005 (5)\n+0508F0   Flags               01 (1) 'Modification'\n+0508F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0508F5 LOCAL HEADER #174     04034B50 (67324752)\n+0508F9 Extract Zip Spec      14 (20) '2.0'\n+0508FA Extract OS            00 (0) 'MS-DOS'\n+0508FB General Purpose Flag  0000 (0)\n+0508FD Compression Method    0000 (0) 'Stored'\n+0508FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+050903 CRC                   00000000 (0)\n+050907 Compressed Size       00000000 (0)\n+05090B Uncompressed Size     00000000 (0)\n+05090F Filename Length       007F (127)\n+050911 Extra Length          0009 (9)\n+050913 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x50913: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+050992 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+050994   Length              0005 (5)\n+050996   Flags               01 (1) 'Modification'\n+050997   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05099B LOCAL HEADER #175     04034B50 (67324752)\n+05099F Extract Zip Spec      14 (20) '2.0'\n+0509A0 Extract OS            00 (0) 'MS-DOS'\n+0509A1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0509A3 Compression Method    0000 (0) 'Stored'\n+0509A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0509A9 CRC                   00000000 (0)\n+0509AD Compressed Size       00000000 (0)\n+0509B1 Uncompressed Size     00000000 (0)\n+0509B5 Filename Length       0095 (149)\n+0509B7 Extra Length          0009 (9)\n+0509B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4D7CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x509B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04D863 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D865   Length              0005 (5)\n-04D867   Flags               01 (1) 'Modification'\n-04D868   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04D86C PAYLOAD\n-\n-04E0F2 DATA DESCRIPTOR       08074B50 (134695760)\n-04E0F6 CRC                   726CFBF2 (1919745010)\n-04E0FA Compressed Size       00000886 (2182)\n-04E0FE Uncompressed Size     00000886 (2182)\n-\n-04E102 LOCAL HEADER #176     04034B50 (67324752)\n-04E106 Extract Zip Spec      14 (20) '2.0'\n-04E107 Extract OS            00 (0) 'MS-DOS'\n-04E108 General Purpose Flag  0000 (0)\n-04E10A Compression Method    0000 (0) 'Stored'\n-04E10C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E110 CRC                   00000000 (0)\n-04E114 Compressed Size       00000000 (0)\n-04E118 Uncompressed Size     00000000 (0)\n-04E11C Filename Length       0086 (134)\n-04E11E Extra Length          0009 (9)\n-04E120 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+050A4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+050A50   Length              0005 (5)\n+050A52   Flags               01 (1) 'Modification'\n+050A53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+050A57 PAYLOAD\n+\n+0512DD DATA DESCRIPTOR       08074B50 (134695760)\n+0512E1 CRC                   726CFBF2 (1919745010)\n+0512E5 Compressed Size       00000886 (2182)\n+0512E9 Uncompressed Size     00000886 (2182)\n+\n+0512ED LOCAL HEADER #176     04034B50 (67324752)\n+0512F1 Extract Zip Spec      14 (20) '2.0'\n+0512F2 Extract OS            00 (0) 'MS-DOS'\n+0512F3 General Purpose Flag  0000 (0)\n+0512F5 Compression Method    0000 (0) 'Stored'\n+0512F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0512FB CRC                   00000000 (0)\n+0512FF Compressed Size       00000000 (0)\n+051303 Uncompressed Size     00000000 (0)\n+051307 Filename Length       0086 (134)\n+051309 Extra Length          0009 (9)\n+05130B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x4E120: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5130B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04E1A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E1A8   Length              0005 (5)\n-04E1AA   Flags               01 (1) 'Modification'\n-04E1AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04E1AF LOCAL HEADER #177     04034B50 (67324752)\n-04E1B3 Extract Zip Spec      14 (20) '2.0'\n-04E1B4 Extract OS            00 (0) 'MS-DOS'\n-04E1B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04E1B7 Compression Method    0000 (0) 'Stored'\n-04E1B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E1BD CRC                   00000000 (0)\n-04E1C1 Compressed Size       00000000 (0)\n-04E1C5 Uncompressed Size     00000000 (0)\n-04E1C9 Filename Length       009C (156)\n-04E1CB Extra Length          0009 (9)\n-04E1CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+051391 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051393   Length              0005 (5)\n+051395   Flags               01 (1) 'Modification'\n+051396   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05139A LOCAL HEADER #177     04034B50 (67324752)\n+05139E Extract Zip Spec      14 (20) '2.0'\n+05139F Extract OS            00 (0) 'MS-DOS'\n+0513A0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0513A2 Compression Method    0000 (0) 'Stored'\n+0513A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0513A8 CRC                   00000000 (0)\n+0513AC Compressed Size       00000000 (0)\n+0513B0 Uncompressed Size     00000000 (0)\n+0513B4 Filename Length       009C (156)\n+0513B6 Extra Length          0009 (9)\n+0513B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4E1CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04E269 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E26B   Length              0005 (5)\n-04E26D   Flags               01 (1) 'Modification'\n-04E26E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04E272 PAYLOAD\n-\n-04F2E3 DATA DESCRIPTOR       08074B50 (134695760)\n-04F2E7 CRC                   0124A640 (19179072)\n-04F2EB Compressed Size       00001071 (4209)\n-04F2EF Uncompressed Size     00001071 (4209)\n-\n-04F2F3 LOCAL HEADER #178     04034B50 (67324752)\n-04F2F7 Extract Zip Spec      14 (20) '2.0'\n-04F2F8 Extract OS            00 (0) 'MS-DOS'\n-04F2F9 General Purpose Flag  0000 (0)\n-04F2FB Compression Method    0000 (0) 'Stored'\n-04F2FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F301 CRC                   00000000 (0)\n-04F305 Compressed Size       00000000 (0)\n-04F309 Uncompressed Size     00000000 (0)\n-04F30D Filename Length       0086 (134)\n-04F30F Extra Length          0009 (9)\n-04F311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+051454 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051456   Length              0005 (5)\n+051458   Flags               01 (1) 'Modification'\n+051459   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05145D PAYLOAD\n+\n+0524CE DATA DESCRIPTOR       08074B50 (134695760)\n+0524D2 CRC                   0124A640 (19179072)\n+0524D6 Compressed Size       00001071 (4209)\n+0524DA Uncompressed Size     00001071 (4209)\n+\n+0524DE LOCAL HEADER #178     04034B50 (67324752)\n+0524E2 Extract Zip Spec      14 (20) '2.0'\n+0524E3 Extract OS            00 (0) 'MS-DOS'\n+0524E4 General Purpose Flag  0000 (0)\n+0524E6 Compression Method    0000 (0) 'Stored'\n+0524E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0524EC CRC                   00000000 (0)\n+0524F0 Compressed Size       00000000 (0)\n+0524F4 Uncompressed Size     00000000 (0)\n+0524F8 Filename Length       0086 (134)\n+0524FA Extra Length          0009 (9)\n+0524FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x4F311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x524FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F397 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F399   Length              0005 (5)\n-04F39B   Flags               01 (1) 'Modification'\n-04F39C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04F3A0 LOCAL HEADER #179     04034B50 (67324752)\n-04F3A4 Extract Zip Spec      14 (20) '2.0'\n-04F3A5 Extract OS            00 (0) 'MS-DOS'\n-04F3A6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04F3A8 Compression Method    0000 (0) 'Stored'\n-04F3AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F3AE CRC                   00000000 (0)\n-04F3B2 Compressed Size       00000000 (0)\n-04F3B6 Uncompressed Size     00000000 (0)\n-04F3BA Filename Length       009C (156)\n-04F3BC Extra Length          0009 (9)\n-04F3BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+052582 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052584   Length              0005 (5)\n+052586   Flags               01 (1) 'Modification'\n+052587   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05258B LOCAL HEADER #179     04034B50 (67324752)\n+05258F Extract Zip Spec      14 (20) '2.0'\n+052590 Extract OS            00 (0) 'MS-DOS'\n+052591 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+052593 Compression Method    0000 (0) 'Stored'\n+052595 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052599 CRC                   00000000 (0)\n+05259D Compressed Size       00000000 (0)\n+0525A1 Uncompressed Size     00000000 (0)\n+0525A5 Filename Length       009C (156)\n+0525A7 Extra Length          0009 (9)\n+0525A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4F3BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x525A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F45A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F45C   Length              0005 (5)\n-04F45E   Flags               01 (1) 'Modification'\n-04F45F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04F463 PAYLOAD\n-\n-04FD2F DATA DESCRIPTOR       08074B50 (134695760)\n-04FD33 CRC                   7E793C9C (2121874588)\n-04FD37 Compressed Size       000008CC (2252)\n-04FD3B Uncompressed Size     000008CC (2252)\n-\n-04FD3F LOCAL HEADER #180     04034B50 (67324752)\n-04FD43 Extract Zip Spec      14 (20) '2.0'\n-04FD44 Extract OS            00 (0) 'MS-DOS'\n-04FD45 General Purpose Flag  0000 (0)\n-04FD47 Compression Method    0000 (0) 'Stored'\n-04FD49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04FD4D CRC                   00000000 (0)\n-04FD51 Compressed Size       00000000 (0)\n-04FD55 Uncompressed Size     00000000 (0)\n-04FD59 Filename Length       0024 (36)\n-04FD5B Extra Length          0009 (9)\n-04FD5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4FD5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04FD81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04FD83   Length              0005 (5)\n-04FD85   Flags               01 (1) 'Modification'\n-04FD86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04FD8A LOCAL HEADER #181     04034B50 (67324752)\n-04FD8E Extract Zip Spec      14 (20) '2.0'\n-04FD8F Extract OS            00 (0) 'MS-DOS'\n-04FD90 General Purpose Flag  0000 (0)\n-04FD92 Compression Method    0000 (0) 'Stored'\n-04FD94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04FD98 CRC                   00000000 (0)\n-04FD9C Compressed Size       00000000 (0)\n-04FDA0 Uncompressed Size     00000000 (0)\n-04FDA4 Filename Length       002B (43)\n-04FDA6 Extra Length          0009 (9)\n-04FDA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4FDA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04FDD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04FDD5   Length              0005 (5)\n-04FDD7   Flags               01 (1) 'Modification'\n-04FDD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04FDDC LOCAL HEADER #182     04034B50 (67324752)\n-04FDE0 Extract Zip Spec      14 (20) '2.0'\n-04FDE1 Extract OS            00 (0) 'MS-DOS'\n-04FDE2 General Purpose Flag  0000 (0)\n-04FDE4 Compression Method    0000 (0) 'Stored'\n-04FDE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04FDEA CRC                   00000000 (0)\n-04FDEE Compressed Size       00000000 (0)\n-04FDF2 Uncompressed Size     00000000 (0)\n-04FDF6 Filename Length       0052 (82)\n-04FDF8 Extra Length          0009 (9)\n-04FDFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4FDFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04FE4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04FE4E   Length              0005 (5)\n-04FE50   Flags               01 (1) 'Modification'\n-04FE51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04FE55 LOCAL HEADER #183     04034B50 (67324752)\n-04FE59 Extract Zip Spec      14 (20) '2.0'\n-04FE5A Extract OS            00 (0) 'MS-DOS'\n-04FE5B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04FE5D Compression Method    0000 (0) 'Stored'\n-04FE5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04FE63 CRC                   00000000 (0)\n-04FE67 Compressed Size       00000000 (0)\n-04FE6B Uncompressed Size     00000000 (0)\n-04FE6F Filename Length       0068 (104)\n-04FE71 Extra Length          0009 (9)\n-04FE73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4FE73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04FEDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04FEDD   Length              0005 (5)\n-04FEDF   Flags               01 (1) 'Modification'\n-04FEE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04FEE4 PAYLOAD\n-\n-0505F1 DATA DESCRIPTOR       08074B50 (134695760)\n-0505F5 CRC                   A8584B88 (2824358792)\n-0505F9 Compressed Size       0000070D (1805)\n-0505FD Uncompressed Size     0000070D (1805)\n-\n-050601 LOCAL HEADER #184     04034B50 (67324752)\n-050605 Extract Zip Spec      14 (20) '2.0'\n-050606 Extract OS            00 (0) 'MS-DOS'\n-050607 General Purpose Flag  0000 (0)\n-050609 Compression Method    0000 (0) 'Stored'\n-05060B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05060F CRC                   00000000 (0)\n-050613 Compressed Size       00000000 (0)\n-050617 Uncompressed Size     00000000 (0)\n-05061B Filename Length       004E (78)\n-05061D Extra Length          0009 (9)\n-05061F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5061F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05066D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05066F   Length              0005 (5)\n-050671   Flags               01 (1) 'Modification'\n-050672   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-050676 LOCAL HEADER #185     04034B50 (67324752)\n-05067A Extract Zip Spec      14 (20) '2.0'\n-05067B Extract OS            00 (0) 'MS-DOS'\n-05067C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05067E Compression Method    0000 (0) 'Stored'\n-050680 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-050684 CRC                   00000000 (0)\n-050688 Compressed Size       00000000 (0)\n-05068C Uncompressed Size     00000000 (0)\n-050690 Filename Length       0064 (100)\n-050692 Extra Length          0009 (9)\n-050694 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50694: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0506F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0506FA   Length              0005 (5)\n-0506FC   Flags               01 (1) 'Modification'\n-0506FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-050701 PAYLOAD\n-\n-050E61 DATA DESCRIPTOR       08074B50 (134695760)\n-050E65 CRC                   A8336B4A (2821942090)\n-050E69 Compressed Size       00000760 (1888)\n-050E6D Uncompressed Size     00000760 (1888)\n-\n-050E71 LOCAL HEADER #186     04034B50 (67324752)\n-050E75 Extract Zip Spec      14 (20) '2.0'\n-050E76 Extract OS            00 (0) 'MS-DOS'\n-050E77 General Purpose Flag  0000 (0)\n-050E79 Compression Method    0000 (0) 'Stored'\n-050E7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-050E7F CRC                   00000000 (0)\n-050E83 Compressed Size       00000000 (0)\n-050E87 Uncompressed Size     00000000 (0)\n-050E8B Filename Length       004E (78)\n-050E8D Extra Length          0009 (9)\n-050E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-050EDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-050EDF   Length              0005 (5)\n-050EE1   Flags               01 (1) 'Modification'\n-050EE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-050EE6 LOCAL HEADER #187     04034B50 (67324752)\n-050EEA Extract Zip Spec      14 (20) '2.0'\n-050EEB Extract OS            00 (0) 'MS-DOS'\n-050EEC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-050EEE Compression Method    0000 (0) 'Stored'\n-050EF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-050EF4 CRC                   00000000 (0)\n-050EF8 Compressed Size       00000000 (0)\n-050EFC Uncompressed Size     00000000 (0)\n-050F00 Filename Length       0064 (100)\n-050F02 Extra Length          0009 (9)\n-050F04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50F04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-050F68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-050F6A   Length              0005 (5)\n-050F6C   Flags               01 (1) 'Modification'\n-050F6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-050F71 PAYLOAD\n-\n-0516D5 DATA DESCRIPTOR       08074B50 (134695760)\n-0516D9 CRC                   7559BE1A (1968815642)\n-0516DD Compressed Size       00000764 (1892)\n-0516E1 Uncompressed Size     00000764 (1892)\n-\n-0516E5 LOCAL HEADER #188     04034B50 (67324752)\n-0516E9 Extract Zip Spec      14 (20) '2.0'\n-0516EA Extract OS            00 (0) 'MS-DOS'\n-0516EB General Purpose Flag  0000 (0)\n-0516ED Compression Method    0000 (0) 'Stored'\n-0516EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0516F3 CRC                   00000000 (0)\n-0516F7 Compressed Size       00000000 (0)\n-0516FB Uncompressed Size     00000000 (0)\n-0516FF Filename Length       0050 (80)\n-051701 Extra Length          0009 (9)\n-051703 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51703: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051753 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051755   Length              0005 (5)\n-051757   Flags               01 (1) 'Modification'\n-051758   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05175C LOCAL HEADER #189     04034B50 (67324752)\n-051760 Extract Zip Spec      14 (20) '2.0'\n-051761 Extract OS            00 (0) 'MS-DOS'\n-051762 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-051764 Compression Method    0000 (0) 'Stored'\n-051766 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05176A CRC                   00000000 (0)\n-05176E Compressed Size       00000000 (0)\n-051772 Uncompressed Size     00000000 (0)\n-051776 Filename Length       0066 (102)\n-051778 Extra Length          0009 (9)\n-05177A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5177A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0517E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0517E2   Length              0005 (5)\n-0517E4   Flags               01 (1) 'Modification'\n-0517E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0517E9 PAYLOAD\n-\n-05271E DATA DESCRIPTOR       08074B50 (134695760)\n-052722 CRC                   F2039839 (4060321849)\n-052726 Compressed Size       00000F35 (3893)\n-05272A Uncompressed Size     00000F35 (3893)\n-\n-05272E LOCAL HEADER #190     04034B50 (67324752)\n-052732 Extract Zip Spec      14 (20) '2.0'\n-052733 Extract OS            00 (0) 'MS-DOS'\n-052734 General Purpose Flag  0000 (0)\n-052736 Compression Method    0000 (0) 'Stored'\n-052738 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05273C CRC                   00000000 (0)\n-052740 Compressed Size       00000000 (0)\n-052744 Uncompressed Size     00000000 (0)\n-052748 Filename Length       0026 (38)\n-05274A Extra Length          0009 (9)\n-05274C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5274C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052772 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052774   Length              0005 (5)\n-052776   Flags               01 (1) 'Modification'\n-052777   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05277B LOCAL HEADER #191     04034B50 (67324752)\n-05277F Extract Zip Spec      14 (20) '2.0'\n-052780 Extract OS            00 (0) 'MS-DOS'\n-052781 General Purpose Flag  0000 (0)\n-052783 Compression Method    0000 (0) 'Stored'\n-052785 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052789 CRC                   00000000 (0)\n-05278D Compressed Size       00000000 (0)\n-052791 Uncompressed Size     00000000 (0)\n-052795 Filename Length       002D (45)\n-052797 Extra Length          0009 (9)\n-052799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0527C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0527C8   Length              0005 (5)\n-0527CA   Flags               01 (1) 'Modification'\n-0527CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0527CF LOCAL HEADER #192     04034B50 (67324752)\n-0527D3 Extract Zip Spec      14 (20) '2.0'\n-0527D4 Extract OS            00 (0) 'MS-DOS'\n-0527D5 General Purpose Flag  0000 (0)\n-0527D7 Compression Method    0000 (0) 'Stored'\n-0527D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0527DD CRC                   00000000 (0)\n-0527E1 Compressed Size       00000000 (0)\n-0527E5 Uncompressed Size     00000000 (0)\n-0527E9 Filename Length       005B (91)\n-0527EB Extra Length          0009 (9)\n-0527ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x527ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052848 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05284A   Length              0005 (5)\n-05284C   Flags               01 (1) 'Modification'\n-05284D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-052851 LOCAL HEADER #193     04034B50 (67324752)\n-052855 Extract Zip Spec      14 (20) '2.0'\n-052856 Extract OS            00 (0) 'MS-DOS'\n-052857 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-052859 Compression Method    0000 (0) 'Stored'\n-05285B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05285F CRC                   00000000 (0)\n-052863 Compressed Size       00000000 (0)\n-052867 Uncompressed Size     00000000 (0)\n-05286B Filename Length       0071 (113)\n-05286D Extra Length          0009 (9)\n-05286F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5286F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0528E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0528E2   Length              0005 (5)\n-0528E4   Flags               01 (1) 'Modification'\n-0528E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0528E9 PAYLOAD\n-\n-05314A DATA DESCRIPTOR       08074B50 (134695760)\n-05314E CRC                   4C048087 (1275363463)\n-053152 Compressed Size       00000861 (2145)\n-053156 Uncompressed Size     00000861 (2145)\n-\n-05315A LOCAL HEADER #194     04034B50 (67324752)\n-05315E Extract Zip Spec      14 (20) '2.0'\n-05315F Extract OS            00 (0) 'MS-DOS'\n-053160 General Purpose Flag  0000 (0)\n-053162 Compression Method    0000 (0) 'Stored'\n-053164 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053168 CRC                   00000000 (0)\n-05316C Compressed Size       00000000 (0)\n-053170 Uncompressed Size     00000000 (0)\n-053174 Filename Length       002D (45)\n-053176 Extra Length          0009 (9)\n-053178 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53178: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0531A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0531A7   Length              0005 (5)\n-0531A9   Flags               01 (1) 'Modification'\n-0531AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0531AE LOCAL HEADER #195     04034B50 (67324752)\n-0531B2 Extract Zip Spec      14 (20) '2.0'\n-0531B3 Extract OS            00 (0) 'MS-DOS'\n-0531B4 General Purpose Flag  0000 (0)\n-0531B6 Compression Method    0000 (0) 'Stored'\n-0531B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0531BC CRC                   00000000 (0)\n-0531C0 Compressed Size       00000000 (0)\n-0531C4 Uncompressed Size     00000000 (0)\n-0531C8 Filename Length       0034 (52)\n-0531CA Extra Length          0009 (9)\n-0531CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053200 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053202   Length              0005 (5)\n-053204   Flags               01 (1) 'Modification'\n-053205   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-053209 LOCAL HEADER #196     04034B50 (67324752)\n-05320D Extract Zip Spec      14 (20) '2.0'\n-05320E Extract OS            00 (0) 'MS-DOS'\n-05320F General Purpose Flag  0000 (0)\n-053211 Compression Method    0000 (0) 'Stored'\n-053213 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053217 CRC                   00000000 (0)\n-05321B Compressed Size       00000000 (0)\n-05321F Uncompressed Size     00000000 (0)\n-053223 Filename Length       0068 (104)\n-053225 Extra Length          0009 (9)\n-053227 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53227: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05328F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053291   Length              0005 (5)\n-053293   Flags               01 (1) 'Modification'\n-053294   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-053298 LOCAL HEADER #197     04034B50 (67324752)\n-05329C Extract Zip Spec      14 (20) '2.0'\n-05329D Extract OS            00 (0) 'MS-DOS'\n-05329E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0532A0 Compression Method    0000 (0) 'Stored'\n-0532A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0532A6 CRC                   00000000 (0)\n-0532AA Compressed Size       00000000 (0)\n-0532AE Uncompressed Size     00000000 (0)\n-0532B2 Filename Length       007E (126)\n-0532B4 Extra Length          0009 (9)\n-0532B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053334 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053336   Length              0005 (5)\n-053338   Flags               01 (1) 'Modification'\n-053339   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05333D PAYLOAD\n-\n-05549B DATA DESCRIPTOR       08074B50 (134695760)\n-05549F CRC                   877B2EE8 (2272997096)\n-0554A3 Compressed Size       0000215E (8542)\n-0554A7 Uncompressed Size     0000215E (8542)\n-\n-0554AB LOCAL HEADER #198     04034B50 (67324752)\n-0554AF Extract Zip Spec      14 (20) '2.0'\n-0554B0 Extract OS            00 (0) 'MS-DOS'\n-0554B1 General Purpose Flag  0000 (0)\n-0554B3 Compression Method    0000 (0) 'Stored'\n-0554B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0554B9 CRC                   00000000 (0)\n-0554BD Compressed Size       00000000 (0)\n-0554C1 Uncompressed Size     00000000 (0)\n-0554C5 Filename Length       006C (108)\n-0554C7 Extra Length          0009 (9)\n-0554C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x554C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-055535 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-055537   Length              0005 (5)\n-055539   Flags               01 (1) 'Modification'\n-05553A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05553E LOCAL HEADER #199     04034B50 (67324752)\n-055542 Extract Zip Spec      14 (20) '2.0'\n-055543 Extract OS            00 (0) 'MS-DOS'\n-055544 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-055546 Compression Method    0000 (0) 'Stored'\n-055548 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05554C CRC                   00000000 (0)\n-055550 Compressed Size       00000000 (0)\n-055554 Uncompressed Size     00000000 (0)\n-055558 Filename Length       0082 (130)\n-05555A Extra Length          0009 (9)\n-05555C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5555C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0555DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0555E0   Length              0005 (5)\n-0555E2   Flags               01 (1) 'Modification'\n-0555E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0555E7 PAYLOAD\n-\n-056A66 DATA DESCRIPTOR       08074B50 (134695760)\n-056A6A CRC                   E43D22D5 (3829211861)\n-056A6E Compressed Size       0000147F (5247)\n-056A72 Uncompressed Size     0000147F (5247)\n-\n-056A76 LOCAL HEADER #200     04034B50 (67324752)\n-056A7A Extract Zip Spec      14 (20) '2.0'\n-056A7B Extract OS            00 (0) 'MS-DOS'\n-056A7C General Purpose Flag  0000 (0)\n-056A7E Compression Method    0000 (0) 'Stored'\n-056A80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056A84 CRC                   00000000 (0)\n-056A88 Compressed Size       00000000 (0)\n-056A8C Uncompressed Size     00000000 (0)\n-056A90 Filename Length       005E (94)\n-056A92 Extra Length          0009 (9)\n-056A94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56A94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056AF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056AF4   Length              0005 (5)\n-056AF6   Flags               01 (1) 'Modification'\n-056AF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056AFB LOCAL HEADER #201     04034B50 (67324752)\n-056AFF Extract Zip Spec      14 (20) '2.0'\n-056B00 Extract OS            00 (0) 'MS-DOS'\n-056B01 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-056B03 Compression Method    0000 (0) 'Stored'\n-056B05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056B09 CRC                   00000000 (0)\n-056B0D Compressed Size       00000000 (0)\n-056B11 Uncompressed Size     00000000 (0)\n-056B15 Filename Length       0074 (116)\n-056B17 Extra Length          0009 (9)\n-056B19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56B19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056B8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056B8F   Length              0005 (5)\n-056B91   Flags               01 (1) 'Modification'\n-056B92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-056B96 PAYLOAD\n-\n-057BF6 DATA DESCRIPTOR       08074B50 (134695760)\n-057BFA CRC                   D765846F (3613754479)\n-057BFE Compressed Size       00001060 (4192)\n-057C02 Uncompressed Size     00001060 (4192)\n-\n-057C06 LOCAL HEADER #202     04034B50 (67324752)\n-057C0A Extract Zip Spec      14 (20) '2.0'\n-057C0B Extract OS            00 (0) 'MS-DOS'\n-057C0C General Purpose Flag  0000 (0)\n-057C0E Compression Method    0000 (0) 'Stored'\n-057C10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057C14 CRC                   00000000 (0)\n-057C18 Compressed Size       00000000 (0)\n-057C1C Uncompressed Size     00000000 (0)\n-057C20 Filename Length       005E (94)\n-057C22 Extra Length          0009 (9)\n-057C24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57C24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057C82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057C84   Length              0005 (5)\n-057C86   Flags               01 (1) 'Modification'\n-057C87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-057C8B LOCAL HEADER #203     04034B50 (67324752)\n-057C8F Extract Zip Spec      14 (20) '2.0'\n-057C90 Extract OS            00 (0) 'MS-DOS'\n-057C91 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-057C93 Compression Method    0000 (0) 'Stored'\n-057C95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057C99 CRC                   00000000 (0)\n-057C9D Compressed Size       00000000 (0)\n-057CA1 Uncompressed Size     00000000 (0)\n-057CA5 Filename Length       0074 (116)\n-057CA7 Extra Length          0009 (9)\n-057CA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57CA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057D1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057D1F   Length              0005 (5)\n-057D21   Flags               01 (1) 'Modification'\n-057D22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-057D26 PAYLOAD\n-\n-058E82 DATA DESCRIPTOR       08074B50 (134695760)\n-058E86 CRC                   57E394F3 (1474532595)\n-058E8A Compressed Size       0000115C (4444)\n-058E8E Uncompressed Size     0000115C (4444)\n-\n-058E92 LOCAL HEADER #204     04034B50 (67324752)\n-058E96 Extract Zip Spec      14 (20) '2.0'\n-058E97 Extract OS            00 (0) 'MS-DOS'\n-058E98 General Purpose Flag  0000 (0)\n-058E9A Compression Method    0000 (0) 'Stored'\n-058E9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058EA0 CRC                   00000000 (0)\n-058EA4 Compressed Size       00000000 (0)\n-058EA8 Uncompressed Size     00000000 (0)\n-058EAC Filename Length       0028 (40)\n-058EAE Extra Length          0009 (9)\n-058EB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58EB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058ED8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058EDA   Length              0005 (5)\n-058EDC   Flags               01 (1) 'Modification'\n-058EDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058EE1 LOCAL HEADER #205     04034B50 (67324752)\n-058EE5 Extract Zip Spec      14 (20) '2.0'\n-058EE6 Extract OS            00 (0) 'MS-DOS'\n-058EE7 General Purpose Flag  0000 (0)\n-058EE9 Compression Method    0000 (0) 'Stored'\n-058EEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058EEF CRC                   00000000 (0)\n-058EF3 Compressed Size       00000000 (0)\n-058EF7 Uncompressed Size     00000000 (0)\n-058EFB Filename Length       002F (47)\n-058EFD Extra Length          0009 (9)\n-058EFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58EFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058F2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058F30   Length              0005 (5)\n-058F32   Flags               01 (1) 'Modification'\n-058F33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058F37 LOCAL HEADER #206     04034B50 (67324752)\n-058F3B Extract Zip Spec      14 (20) '2.0'\n-058F3C Extract OS            00 (0) 'MS-DOS'\n-058F3D General Purpose Flag  0000 (0)\n-058F3F Compression Method    0000 (0) 'Stored'\n-058F41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058F45 CRC                   00000000 (0)\n-058F49 Compressed Size       00000000 (0)\n-058F4D Uncompressed Size     00000000 (0)\n-058F51 Filename Length       006E (110)\n-058F53 Extra Length          0009 (9)\n-058F55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58F55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058FC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058FC5   Length              0005 (5)\n-058FC7   Flags               01 (1) 'Modification'\n-058FC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058FCC LOCAL HEADER #207     04034B50 (67324752)\n-058FD0 Extract Zip Spec      14 (20) '2.0'\n-058FD1 Extract OS            00 (0) 'MS-DOS'\n-058FD2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-058FD4 Compression Method    0000 (0) 'Stored'\n-058FD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058FDA CRC                   00000000 (0)\n-058FDE Compressed Size       00000000 (0)\n-058FE2 Uncompressed Size     00000000 (0)\n-058FE6 Filename Length       0084 (132)\n-058FE8 Extra Length          0009 (9)\n-058FEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+052645 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052647   Length              0005 (5)\n+052649   Flags               01 (1) 'Modification'\n+05264A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05264E PAYLOAD\n+\n+052F1A DATA DESCRIPTOR       08074B50 (134695760)\n+052F1E CRC                   7E793C9C (2121874588)\n+052F22 Compressed Size       000008CC (2252)\n+052F26 Uncompressed Size     000008CC (2252)\n+\n+052F2A LOCAL HEADER #180     04034B50 (67324752)\n+052F2E Extract Zip Spec      14 (20) '2.0'\n+052F2F Extract OS            00 (0) 'MS-DOS'\n+052F30 General Purpose Flag  0000 (0)\n+052F32 Compression Method    0000 (0) 'Stored'\n+052F34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F38 CRC                   00000000 (0)\n+052F3C Compressed Size       00000000 (0)\n+052F40 Uncompressed Size     00000000 (0)\n+052F44 Filename Length       0024 (36)\n+052F46 Extra Length          0009 (9)\n+052F48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052F6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052F6E   Length              0005 (5)\n+052F70   Flags               01 (1) 'Modification'\n+052F71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052F75 LOCAL HEADER #181     04034B50 (67324752)\n+052F79 Extract Zip Spec      14 (20) '2.0'\n+052F7A Extract OS            00 (0) 'MS-DOS'\n+052F7B General Purpose Flag  0000 (0)\n+052F7D Compression Method    0000 (0) 'Stored'\n+052F7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F83 CRC                   00000000 (0)\n+052F87 Compressed Size       00000000 (0)\n+052F8B Uncompressed Size     00000000 (0)\n+052F8F Filename Length       002B (43)\n+052F91 Extra Length          0009 (9)\n+052F93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052FBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052FC0   Length              0005 (5)\n+052FC2   Flags               01 (1) 'Modification'\n+052FC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052FC7 LOCAL HEADER #182     04034B50 (67324752)\n+052FCB Extract Zip Spec      14 (20) '2.0'\n+052FCC Extract OS            00 (0) 'MS-DOS'\n+052FCD General Purpose Flag  0000 (0)\n+052FCF Compression Method    0000 (0) 'Stored'\n+052FD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052FD5 CRC                   00000000 (0)\n+052FD9 Compressed Size       00000000 (0)\n+052FDD Uncompressed Size     00000000 (0)\n+052FE1 Filename Length       0052 (82)\n+052FE3 Extra Length          0009 (9)\n+052FE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053037 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053039   Length              0005 (5)\n+05303B   Flags               01 (1) 'Modification'\n+05303C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053040 LOCAL HEADER #183     04034B50 (67324752)\n+053044 Extract Zip Spec      14 (20) '2.0'\n+053045 Extract OS            00 (0) 'MS-DOS'\n+053046 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053048 Compression Method    0000 (0) 'Stored'\n+05304A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05304E CRC                   00000000 (0)\n+053052 Compressed Size       00000000 (0)\n+053056 Uncompressed Size     00000000 (0)\n+05305A Filename Length       0068 (104)\n+05305C Extra Length          0009 (9)\n+05305E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5305E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0530C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0530C8   Length              0005 (5)\n+0530CA   Flags               01 (1) 'Modification'\n+0530CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0530CF PAYLOAD\n+\n+0537DC DATA DESCRIPTOR       08074B50 (134695760)\n+0537E0 CRC                   A8584B88 (2824358792)\n+0537E4 Compressed Size       0000070D (1805)\n+0537E8 Uncompressed Size     0000070D (1805)\n+\n+0537EC LOCAL HEADER #184     04034B50 (67324752)\n+0537F0 Extract Zip Spec      14 (20) '2.0'\n+0537F1 Extract OS            00 (0) 'MS-DOS'\n+0537F2 General Purpose Flag  0000 (0)\n+0537F4 Compression Method    0000 (0) 'Stored'\n+0537F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0537FA CRC                   00000000 (0)\n+0537FE Compressed Size       00000000 (0)\n+053802 Uncompressed Size     00000000 (0)\n+053806 Filename Length       004E (78)\n+053808 Extra Length          0009 (9)\n+05380A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5380A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053858 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05385A   Length              0005 (5)\n+05385C   Flags               01 (1) 'Modification'\n+05385D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053861 LOCAL HEADER #185     04034B50 (67324752)\n+053865 Extract Zip Spec      14 (20) '2.0'\n+053866 Extract OS            00 (0) 'MS-DOS'\n+053867 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053869 Compression Method    0000 (0) 'Stored'\n+05386B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05386F CRC                   00000000 (0)\n+053873 Compressed Size       00000000 (0)\n+053877 Uncompressed Size     00000000 (0)\n+05387B Filename Length       0064 (100)\n+05387D Extra Length          0009 (9)\n+05387F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5387F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0538E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0538E5   Length              0005 (5)\n+0538E7   Flags               01 (1) 'Modification'\n+0538E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0538EC PAYLOAD\n+\n+05404C DATA DESCRIPTOR       08074B50 (134695760)\n+054050 CRC                   A8336B4A (2821942090)\n+054054 Compressed Size       00000760 (1888)\n+054058 Uncompressed Size     00000760 (1888)\n+\n+05405C LOCAL HEADER #186     04034B50 (67324752)\n+054060 Extract Zip Spec      14 (20) '2.0'\n+054061 Extract OS            00 (0) 'MS-DOS'\n+054062 General Purpose Flag  0000 (0)\n+054064 Compression Method    0000 (0) 'Stored'\n+054066 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05406A CRC                   00000000 (0)\n+05406E Compressed Size       00000000 (0)\n+054072 Uncompressed Size     00000000 (0)\n+054076 Filename Length       004E (78)\n+054078 Extra Length          0009 (9)\n+05407A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5407A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0540C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0540CA   Length              0005 (5)\n+0540CC   Flags               01 (1) 'Modification'\n+0540CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0540D1 LOCAL HEADER #187     04034B50 (67324752)\n+0540D5 Extract Zip Spec      14 (20) '2.0'\n+0540D6 Extract OS            00 (0) 'MS-DOS'\n+0540D7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0540D9 Compression Method    0000 (0) 'Stored'\n+0540DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0540DF CRC                   00000000 (0)\n+0540E3 Compressed Size       00000000 (0)\n+0540E7 Uncompressed Size     00000000 (0)\n+0540EB Filename Length       0064 (100)\n+0540ED Extra Length          0009 (9)\n+0540EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x540EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+054153 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054155   Length              0005 (5)\n+054157   Flags               01 (1) 'Modification'\n+054158   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05415C PAYLOAD\n+\n+0548C0 DATA DESCRIPTOR       08074B50 (134695760)\n+0548C4 CRC                   7559BE1A (1968815642)\n+0548C8 Compressed Size       00000764 (1892)\n+0548CC Uncompressed Size     00000764 (1892)\n+\n+0548D0 LOCAL HEADER #188     04034B50 (67324752)\n+0548D4 Extract Zip Spec      14 (20) '2.0'\n+0548D5 Extract OS            00 (0) 'MS-DOS'\n+0548D6 General Purpose Flag  0000 (0)\n+0548D8 Compression Method    0000 (0) 'Stored'\n+0548DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0548DE CRC                   00000000 (0)\n+0548E2 Compressed Size       00000000 (0)\n+0548E6 Uncompressed Size     00000000 (0)\n+0548EA Filename Length       0050 (80)\n+0548EC Extra Length          0009 (9)\n+0548EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x548EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05493E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054940   Length              0005 (5)\n+054942   Flags               01 (1) 'Modification'\n+054943   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+054947 LOCAL HEADER #189     04034B50 (67324752)\n+05494B Extract Zip Spec      14 (20) '2.0'\n+05494C Extract OS            00 (0) 'MS-DOS'\n+05494D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05494F Compression Method    0000 (0) 'Stored'\n+054951 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054955 CRC                   00000000 (0)\n+054959 Compressed Size       00000000 (0)\n+05495D Uncompressed Size     00000000 (0)\n+054961 Filename Length       0066 (102)\n+054963 Extra Length          0009 (9)\n+054965 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54965: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0549CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0549CD   Length              0005 (5)\n+0549CF   Flags               01 (1) 'Modification'\n+0549D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0549D4 PAYLOAD\n+\n+055909 DATA DESCRIPTOR       08074B50 (134695760)\n+05590D CRC                   F2039839 (4060321849)\n+055911 Compressed Size       00000F35 (3893)\n+055915 Uncompressed Size     00000F35 (3893)\n+\n+055919 LOCAL HEADER #190     04034B50 (67324752)\n+05591D Extract Zip Spec      14 (20) '2.0'\n+05591E Extract OS            00 (0) 'MS-DOS'\n+05591F General Purpose Flag  0000 (0)\n+055921 Compression Method    0000 (0) 'Stored'\n+055923 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+055927 CRC                   00000000 (0)\n+05592B Compressed Size       00000000 (0)\n+05592F Uncompressed Size     00000000 (0)\n+055933 Filename Length       0026 (38)\n+055935 Extra Length          0009 (9)\n+055937 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55937: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05595D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05595F   Length              0005 (5)\n+055961   Flags               01 (1) 'Modification'\n+055962   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+055966 LOCAL HEADER #191     04034B50 (67324752)\n+05596A Extract Zip Spec      14 (20) '2.0'\n+05596B Extract OS            00 (0) 'MS-DOS'\n+05596C General Purpose Flag  0000 (0)\n+05596E Compression Method    0000 (0) 'Stored'\n+055970 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+055974 CRC                   00000000 (0)\n+055978 Compressed Size       00000000 (0)\n+05597C Uncompressed Size     00000000 (0)\n+055980 Filename Length       002D (45)\n+055982 Extra Length          0009 (9)\n+055984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0559B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0559B3   Length              0005 (5)\n+0559B5   Flags               01 (1) 'Modification'\n+0559B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0559BA LOCAL HEADER #192     04034B50 (67324752)\n+0559BE Extract Zip Spec      14 (20) '2.0'\n+0559BF Extract OS            00 (0) 'MS-DOS'\n+0559C0 General Purpose Flag  0000 (0)\n+0559C2 Compression Method    0000 (0) 'Stored'\n+0559C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0559C8 CRC                   00000000 (0)\n+0559CC Compressed Size       00000000 (0)\n+0559D0 Uncompressed Size     00000000 (0)\n+0559D4 Filename Length       005B (91)\n+0559D6 Extra Length          0009 (9)\n+0559D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x559D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+055A33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+055A35   Length              0005 (5)\n+055A37   Flags               01 (1) 'Modification'\n+055A38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+055A3C LOCAL HEADER #193     04034B50 (67324752)\n+055A40 Extract Zip Spec      14 (20) '2.0'\n+055A41 Extract OS            00 (0) 'MS-DOS'\n+055A42 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+055A44 Compression Method    0000 (0) 'Stored'\n+055A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+055A4A CRC                   00000000 (0)\n+055A4E Compressed Size       00000000 (0)\n+055A52 Uncompressed Size     00000000 (0)\n+055A56 Filename Length       0071 (113)\n+055A58 Extra Length          0009 (9)\n+055A5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55A5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+055ACB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+055ACD   Length              0005 (5)\n+055ACF   Flags               01 (1) 'Modification'\n+055AD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+055AD4 PAYLOAD\n+\n+056335 DATA DESCRIPTOR       08074B50 (134695760)\n+056339 CRC                   4C048087 (1275363463)\n+05633D Compressed Size       00000861 (2145)\n+056341 Uncompressed Size     00000861 (2145)\n+\n+056345 LOCAL HEADER #194     04034B50 (67324752)\n+056349 Extract Zip Spec      14 (20) '2.0'\n+05634A Extract OS            00 (0) 'MS-DOS'\n+05634B General Purpose Flag  0000 (0)\n+05634D Compression Method    0000 (0) 'Stored'\n+05634F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+056353 CRC                   00000000 (0)\n+056357 Compressed Size       00000000 (0)\n+05635B Uncompressed Size     00000000 (0)\n+05635F Filename Length       002D (45)\n+056361 Extra Length          0009 (9)\n+056363 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56363: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+056390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056392   Length              0005 (5)\n+056394   Flags               01 (1) 'Modification'\n+056395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+056399 LOCAL HEADER #195     04034B50 (67324752)\n+05639D Extract Zip Spec      14 (20) '2.0'\n+05639E Extract OS            00 (0) 'MS-DOS'\n+05639F General Purpose Flag  0000 (0)\n+0563A1 Compression Method    0000 (0) 'Stored'\n+0563A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0563A7 CRC                   00000000 (0)\n+0563AB Compressed Size       00000000 (0)\n+0563AF Uncompressed Size     00000000 (0)\n+0563B3 Filename Length       0034 (52)\n+0563B5 Extra Length          0009 (9)\n+0563B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x563B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0563EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0563ED   Length              0005 (5)\n+0563EF   Flags               01 (1) 'Modification'\n+0563F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0563F4 LOCAL HEADER #196     04034B50 (67324752)\n+0563F8 Extract Zip Spec      14 (20) '2.0'\n+0563F9 Extract OS            00 (0) 'MS-DOS'\n+0563FA General Purpose Flag  0000 (0)\n+0563FC Compression Method    0000 (0) 'Stored'\n+0563FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+056402 CRC                   00000000 (0)\n+056406 Compressed Size       00000000 (0)\n+05640A Uncompressed Size     00000000 (0)\n+05640E Filename Length       0068 (104)\n+056410 Extra Length          0009 (9)\n+056412 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56412: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05647A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05647C   Length              0005 (5)\n+05647E   Flags               01 (1) 'Modification'\n+05647F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+056483 LOCAL HEADER #197     04034B50 (67324752)\n+056487 Extract Zip Spec      14 (20) '2.0'\n+056488 Extract OS            00 (0) 'MS-DOS'\n+056489 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05648B Compression Method    0000 (0) 'Stored'\n+05648D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+056491 CRC                   00000000 (0)\n+056495 Compressed Size       00000000 (0)\n+056499 Uncompressed Size     00000000 (0)\n+05649D Filename Length       007E (126)\n+05649F Extra Length          0009 (9)\n+0564A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x564A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05651F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056521   Length              0005 (5)\n+056523   Flags               01 (1) 'Modification'\n+056524   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+056528 PAYLOAD\n+\n+058686 DATA DESCRIPTOR       08074B50 (134695760)\n+05868A CRC                   877B2EE8 (2272997096)\n+05868E Compressed Size       0000215E (8542)\n+058692 Uncompressed Size     0000215E (8542)\n+\n+058696 LOCAL HEADER #198     04034B50 (67324752)\n+05869A Extract Zip Spec      14 (20) '2.0'\n+05869B Extract OS            00 (0) 'MS-DOS'\n+05869C General Purpose Flag  0000 (0)\n+05869E Compression Method    0000 (0) 'Stored'\n+0586A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0586A4 CRC                   00000000 (0)\n+0586A8 Compressed Size       00000000 (0)\n+0586AC Uncompressed Size     00000000 (0)\n+0586B0 Filename Length       006C (108)\n+0586B2 Extra Length          0009 (9)\n+0586B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x586B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058720 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058722   Length              0005 (5)\n+058724   Flags               01 (1) 'Modification'\n+058725   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+058729 LOCAL HEADER #199     04034B50 (67324752)\n+05872D Extract Zip Spec      14 (20) '2.0'\n+05872E Extract OS            00 (0) 'MS-DOS'\n+05872F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+058731 Compression Method    0000 (0) 'Stored'\n+058733 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058737 CRC                   00000000 (0)\n+05873B Compressed Size       00000000 (0)\n+05873F Uncompressed Size     00000000 (0)\n+058743 Filename Length       0082 (130)\n+058745 Extra Length          0009 (9)\n+058747 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58747: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0587C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0587CB   Length              0005 (5)\n+0587CD   Flags               01 (1) 'Modification'\n+0587CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0587D2 PAYLOAD\n+\n+059C51 DATA DESCRIPTOR       08074B50 (134695760)\n+059C55 CRC                   E43D22D5 (3829211861)\n+059C59 Compressed Size       0000147F (5247)\n+059C5D Uncompressed Size     0000147F (5247)\n+\n+059C61 LOCAL HEADER #200     04034B50 (67324752)\n+059C65 Extract Zip Spec      14 (20) '2.0'\n+059C66 Extract OS            00 (0) 'MS-DOS'\n+059C67 General Purpose Flag  0000 (0)\n+059C69 Compression Method    0000 (0) 'Stored'\n+059C6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059C6F CRC                   00000000 (0)\n+059C73 Compressed Size       00000000 (0)\n+059C77 Uncompressed Size     00000000 (0)\n+059C7B Filename Length       005E (94)\n+059C7D Extra Length          0009 (9)\n+059C7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59C7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059CDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059CDF   Length              0005 (5)\n+059CE1   Flags               01 (1) 'Modification'\n+059CE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+059CE6 LOCAL HEADER #201     04034B50 (67324752)\n+059CEA Extract Zip Spec      14 (20) '2.0'\n+059CEB Extract OS            00 (0) 'MS-DOS'\n+059CEC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+059CEE Compression Method    0000 (0) 'Stored'\n+059CF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+059CF4 CRC                   00000000 (0)\n+059CF8 Compressed Size       00000000 (0)\n+059CFC Uncompressed Size     00000000 (0)\n+059D00 Filename Length       0074 (116)\n+059D02 Extra Length          0009 (9)\n+059D04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x59D04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+059D78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+059D7A   Length              0005 (5)\n+059D7C   Flags               01 (1) 'Modification'\n+059D7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+059D81 PAYLOAD\n+\n+05ADE1 DATA DESCRIPTOR       08074B50 (134695760)\n+05ADE5 CRC                   D765846F (3613754479)\n+05ADE9 Compressed Size       00001060 (4192)\n+05ADED Uncompressed Size     00001060 (4192)\n+\n+05ADF1 LOCAL HEADER #202     04034B50 (67324752)\n+05ADF5 Extract Zip Spec      14 (20) '2.0'\n+05ADF6 Extract OS            00 (0) 'MS-DOS'\n+05ADF7 General Purpose Flag  0000 (0)\n+05ADF9 Compression Method    0000 (0) 'Stored'\n+05ADFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05ADFF CRC                   00000000 (0)\n+05AE03 Compressed Size       00000000 (0)\n+05AE07 Uncompressed Size     00000000 (0)\n+05AE0B Filename Length       005E (94)\n+05AE0D Extra Length          0009 (9)\n+05AE0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5AE0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05AE6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05AE6F   Length              0005 (5)\n+05AE71   Flags               01 (1) 'Modification'\n+05AE72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05AE76 LOCAL HEADER #203     04034B50 (67324752)\n+05AE7A Extract Zip Spec      14 (20) '2.0'\n+05AE7B Extract OS            00 (0) 'MS-DOS'\n+05AE7C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05AE7E Compression Method    0000 (0) 'Stored'\n+05AE80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05AE84 CRC                   00000000 (0)\n+05AE88 Compressed Size       00000000 (0)\n+05AE8C Uncompressed Size     00000000 (0)\n+05AE90 Filename Length       0074 (116)\n+05AE92 Extra Length          0009 (9)\n+05AE94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5AE94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05AF08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05AF0A   Length              0005 (5)\n+05AF0C   Flags               01 (1) 'Modification'\n+05AF0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05AF11 PAYLOAD\n+\n+05C06D DATA DESCRIPTOR       08074B50 (134695760)\n+05C071 CRC                   57E394F3 (1474532595)\n+05C075 Compressed Size       0000115C (4444)\n+05C079 Uncompressed Size     0000115C (4444)\n+\n+05C07D LOCAL HEADER #204     04034B50 (67324752)\n+05C081 Extract Zip Spec      14 (20) '2.0'\n+05C082 Extract OS            00 (0) 'MS-DOS'\n+05C083 General Purpose Flag  0000 (0)\n+05C085 Compression Method    0000 (0) 'Stored'\n+05C087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C08B CRC                   00000000 (0)\n+05C08F Compressed Size       00000000 (0)\n+05C093 Uncompressed Size     00000000 (0)\n+05C097 Filename Length       0028 (40)\n+05C099 Extra Length          0009 (9)\n+05C09B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5C09B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05C0C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C0C5   Length              0005 (5)\n+05C0C7   Flags               01 (1) 'Modification'\n+05C0C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05C0CC LOCAL HEADER #205     04034B50 (67324752)\n+05C0D0 Extract Zip Spec      14 (20) '2.0'\n+05C0D1 Extract OS            00 (0) 'MS-DOS'\n+05C0D2 General Purpose Flag  0000 (0)\n+05C0D4 Compression Method    0000 (0) 'Stored'\n+05C0D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C0DA CRC                   00000000 (0)\n+05C0DE Compressed Size       00000000 (0)\n+05C0E2 Uncompressed Size     00000000 (0)\n+05C0E6 Filename Length       002F (47)\n+05C0E8 Extra Length          0009 (9)\n+05C0EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5C0EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05C119 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C11B   Length              0005 (5)\n+05C11D   Flags               01 (1) 'Modification'\n+05C11E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05C122 LOCAL HEADER #206     04034B50 (67324752)\n+05C126 Extract Zip Spec      14 (20) '2.0'\n+05C127 Extract OS            00 (0) 'MS-DOS'\n+05C128 General Purpose Flag  0000 (0)\n+05C12A Compression Method    0000 (0) 'Stored'\n+05C12C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C130 CRC                   00000000 (0)\n+05C134 Compressed Size       00000000 (0)\n+05C138 Uncompressed Size     00000000 (0)\n+05C13C Filename Length       006E (110)\n+05C13E Extra Length          0009 (9)\n+05C140 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5C140: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05C1AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C1B0   Length              0005 (5)\n+05C1B2   Flags               01 (1) 'Modification'\n+05C1B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05C1B7 LOCAL HEADER #207     04034B50 (67324752)\n+05C1BB Extract Zip Spec      14 (20) '2.0'\n+05C1BC Extract OS            00 (0) 'MS-DOS'\n+05C1BD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05C1BF Compression Method    0000 (0) 'Stored'\n+05C1C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05C1C5 CRC                   00000000 (0)\n+05C1C9 Compressed Size       00000000 (0)\n+05C1CD Uncompressed Size     00000000 (0)\n+05C1D1 Filename Length       0084 (132)\n+05C1D3 Extra Length          0009 (9)\n+05C1D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x58FEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5C1D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05906E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-059070   Length              0005 (5)\n-059072   Flags               01 (1) 'Modification'\n-059073   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-059077 PAYLOAD\n-\n-05AAA3 DATA DESCRIPTOR       08074B50 (134695760)\n-05AAA7 CRC                   4293EC30 (1116990512)\n-05AAAB Compressed Size       00001A2C (6700)\n-05AAAF Uncompressed Size     00001A2C (6700)\n-\n-05AAB3 LOCAL HEADER #208     04034B50 (67324752)\n-05AAB7 Extract Zip Spec      14 (20) '2.0'\n-05AAB8 Extract OS            00 (0) 'MS-DOS'\n-05AAB9 General Purpose Flag  0000 (0)\n-05AABB Compression Method    0000 (0) 'Stored'\n-05AABD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05AAC1 CRC                   00000000 (0)\n-05AAC5 Compressed Size       00000000 (0)\n-05AAC9 Uncompressed Size     00000000 (0)\n-05AACD Filename Length       0068 (104)\n-05AACF Extra Length          0009 (9)\n-05AAD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5AAD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05AB39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05AB3B   Length              0005 (5)\n-05AB3D   Flags               01 (1) 'Modification'\n-05AB3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05AB42 LOCAL HEADER #209     04034B50 (67324752)\n-05AB46 Extract Zip Spec      14 (20) '2.0'\n-05AB47 Extract OS            00 (0) 'MS-DOS'\n-05AB48 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05AB4A Compression Method    0000 (0) 'Stored'\n-05AB4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05AB50 CRC                   00000000 (0)\n-05AB54 Compressed Size       00000000 (0)\n-05AB58 Uncompressed Size     00000000 (0)\n-05AB5C Filename Length       007E (126)\n-05AB5E Extra Length          0009 (9)\n-05AB60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5AB60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05ABDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05ABE0   Length              0005 (5)\n-05ABE2   Flags               01 (1) 'Modification'\n-05ABE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05ABE7 PAYLOAD\n-\n-05C5D6 DATA DESCRIPTOR       08074B50 (134695760)\n-05C5DA CRC                   83659368 (2204472168)\n-05C5DE Compressed Size       000019EF (6639)\n-05C5E2 Uncompressed Size     000019EF (6639)\n-\n-05C5E6 LOCAL HEADER #210     04034B50 (67324752)\n-05C5EA Extract Zip Spec      14 (20) '2.0'\n-05C5EB Extract OS            00 (0) 'MS-DOS'\n-05C5EC General Purpose Flag  0000 (0)\n-05C5EE Compression Method    0000 (0) 'Stored'\n-05C5F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C5F4 CRC                   00000000 (0)\n-05C5F8 Compressed Size       00000000 (0)\n-05C5FC Uncompressed Size     00000000 (0)\n-05C600 Filename Length       006E (110)\n-05C602 Extra Length          0009 (9)\n-05C604 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5C604: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05C672 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05C674   Length              0005 (5)\n-05C676   Flags               01 (1) 'Modification'\n-05C677   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05C67B LOCAL HEADER #211     04034B50 (67324752)\n-05C67F Extract Zip Spec      14 (20) '2.0'\n-05C680 Extract OS            00 (0) 'MS-DOS'\n-05C681 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05C683 Compression Method    0000 (0) 'Stored'\n-05C685 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05C689 CRC                   00000000 (0)\n-05C68D Compressed Size       00000000 (0)\n-05C691 Uncompressed Size     00000000 (0)\n-05C695 Filename Length       0084 (132)\n-05C697 Extra Length          0009 (9)\n-05C699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05C259 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05C25B   Length              0005 (5)\n+05C25D   Flags               01 (1) 'Modification'\n+05C25E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05C262 PAYLOAD\n+\n+05DC8E DATA DESCRIPTOR       08074B50 (134695760)\n+05DC92 CRC                   4293EC30 (1116990512)\n+05DC96 Compressed Size       00001A2C (6700)\n+05DC9A Uncompressed Size     00001A2C (6700)\n+\n+05DC9E LOCAL HEADER #208     04034B50 (67324752)\n+05DCA2 Extract Zip Spec      14 (20) '2.0'\n+05DCA3 Extract OS            00 (0) 'MS-DOS'\n+05DCA4 General Purpose Flag  0000 (0)\n+05DCA6 Compression Method    0000 (0) 'Stored'\n+05DCA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05DCAC CRC                   00000000 (0)\n+05DCB0 Compressed Size       00000000 (0)\n+05DCB4 Uncompressed Size     00000000 (0)\n+05DCB8 Filename Length       0068 (104)\n+05DCBA Extra Length          0009 (9)\n+05DCBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DCBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DD24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DD26   Length              0005 (5)\n+05DD28   Flags               01 (1) 'Modification'\n+05DD29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05DD2D LOCAL HEADER #209     04034B50 (67324752)\n+05DD31 Extract Zip Spec      14 (20) '2.0'\n+05DD32 Extract OS            00 (0) 'MS-DOS'\n+05DD33 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05DD35 Compression Method    0000 (0) 'Stored'\n+05DD37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05DD3B CRC                   00000000 (0)\n+05DD3F Compressed Size       00000000 (0)\n+05DD43 Uncompressed Size     00000000 (0)\n+05DD47 Filename Length       007E (126)\n+05DD49 Extra Length          0009 (9)\n+05DD4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DD4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DDC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DDCB   Length              0005 (5)\n+05DDCD   Flags               01 (1) 'Modification'\n+05DDCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05DDD2 PAYLOAD\n+\n+05F7C1 DATA DESCRIPTOR       08074B50 (134695760)\n+05F7C5 CRC                   83659368 (2204472168)\n+05F7C9 Compressed Size       000019EF (6639)\n+05F7CD Uncompressed Size     000019EF (6639)\n+\n+05F7D1 LOCAL HEADER #210     04034B50 (67324752)\n+05F7D5 Extract Zip Spec      14 (20) '2.0'\n+05F7D6 Extract OS            00 (0) 'MS-DOS'\n+05F7D7 General Purpose Flag  0000 (0)\n+05F7D9 Compression Method    0000 (0) 'Stored'\n+05F7DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F7DF CRC                   00000000 (0)\n+05F7E3 Compressed Size       00000000 (0)\n+05F7E7 Uncompressed Size     00000000 (0)\n+05F7EB Filename Length       006E (110)\n+05F7ED Extra Length          0009 (9)\n+05F7EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05F85D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F85F   Length              0005 (5)\n+05F861   Flags               01 (1) 'Modification'\n+05F862   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05F866 LOCAL HEADER #211     04034B50 (67324752)\n+05F86A Extract Zip Spec      14 (20) '2.0'\n+05F86B Extract OS            00 (0) 'MS-DOS'\n+05F86C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05F86E Compression Method    0000 (0) 'Stored'\n+05F870 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F874 CRC                   00000000 (0)\n+05F878 Compressed Size       00000000 (0)\n+05F87C Uncompressed Size     00000000 (0)\n+05F880 Filename Length       0084 (132)\n+05F882 Extra Length          0009 (9)\n+05F884 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x5C699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F884: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05C71D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05C71F   Length              0005 (5)\n-05C721   Flags               01 (1) 'Modification'\n-05C722   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05C726 PAYLOAD\n-\n-05E220 DATA DESCRIPTOR       08074B50 (134695760)\n-05E224 CRC                   73F3DBE5 (1945361381)\n-05E228 Compressed Size       00001AFA (6906)\n-05E22C Uncompressed Size     00001AFA (6906)\n-\n-05E230 LOCAL HEADER #212     04034B50 (67324752)\n-05E234 Extract Zip Spec      14 (20) '2.0'\n-05E235 Extract OS            00 (0) 'MS-DOS'\n-05E236 General Purpose Flag  0000 (0)\n-05E238 Compression Method    0000 (0) 'Stored'\n-05E23A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E23E CRC                   00000000 (0)\n-05E242 Compressed Size       00000000 (0)\n-05E246 Uncompressed Size     00000000 (0)\n-05E24A Filename Length       0068 (104)\n-05E24C Extra Length          0009 (9)\n-05E24E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E24E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E2B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E2B8   Length              0005 (5)\n-05E2BA   Flags               01 (1) 'Modification'\n-05E2BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05E2BF LOCAL HEADER #213     04034B50 (67324752)\n-05E2C3 Extract Zip Spec      14 (20) '2.0'\n-05E2C4 Extract OS            00 (0) 'MS-DOS'\n-05E2C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05E2C7 Compression Method    0000 (0) 'Stored'\n-05E2C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E2CD CRC                   00000000 (0)\n-05E2D1 Compressed Size       00000000 (0)\n-05E2D5 Uncompressed Size     00000000 (0)\n-05E2D9 Filename Length       007E (126)\n-05E2DB Extra Length          0009 (9)\n-05E2DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E2DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E35B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E35D   Length              0005 (5)\n-05E35F   Flags               01 (1) 'Modification'\n-05E360   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05E364 PAYLOAD\n-\n-0601E7 DATA DESCRIPTOR       08074B50 (134695760)\n-0601EB CRC                   847E83D6 (2222883798)\n-0601EF Compressed Size       00001E83 (7811)\n-0601F3 Uncompressed Size     00001E83 (7811)\n-\n-0601F7 LOCAL HEADER #214     04034B50 (67324752)\n-0601FB Extract Zip Spec      14 (20) '2.0'\n-0601FC Extract OS            00 (0) 'MS-DOS'\n-0601FD General Purpose Flag  0000 (0)\n-0601FF Compression Method    0000 (0) 'Stored'\n-060201 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-060205 CRC                   00000000 (0)\n-060209 Compressed Size       00000000 (0)\n-06020D Uncompressed Size     00000000 (0)\n-060211 Filename Length       0028 (40)\n-060213 Extra Length          0009 (9)\n-060215 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x60215: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06023D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06023F   Length              0005 (5)\n-060241   Flags               01 (1) 'Modification'\n-060242   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-060246 LOCAL HEADER #215     04034B50 (67324752)\n-06024A Extract Zip Spec      14 (20) '2.0'\n-06024B Extract OS            00 (0) 'MS-DOS'\n-06024C General Purpose Flag  0000 (0)\n-06024E Compression Method    0000 (0) 'Stored'\n-060250 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-060254 CRC                   00000000 (0)\n-060258 Compressed Size       00000000 (0)\n-06025C Uncompressed Size     00000000 (0)\n-060260 Filename Length       002F (47)\n-060262 Extra Length          0009 (9)\n-060264 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x60264: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-060293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-060295   Length              0005 (5)\n-060297   Flags               01 (1) 'Modification'\n-060298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06029C LOCAL HEADER #216     04034B50 (67324752)\n-0602A0 Extract Zip Spec      14 (20) '2.0'\n-0602A1 Extract OS            00 (0) 'MS-DOS'\n-0602A2 General Purpose Flag  0000 (0)\n-0602A4 Compression Method    0000 (0) 'Stored'\n-0602A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0602AA CRC                   00000000 (0)\n-0602AE Compressed Size       00000000 (0)\n-0602B2 Uncompressed Size     00000000 (0)\n-0602B6 Filename Length       006E (110)\n-0602B8 Extra Length          0009 (9)\n-0602BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x602BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-060328 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06032A   Length              0005 (5)\n-06032C   Flags               01 (1) 'Modification'\n-06032D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-060331 LOCAL HEADER #217     04034B50 (67324752)\n-060335 Extract Zip Spec      14 (20) '2.0'\n-060336 Extract OS            00 (0) 'MS-DOS'\n-060337 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-060339 Compression Method    0000 (0) 'Stored'\n-06033B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06033F CRC                   00000000 (0)\n-060343 Compressed Size       00000000 (0)\n-060347 Uncompressed Size     00000000 (0)\n-06034B Filename Length       0084 (132)\n-06034D Extra Length          0009 (9)\n-06034F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05F908 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F90A   Length              0005 (5)\n+05F90C   Flags               01 (1) 'Modification'\n+05F90D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05F911 PAYLOAD\n+\n+06140B DATA DESCRIPTOR       08074B50 (134695760)\n+06140F CRC                   73F3DBE5 (1945361381)\n+061413 Compressed Size       00001AFA (6906)\n+061417 Uncompressed Size     00001AFA (6906)\n+\n+06141B LOCAL HEADER #212     04034B50 (67324752)\n+06141F Extract Zip Spec      14 (20) '2.0'\n+061420 Extract OS            00 (0) 'MS-DOS'\n+061421 General Purpose Flag  0000 (0)\n+061423 Compression Method    0000 (0) 'Stored'\n+061425 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+061429 CRC                   00000000 (0)\n+06142D Compressed Size       00000000 (0)\n+061431 Uncompressed Size     00000000 (0)\n+061435 Filename Length       0068 (104)\n+061437 Extra Length          0009 (9)\n+061439 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x61439: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0614A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0614A3   Length              0005 (5)\n+0614A5   Flags               01 (1) 'Modification'\n+0614A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0614AA LOCAL HEADER #213     04034B50 (67324752)\n+0614AE Extract Zip Spec      14 (20) '2.0'\n+0614AF Extract OS            00 (0) 'MS-DOS'\n+0614B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0614B2 Compression Method    0000 (0) 'Stored'\n+0614B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0614B8 CRC                   00000000 (0)\n+0614BC Compressed Size       00000000 (0)\n+0614C0 Uncompressed Size     00000000 (0)\n+0614C4 Filename Length       007E (126)\n+0614C6 Extra Length          0009 (9)\n+0614C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x614C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+061546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+061548   Length              0005 (5)\n+06154A   Flags               01 (1) 'Modification'\n+06154B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06154F PAYLOAD\n+\n+0633D2 DATA DESCRIPTOR       08074B50 (134695760)\n+0633D6 CRC                   847E83D6 (2222883798)\n+0633DA Compressed Size       00001E83 (7811)\n+0633DE Uncompressed Size     00001E83 (7811)\n+\n+0633E2 LOCAL HEADER #214     04034B50 (67324752)\n+0633E6 Extract Zip Spec      14 (20) '2.0'\n+0633E7 Extract OS            00 (0) 'MS-DOS'\n+0633E8 General Purpose Flag  0000 (0)\n+0633EA Compression Method    0000 (0) 'Stored'\n+0633EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0633F0 CRC                   00000000 (0)\n+0633F4 Compressed Size       00000000 (0)\n+0633F8 Uncompressed Size     00000000 (0)\n+0633FC Filename Length       0028 (40)\n+0633FE Extra Length          0009 (9)\n+063400 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x63400: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+063428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06342A   Length              0005 (5)\n+06342C   Flags               01 (1) 'Modification'\n+06342D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+063431 LOCAL HEADER #215     04034B50 (67324752)\n+063435 Extract Zip Spec      14 (20) '2.0'\n+063436 Extract OS            00 (0) 'MS-DOS'\n+063437 General Purpose Flag  0000 (0)\n+063439 Compression Method    0000 (0) 'Stored'\n+06343B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06343F CRC                   00000000 (0)\n+063443 Compressed Size       00000000 (0)\n+063447 Uncompressed Size     00000000 (0)\n+06344B Filename Length       002F (47)\n+06344D Extra Length          0009 (9)\n+06344F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6344F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06347E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+063480   Length              0005 (5)\n+063482   Flags               01 (1) 'Modification'\n+063483   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+063487 LOCAL HEADER #216     04034B50 (67324752)\n+06348B Extract Zip Spec      14 (20) '2.0'\n+06348C Extract OS            00 (0) 'MS-DOS'\n+06348D General Purpose Flag  0000 (0)\n+06348F Compression Method    0000 (0) 'Stored'\n+063491 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+063495 CRC                   00000000 (0)\n+063499 Compressed Size       00000000 (0)\n+06349D Uncompressed Size     00000000 (0)\n+0634A1 Filename Length       006E (110)\n+0634A3 Extra Length          0009 (9)\n+0634A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x634A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+063513 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+063515   Length              0005 (5)\n+063517   Flags               01 (1) 'Modification'\n+063518   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06351C LOCAL HEADER #217     04034B50 (67324752)\n+063520 Extract Zip Spec      14 (20) '2.0'\n+063521 Extract OS            00 (0) 'MS-DOS'\n+063522 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+063524 Compression Method    0000 (0) 'Stored'\n+063526 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06352A CRC                   00000000 (0)\n+06352E Compressed Size       00000000 (0)\n+063532 Uncompressed Size     00000000 (0)\n+063536 Filename Length       0084 (132)\n+063538 Extra Length          0009 (9)\n+06353A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x6034F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6353A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0603D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0603D5   Length              0005 (5)\n-0603D7   Flags               01 (1) 'Modification'\n-0603D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0603DC PAYLOAD\n-\n-0641D7 DATA DESCRIPTOR       08074B50 (134695760)\n-0641DB CRC                   8DCDE743 (2379081539)\n-0641DF Compressed Size       00003DFB (15867)\n-0641E3 Uncompressed Size     00003DFB (15867)\n-\n-0641E7 LOCAL HEADER #218     04034B50 (67324752)\n-0641EB Extract Zip Spec      14 (20) '2.0'\n-0641EC Extract OS            00 (0) 'MS-DOS'\n-0641ED General Purpose Flag  0000 (0)\n-0641EF Compression Method    0000 (0) 'Stored'\n-0641F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0641F5 CRC                   00000000 (0)\n-0641F9 Compressed Size       00000000 (0)\n-0641FD Uncompressed Size     00000000 (0)\n-064201 Filename Length       0068 (104)\n-064203 Extra Length          0009 (9)\n-064205 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64205: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06426D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06426F   Length              0005 (5)\n-064271   Flags               01 (1) 'Modification'\n-064272   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-064276 LOCAL HEADER #219     04034B50 (67324752)\n-06427A Extract Zip Spec      14 (20) '2.0'\n-06427B Extract OS            00 (0) 'MS-DOS'\n-06427C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06427E Compression Method    0000 (0) 'Stored'\n-064280 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064284 CRC                   00000000 (0)\n-064288 Compressed Size       00000000 (0)\n-06428C Uncompressed Size     00000000 (0)\n-064290 Filename Length       007E (126)\n-064292 Extra Length          0009 (9)\n-064294 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64294: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064312 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064314   Length              0005 (5)\n-064316   Flags               01 (1) 'Modification'\n-064317   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06431B PAYLOAD\n-\n-0680D2 DATA DESCRIPTOR       08074B50 (134695760)\n-0680D6 CRC                   46F84C94 (1190677652)\n-0680DA Compressed Size       00003DB7 (15799)\n-0680DE Uncompressed Size     00003DB7 (15799)\n-\n-0680E2 LOCAL HEADER #220     04034B50 (67324752)\n-0680E6 Extract Zip Spec      14 (20) '2.0'\n-0680E7 Extract OS            00 (0) 'MS-DOS'\n-0680E8 General Purpose Flag  0000 (0)\n-0680EA Compression Method    0000 (0) 'Stored'\n-0680EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0680F0 CRC                   00000000 (0)\n-0680F4 Compressed Size       00000000 (0)\n-0680F8 Uncompressed Size     00000000 (0)\n-0680FC Filename Length       006E (110)\n-0680FE Extra Length          0009 (9)\n-068100 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68100: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06816E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068170   Length              0005 (5)\n-068172   Flags               01 (1) 'Modification'\n-068173   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-068177 LOCAL HEADER #221     04034B50 (67324752)\n-06817B Extract Zip Spec      14 (20) '2.0'\n-06817C Extract OS            00 (0) 'MS-DOS'\n-06817D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06817F Compression Method    0000 (0) 'Stored'\n-068181 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068185 CRC                   00000000 (0)\n-068189 Compressed Size       00000000 (0)\n-06818D Uncompressed Size     00000000 (0)\n-068191 Filename Length       0084 (132)\n-068193 Extra Length          0009 (9)\n-068195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0635BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0635C0   Length              0005 (5)\n+0635C2   Flags               01 (1) 'Modification'\n+0635C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0635C7 PAYLOAD\n+\n+0673C2 DATA DESCRIPTOR       08074B50 (134695760)\n+0673C6 CRC                   8DCDE743 (2379081539)\n+0673CA Compressed Size       00003DFB (15867)\n+0673CE Uncompressed Size     00003DFB (15867)\n+\n+0673D2 LOCAL HEADER #218     04034B50 (67324752)\n+0673D6 Extract Zip Spec      14 (20) '2.0'\n+0673D7 Extract OS            00 (0) 'MS-DOS'\n+0673D8 General Purpose Flag  0000 (0)\n+0673DA Compression Method    0000 (0) 'Stored'\n+0673DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0673E0 CRC                   00000000 (0)\n+0673E4 Compressed Size       00000000 (0)\n+0673E8 Uncompressed Size     00000000 (0)\n+0673EC Filename Length       0068 (104)\n+0673EE Extra Length          0009 (9)\n+0673F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x673F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+067458 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06745A   Length              0005 (5)\n+06745C   Flags               01 (1) 'Modification'\n+06745D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+067461 LOCAL HEADER #219     04034B50 (67324752)\n+067465 Extract Zip Spec      14 (20) '2.0'\n+067466 Extract OS            00 (0) 'MS-DOS'\n+067467 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+067469 Compression Method    0000 (0) 'Stored'\n+06746B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06746F CRC                   00000000 (0)\n+067473 Compressed Size       00000000 (0)\n+067477 Uncompressed Size     00000000 (0)\n+06747B Filename Length       007E (126)\n+06747D Extra Length          0009 (9)\n+06747F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6747F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0674FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0674FF   Length              0005 (5)\n+067501   Flags               01 (1) 'Modification'\n+067502   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+067506 PAYLOAD\n+\n+06B2BD DATA DESCRIPTOR       08074B50 (134695760)\n+06B2C1 CRC                   46F84C94 (1190677652)\n+06B2C5 Compressed Size       00003DB7 (15799)\n+06B2C9 Uncompressed Size     00003DB7 (15799)\n+\n+06B2CD LOCAL HEADER #220     04034B50 (67324752)\n+06B2D1 Extract Zip Spec      14 (20) '2.0'\n+06B2D2 Extract OS            00 (0) 'MS-DOS'\n+06B2D3 General Purpose Flag  0000 (0)\n+06B2D5 Compression Method    0000 (0) 'Stored'\n+06B2D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B2DB CRC                   00000000 (0)\n+06B2DF Compressed Size       00000000 (0)\n+06B2E3 Uncompressed Size     00000000 (0)\n+06B2E7 Filename Length       006E (110)\n+06B2E9 Extra Length          0009 (9)\n+06B2EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B2EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B359 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B35B   Length              0005 (5)\n+06B35D   Flags               01 (1) 'Modification'\n+06B35E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06B362 LOCAL HEADER #221     04034B50 (67324752)\n+06B366 Extract Zip Spec      14 (20) '2.0'\n+06B367 Extract OS            00 (0) 'MS-DOS'\n+06B368 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06B36A Compression Method    0000 (0) 'Stored'\n+06B36C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B370 CRC                   00000000 (0)\n+06B374 Compressed Size       00000000 (0)\n+06B378 Uncompressed Size     00000000 (0)\n+06B37C Filename Length       0084 (132)\n+06B37E Extra Length          0009 (9)\n+06B380 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x68195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6B380: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-068219 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06821B   Length              0005 (5)\n-06821D   Flags               01 (1) 'Modification'\n-06821E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068222 PAYLOAD\n-\n-06AAF1 DATA DESCRIPTOR       08074B50 (134695760)\n-06AAF5 CRC                   96FAF425 (2533028901)\n-06AAF9 Compressed Size       000028CF (10447)\n-06AAFD Uncompressed Size     000028CF (10447)\n-\n-06AB01 LOCAL HEADER #222     04034B50 (67324752)\n-06AB05 Extract Zip Spec      14 (20) '2.0'\n-06AB06 Extract OS            00 (0) 'MS-DOS'\n-06AB07 General Purpose Flag  0000 (0)\n-06AB09 Compression Method    0000 (0) 'Stored'\n-06AB0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06AB0F CRC                   00000000 (0)\n-06AB13 Compressed Size       00000000 (0)\n-06AB17 Uncompressed Size     00000000 (0)\n-06AB1B Filename Length       0068 (104)\n-06AB1D Extra Length          0009 (9)\n-06AB1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6AB1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06AB87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06AB89   Length              0005 (5)\n-06AB8B   Flags               01 (1) 'Modification'\n-06AB8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06AB90 LOCAL HEADER #223     04034B50 (67324752)\n-06AB94 Extract Zip Spec      14 (20) '2.0'\n-06AB95 Extract OS            00 (0) 'MS-DOS'\n-06AB96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06AB98 Compression Method    0000 (0) 'Stored'\n-06AB9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06AB9E CRC                   00000000 (0)\n-06ABA2 Compressed Size       00000000 (0)\n-06ABA6 Uncompressed Size     00000000 (0)\n-06ABAA Filename Length       007E (126)\n-06ABAC Extra Length          0009 (9)\n-06ABAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6ABAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06AC2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06AC2E   Length              0005 (5)\n-06AC30   Flags               01 (1) 'Modification'\n-06AC31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06AC35 PAYLOAD\n-\n-06D87F DATA DESCRIPTOR       08074B50 (134695760)\n-06D883 CRC                   77DFCD97 (2011155863)\n-06D887 Compressed Size       00002C4A (11338)\n-06D88B Uncompressed Size     00002C4A (11338)\n-\n-06D88F LOCAL HEADER #224     04034B50 (67324752)\n-06D893 Extract Zip Spec      14 (20) '2.0'\n-06D894 Extract OS            00 (0) 'MS-DOS'\n-06D895 General Purpose Flag  0000 (0)\n-06D897 Compression Method    0000 (0) 'Stored'\n-06D899 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D89D CRC                   00000000 (0)\n-06D8A1 Compressed Size       00000000 (0)\n-06D8A5 Uncompressed Size     00000000 (0)\n-06D8A9 Filename Length       0028 (40)\n-06D8AB Extra Length          0009 (9)\n-06D8AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D8AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D8D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D8D7   Length              0005 (5)\n-06D8D9   Flags               01 (1) 'Modification'\n-06D8DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D8DE LOCAL HEADER #225     04034B50 (67324752)\n-06D8E2 Extract Zip Spec      14 (20) '2.0'\n-06D8E3 Extract OS            00 (0) 'MS-DOS'\n-06D8E4 General Purpose Flag  0000 (0)\n-06D8E6 Compression Method    0000 (0) 'Stored'\n-06D8E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D8EC CRC                   00000000 (0)\n-06D8F0 Compressed Size       00000000 (0)\n-06D8F4 Uncompressed Size     00000000 (0)\n-06D8F8 Filename Length       002F (47)\n-06D8FA Extra Length          0009 (9)\n-06D8FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D8FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D92B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D92D   Length              0005 (5)\n-06D92F   Flags               01 (1) 'Modification'\n-06D930   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D934 LOCAL HEADER #226     04034B50 (67324752)\n-06D938 Extract Zip Spec      14 (20) '2.0'\n-06D939 Extract OS            00 (0) 'MS-DOS'\n-06D93A General Purpose Flag  0000 (0)\n-06D93C Compression Method    0000 (0) 'Stored'\n-06D93E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D942 CRC                   00000000 (0)\n-06D946 Compressed Size       00000000 (0)\n-06D94A Uncompressed Size     00000000 (0)\n-06D94E Filename Length       006E (110)\n-06D950 Extra Length          0009 (9)\n-06D952 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D952: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D9C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D9C2   Length              0005 (5)\n-06D9C4   Flags               01 (1) 'Modification'\n-06D9C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D9C9 LOCAL HEADER #227     04034B50 (67324752)\n-06D9CD Extract Zip Spec      14 (20) '2.0'\n-06D9CE Extract OS            00 (0) 'MS-DOS'\n-06D9CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06D9D1 Compression Method    0000 (0) 'Stored'\n-06D9D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D9D7 CRC                   00000000 (0)\n-06D9DB Compressed Size       00000000 (0)\n-06D9DF Uncompressed Size     00000000 (0)\n-06D9E3 Filename Length       0084 (132)\n-06D9E5 Extra Length          0009 (9)\n-06D9E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+06B404 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B406   Length              0005 (5)\n+06B408   Flags               01 (1) 'Modification'\n+06B409   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06B40D PAYLOAD\n+\n+06DCDC DATA DESCRIPTOR       08074B50 (134695760)\n+06DCE0 CRC                   96FAF425 (2533028901)\n+06DCE4 Compressed Size       000028CF (10447)\n+06DCE8 Uncompressed Size     000028CF (10447)\n+\n+06DCEC LOCAL HEADER #222     04034B50 (67324752)\n+06DCF0 Extract Zip Spec      14 (20) '2.0'\n+06DCF1 Extract OS            00 (0) 'MS-DOS'\n+06DCF2 General Purpose Flag  0000 (0)\n+06DCF4 Compression Method    0000 (0) 'Stored'\n+06DCF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DCFA CRC                   00000000 (0)\n+06DCFE Compressed Size       00000000 (0)\n+06DD02 Uncompressed Size     00000000 (0)\n+06DD06 Filename Length       0068 (104)\n+06DD08 Extra Length          0009 (9)\n+06DD0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DD0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DD72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DD74   Length              0005 (5)\n+06DD76   Flags               01 (1) 'Modification'\n+06DD77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06DD7B LOCAL HEADER #223     04034B50 (67324752)\n+06DD7F Extract Zip Spec      14 (20) '2.0'\n+06DD80 Extract OS            00 (0) 'MS-DOS'\n+06DD81 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06DD83 Compression Method    0000 (0) 'Stored'\n+06DD85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DD89 CRC                   00000000 (0)\n+06DD8D Compressed Size       00000000 (0)\n+06DD91 Uncompressed Size     00000000 (0)\n+06DD95 Filename Length       007E (126)\n+06DD97 Extra Length          0009 (9)\n+06DD99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DD99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DE17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DE19   Length              0005 (5)\n+06DE1B   Flags               01 (1) 'Modification'\n+06DE1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06DE20 PAYLOAD\n+\n+070A6A DATA DESCRIPTOR       08074B50 (134695760)\n+070A6E CRC                   77DFCD97 (2011155863)\n+070A72 Compressed Size       00002C4A (11338)\n+070A76 Uncompressed Size     00002C4A (11338)\n+\n+070A7A LOCAL HEADER #224     04034B50 (67324752)\n+070A7E Extract Zip Spec      14 (20) '2.0'\n+070A7F Extract OS            00 (0) 'MS-DOS'\n+070A80 General Purpose Flag  0000 (0)\n+070A82 Compression Method    0000 (0) 'Stored'\n+070A84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070A88 CRC                   00000000 (0)\n+070A8C Compressed Size       00000000 (0)\n+070A90 Uncompressed Size     00000000 (0)\n+070A94 Filename Length       0028 (40)\n+070A96 Extra Length          0009 (9)\n+070A98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70A98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070AC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070AC2   Length              0005 (5)\n+070AC4   Flags               01 (1) 'Modification'\n+070AC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070AC9 LOCAL HEADER #225     04034B50 (67324752)\n+070ACD Extract Zip Spec      14 (20) '2.0'\n+070ACE Extract OS            00 (0) 'MS-DOS'\n+070ACF General Purpose Flag  0000 (0)\n+070AD1 Compression Method    0000 (0) 'Stored'\n+070AD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070AD7 CRC                   00000000 (0)\n+070ADB Compressed Size       00000000 (0)\n+070ADF Uncompressed Size     00000000 (0)\n+070AE3 Filename Length       002F (47)\n+070AE5 Extra Length          0009 (9)\n+070AE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70AE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070B16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070B18   Length              0005 (5)\n+070B1A   Flags               01 (1) 'Modification'\n+070B1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070B1F LOCAL HEADER #226     04034B50 (67324752)\n+070B23 Extract Zip Spec      14 (20) '2.0'\n+070B24 Extract OS            00 (0) 'MS-DOS'\n+070B25 General Purpose Flag  0000 (0)\n+070B27 Compression Method    0000 (0) 'Stored'\n+070B29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070B2D CRC                   00000000 (0)\n+070B31 Compressed Size       00000000 (0)\n+070B35 Uncompressed Size     00000000 (0)\n+070B39 Filename Length       006E (110)\n+070B3B Extra Length          0009 (9)\n+070B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070BAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070BAD   Length              0005 (5)\n+070BAF   Flags               01 (1) 'Modification'\n+070BB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070BB4 LOCAL HEADER #227     04034B50 (67324752)\n+070BB8 Extract Zip Spec      14 (20) '2.0'\n+070BB9 Extract OS            00 (0) 'MS-DOS'\n+070BBA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+070BBC Compression Method    0000 (0) 'Stored'\n+070BBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070BC2 CRC                   00000000 (0)\n+070BC6 Compressed Size       00000000 (0)\n+070BCA Uncompressed Size     00000000 (0)\n+070BCE Filename Length       0084 (132)\n+070BD0 Extra Length          0009 (9)\n+070BD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x6D9E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x70BD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06DA6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06DA6D   Length              0005 (5)\n-06DA6F   Flags               01 (1) 'Modification'\n-06DA70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06DA74 PAYLOAD\n-\n-072B75 DATA DESCRIPTOR       08074B50 (134695760)\n-072B79 CRC                   249CCFCD (614256589)\n-072B7D Compressed Size       00005101 (20737)\n-072B81 Uncompressed Size     00005101 (20737)\n-\n-072B85 LOCAL HEADER #228     04034B50 (67324752)\n-072B89 Extract Zip Spec      14 (20) '2.0'\n-072B8A Extract OS            00 (0) 'MS-DOS'\n-072B8B General Purpose Flag  0000 (0)\n-072B8D Compression Method    0000 (0) 'Stored'\n-072B8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072B93 CRC                   00000000 (0)\n-072B97 Compressed Size       00000000 (0)\n-072B9B Uncompressed Size     00000000 (0)\n-072B9F Filename Length       0068 (104)\n-072BA1 Extra Length          0009 (9)\n-072BA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72BA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-072C0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-072C0D   Length              0005 (5)\n-072C0F   Flags               01 (1) 'Modification'\n-072C10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-072C14 LOCAL HEADER #229     04034B50 (67324752)\n-072C18 Extract Zip Spec      14 (20) '2.0'\n-072C19 Extract OS            00 (0) 'MS-DOS'\n-072C1A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-072C1C Compression Method    0000 (0) 'Stored'\n-072C1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072C22 CRC                   00000000 (0)\n-072C26 Compressed Size       00000000 (0)\n-072C2A Uncompressed Size     00000000 (0)\n-072C2E Filename Length       007E (126)\n-072C30 Extra Length          0009 (9)\n-072C32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72C32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-072CB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-072CB2   Length              0005 (5)\n-072CB4   Flags               01 (1) 'Modification'\n-072CB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-072CB9 PAYLOAD\n-\n-076A70 DATA DESCRIPTOR       08074B50 (134695760)\n-076A74 CRC                   46DA6369 (1188717417)\n-076A78 Compressed Size       00003DB7 (15799)\n-076A7C Uncompressed Size     00003DB7 (15799)\n-\n-076A80 LOCAL HEADER #230     04034B50 (67324752)\n-076A84 Extract Zip Spec      14 (20) '2.0'\n-076A85 Extract OS            00 (0) 'MS-DOS'\n-076A86 General Purpose Flag  0000 (0)\n-076A88 Compression Method    0000 (0) 'Stored'\n-076A8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076A8E CRC                   00000000 (0)\n-076A92 Compressed Size       00000000 (0)\n-076A96 Uncompressed Size     00000000 (0)\n-076A9A Filename Length       006E (110)\n-076A9C Extra Length          0009 (9)\n-076A9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x76A9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076B0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-076B0E   Length              0005 (5)\n-076B10   Flags               01 (1) 'Modification'\n-076B11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-076B15 LOCAL HEADER #231     04034B50 (67324752)\n-076B19 Extract Zip Spec      14 (20) '2.0'\n-076B1A Extract OS            00 (0) 'MS-DOS'\n-076B1B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-076B1D Compression Method    0000 (0) 'Stored'\n-076B1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076B23 CRC                   00000000 (0)\n-076B27 Compressed Size       00000000 (0)\n-076B2B Uncompressed Size     00000000 (0)\n-076B2F Filename Length       0084 (132)\n-076B31 Extra Length          0009 (9)\n-076B33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+070C56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070C58   Length              0005 (5)\n+070C5A   Flags               01 (1) 'Modification'\n+070C5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+070C5F PAYLOAD\n+\n+075D60 DATA DESCRIPTOR       08074B50 (134695760)\n+075D64 CRC                   249CCFCD (614256589)\n+075D68 Compressed Size       00005101 (20737)\n+075D6C Uncompressed Size     00005101 (20737)\n+\n+075D70 LOCAL HEADER #228     04034B50 (67324752)\n+075D74 Extract Zip Spec      14 (20) '2.0'\n+075D75 Extract OS            00 (0) 'MS-DOS'\n+075D76 General Purpose Flag  0000 (0)\n+075D78 Compression Method    0000 (0) 'Stored'\n+075D7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075D7E CRC                   00000000 (0)\n+075D82 Compressed Size       00000000 (0)\n+075D86 Uncompressed Size     00000000 (0)\n+075D8A Filename Length       0068 (104)\n+075D8C Extra Length          0009 (9)\n+075D8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75D8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+075DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+075DF8   Length              0005 (5)\n+075DFA   Flags               01 (1) 'Modification'\n+075DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+075DFF LOCAL HEADER #229     04034B50 (67324752)\n+075E03 Extract Zip Spec      14 (20) '2.0'\n+075E04 Extract OS            00 (0) 'MS-DOS'\n+075E05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+075E07 Compression Method    0000 (0) 'Stored'\n+075E09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075E0D CRC                   00000000 (0)\n+075E11 Compressed Size       00000000 (0)\n+075E15 Uncompressed Size     00000000 (0)\n+075E19 Filename Length       007E (126)\n+075E1B Extra Length          0009 (9)\n+075E1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75E1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+075E9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+075E9D   Length              0005 (5)\n+075E9F   Flags               01 (1) 'Modification'\n+075EA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+075EA4 PAYLOAD\n+\n+079C5B DATA DESCRIPTOR       08074B50 (134695760)\n+079C5F CRC                   46DA6369 (1188717417)\n+079C63 Compressed Size       00003DB7 (15799)\n+079C67 Uncompressed Size     00003DB7 (15799)\n+\n+079C6B LOCAL HEADER #230     04034B50 (67324752)\n+079C6F Extract Zip Spec      14 (20) '2.0'\n+079C70 Extract OS            00 (0) 'MS-DOS'\n+079C71 General Purpose Flag  0000 (0)\n+079C73 Compression Method    0000 (0) 'Stored'\n+079C75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+079C79 CRC                   00000000 (0)\n+079C7D Compressed Size       00000000 (0)\n+079C81 Uncompressed Size     00000000 (0)\n+079C85 Filename Length       006E (110)\n+079C87 Extra Length          0009 (9)\n+079C89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x79C89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+079CF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+079CF9   Length              0005 (5)\n+079CFB   Flags               01 (1) 'Modification'\n+079CFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+079D00 LOCAL HEADER #231     04034B50 (67324752)\n+079D04 Extract Zip Spec      14 (20) '2.0'\n+079D05 Extract OS            00 (0) 'MS-DOS'\n+079D06 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+079D08 Compression Method    0000 (0) 'Stored'\n+079D0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+079D0E CRC                   00000000 (0)\n+079D12 Compressed Size       00000000 (0)\n+079D16 Uncompressed Size     00000000 (0)\n+079D1A Filename Length       0084 (132)\n+079D1C Extra Length          0009 (9)\n+079D1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x76B33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x79D1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-076BB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-076BB9   Length              0005 (5)\n-076BBB   Flags               01 (1) 'Modification'\n-076BBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-076BC0 PAYLOAD\n-\n-0807FB DATA DESCRIPTOR       08074B50 (134695760)\n-0807FF CRC                   6668C19E (1718141342)\n-080803 Compressed Size       00009C3B (39995)\n-080807 Uncompressed Size     00009C3B (39995)\n-\n-08080B LOCAL HEADER #232     04034B50 (67324752)\n-08080F Extract Zip Spec      14 (20) '2.0'\n-080810 Extract OS            00 (0) 'MS-DOS'\n-080811 General Purpose Flag  0000 (0)\n-080813 Compression Method    0000 (0) 'Stored'\n-080815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-080819 CRC                   00000000 (0)\n-08081D Compressed Size       00000000 (0)\n-080821 Uncompressed Size     00000000 (0)\n-080825 Filename Length       0068 (104)\n-080827 Extra Length          0009 (9)\n-080829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x80829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-080891 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-080893   Length              0005 (5)\n-080895   Flags               01 (1) 'Modification'\n-080896   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08089A LOCAL HEADER #233     04034B50 (67324752)\n-08089E Extract Zip Spec      14 (20) '2.0'\n-08089F Extract OS            00 (0) 'MS-DOS'\n-0808A0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0808A2 Compression Method    0000 (0) 'Stored'\n-0808A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0808A8 CRC                   00000000 (0)\n-0808AC Compressed Size       00000000 (0)\n-0808B0 Uncompressed Size     00000000 (0)\n-0808B4 Filename Length       007E (126)\n-0808B6 Extra Length          0009 (9)\n-0808B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x808B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-080936 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-080938   Length              0005 (5)\n-08093A   Flags               01 (1) 'Modification'\n-08093B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08093F PAYLOAD\n-\n-083589 DATA DESCRIPTOR       08074B50 (134695760)\n-08358D CRC                   23E20FDA (602017754)\n-083591 Compressed Size       00002C4A (11338)\n-083595 Uncompressed Size     00002C4A (11338)\n-\n-083599 LOCAL HEADER #234     04034B50 (67324752)\n-08359D Extract Zip Spec      14 (20) '2.0'\n-08359E Extract OS            00 (0) 'MS-DOS'\n-08359F General Purpose Flag  0000 (0)\n-0835A1 Compression Method    0000 (0) 'Stored'\n-0835A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0835A7 CRC                   00000000 (0)\n-0835AB Compressed Size       00000000 (0)\n-0835AF Uncompressed Size     00000000 (0)\n-0835B3 Filename Length       0023 (35)\n-0835B5 Extra Length          0009 (9)\n-0835B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x835B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0835DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0835DC   Length              0005 (5)\n-0835DE   Flags               01 (1) 'Modification'\n-0835DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0835E3 LOCAL HEADER #235     04034B50 (67324752)\n-0835E7 Extract Zip Spec      14 (20) '2.0'\n-0835E8 Extract OS            00 (0) 'MS-DOS'\n-0835E9 General Purpose Flag  0000 (0)\n-0835EB Compression Method    0000 (0) 'Stored'\n-0835ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0835F1 CRC                   00000000 (0)\n-0835F5 Compressed Size       00000000 (0)\n-0835F9 Uncompressed Size     00000000 (0)\n-0835FD Filename Length       002A (42)\n-0835FF Extra Length          0009 (9)\n-083601 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x83601: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08362B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08362D   Length              0005 (5)\n-08362F   Flags               01 (1) 'Modification'\n-083630   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-083634 LOCAL HEADER #236     04034B50 (67324752)\n-083638 Extract Zip Spec      14 (20) '2.0'\n-083639 Extract OS            00 (0) 'MS-DOS'\n-08363A General Purpose Flag  0000 (0)\n-08363C Compression Method    0000 (0) 'Stored'\n-08363E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-083642 CRC                   00000000 (0)\n-083646 Compressed Size       00000000 (0)\n-08364A Uncompressed Size     00000000 (0)\n-08364E Filename Length       0052 (82)\n-083650 Extra Length          0009 (9)\n-083652 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x83652: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0836A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0836A6   Length              0005 (5)\n-0836A8   Flags               01 (1) 'Modification'\n-0836A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0836AD LOCAL HEADER #237     04034B50 (67324752)\n-0836B1 Extract Zip Spec      14 (20) '2.0'\n-0836B2 Extract OS            00 (0) 'MS-DOS'\n-0836B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0836B5 Compression Method    0000 (0) 'Stored'\n-0836B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0836BB CRC                   00000000 (0)\n-0836BF Compressed Size       00000000 (0)\n-0836C3 Uncompressed Size     00000000 (0)\n-0836C7 Filename Length       0068 (104)\n-0836C9 Extra Length          0009 (9)\n-0836CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x836CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-083733 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-083735   Length              0005 (5)\n-083737   Flags               01 (1) 'Modification'\n-083738   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08373C PAYLOAD\n-\n-0851F9 DATA DESCRIPTOR       08074B50 (134695760)\n-0851FD CRC                   90D14EC3 (2429636291)\n-085201 Compressed Size       00001ABD (6845)\n-085205 Uncompressed Size     00001ABD (6845)\n-\n-085209 LOCAL HEADER #238     04034B50 (67324752)\n-08520D Extract Zip Spec      14 (20) '2.0'\n-08520E Extract OS            00 (0) 'MS-DOS'\n-08520F General Purpose Flag  0000 (0)\n-085211 Compression Method    0000 (0) 'Stored'\n-085213 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-085217 CRC                   00000000 (0)\n-08521B Compressed Size       00000000 (0)\n-08521F Uncompressed Size     00000000 (0)\n-085223 Filename Length       002E (46)\n-085225 Extra Length          0009 (9)\n-085227 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x85227: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-085255 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-085257   Length              0005 (5)\n-085259   Flags               01 (1) 'Modification'\n-08525A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08525E LOCAL HEADER #239     04034B50 (67324752)\n-085262 Extract Zip Spec      14 (20) '2.0'\n-085263 Extract OS            00 (0) 'MS-DOS'\n-085264 General Purpose Flag  0000 (0)\n-085266 Compression Method    0000 (0) 'Stored'\n-085268 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08526C CRC                   00000000 (0)\n-085270 Compressed Size       00000000 (0)\n-085274 Uncompressed Size     00000000 (0)\n-085278 Filename Length       0035 (53)\n-08527A Extra Length          0009 (9)\n-08527C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8527C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0852B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0852B3   Length              0005 (5)\n-0852B5   Flags               01 (1) 'Modification'\n-0852B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0852BA LOCAL HEADER #240     04034B50 (67324752)\n-0852BE Extract Zip Spec      14 (20) '2.0'\n-0852BF Extract OS            00 (0) 'MS-DOS'\n-0852C0 General Purpose Flag  0000 (0)\n-0852C2 Compression Method    0000 (0) 'Stored'\n-0852C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0852C8 CRC                   00000000 (0)\n-0852CC Compressed Size       00000000 (0)\n-0852D0 Uncompressed Size     00000000 (0)\n-0852D4 Filename Length       005E (94)\n-0852D6 Extra Length          0009 (9)\n-0852D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x852D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-085336 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-085338   Length              0005 (5)\n-08533A   Flags               01 (1) 'Modification'\n-08533B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08533F LOCAL HEADER #241     04034B50 (67324752)\n-085343 Extract Zip Spec      14 (20) '2.0'\n-085344 Extract OS            00 (0) 'MS-DOS'\n-085345 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-085347 Compression Method    0000 (0) 'Stored'\n-085349 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08534D CRC                   00000000 (0)\n-085351 Compressed Size       00000000 (0)\n-085355 Uncompressed Size     00000000 (0)\n-085359 Filename Length       0074 (116)\n-08535B Extra Length          0009 (9)\n-08535D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8535D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0853D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0853D3   Length              0005 (5)\n-0853D5   Flags               01 (1) 'Modification'\n-0853D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0853DA PAYLOAD\n-\n-0862B2 DATA DESCRIPTOR       08074B50 (134695760)\n-0862B6 CRC                   F19E6303 (4053689091)\n-0862BA Compressed Size       00000ED8 (3800)\n-0862BE Uncompressed Size     00000ED8 (3800)\n-\n-0862C2 LOCAL HEADER #242     04034B50 (67324752)\n-0862C6 Extract Zip Spec      14 (20) '2.0'\n-0862C7 Extract OS            00 (0) 'MS-DOS'\n-0862C8 General Purpose Flag  0000 (0)\n-0862CA Compression Method    0000 (0) 'Stored'\n-0862CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0862D0 CRC                   00000000 (0)\n-0862D4 Compressed Size       00000000 (0)\n-0862D8 Uncompressed Size     00000000 (0)\n-0862DC Filename Length       0064 (100)\n-0862DE Extra Length          0009 (9)\n-0862E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x862E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-086344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-086346   Length              0005 (5)\n-086348   Flags               01 (1) 'Modification'\n-086349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08634D LOCAL HEADER #243     04034B50 (67324752)\n-086351 Extract Zip Spec      14 (20) '2.0'\n-086352 Extract OS            00 (0) 'MS-DOS'\n-086353 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-086355 Compression Method    0000 (0) 'Stored'\n-086357 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08635B CRC                   00000000 (0)\n-08635F Compressed Size       00000000 (0)\n-086363 Uncompressed Size     00000000 (0)\n-086367 Filename Length       007A (122)\n-086369 Extra Length          0009 (9)\n-08636B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8636B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0863E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0863E7   Length              0005 (5)\n-0863E9   Flags               01 (1) 'Modification'\n-0863EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0863EE PAYLOAD\n-\n-087AC5 DATA DESCRIPTOR       08074B50 (134695760)\n-087AC9 CRC                   51B4F745 (1370814277)\n-087ACD Compressed Size       000016D7 (5847)\n-087AD1 Uncompressed Size     000016D7 (5847)\n-\n-087AD5 LOCAL HEADER #244     04034B50 (67324752)\n-087AD9 Extract Zip Spec      14 (20) '2.0'\n-087ADA Extract OS            00 (0) 'MS-DOS'\n-087ADB General Purpose Flag  0000 (0)\n-087ADD Compression Method    0000 (0) 'Stored'\n-087ADF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087AE3 CRC                   00000000 (0)\n-087AE7 Compressed Size       00000000 (0)\n-087AEB Uncompressed Size     00000000 (0)\n-087AEF Filename Length       0026 (38)\n-087AF1 Extra Length          0009 (9)\n-087AF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87AF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087B19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087B1B   Length              0005 (5)\n-087B1D   Flags               01 (1) 'Modification'\n-087B1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087B22 LOCAL HEADER #245     04034B50 (67324752)\n-087B26 Extract Zip Spec      14 (20) '2.0'\n-087B27 Extract OS            00 (0) 'MS-DOS'\n-087B28 General Purpose Flag  0000 (0)\n-087B2A Compression Method    0000 (0) 'Stored'\n-087B2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087B30 CRC                   00000000 (0)\n-087B34 Compressed Size       00000000 (0)\n-087B38 Uncompressed Size     00000000 (0)\n-087B3C Filename Length       002D (45)\n-087B3E Extra Length          0009 (9)\n-087B40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87B40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087B6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087B6F   Length              0005 (5)\n-087B71   Flags               01 (1) 'Modification'\n-087B72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087B76 LOCAL HEADER #246     04034B50 (67324752)\n-087B7A Extract Zip Spec      14 (20) '2.0'\n-087B7B Extract OS            00 (0) 'MS-DOS'\n-087B7C General Purpose Flag  0000 (0)\n-087B7E Compression Method    0000 (0) 'Stored'\n-087B80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087B84 CRC                   00000000 (0)\n-087B88 Compressed Size       00000000 (0)\n-087B8C Uncompressed Size     00000000 (0)\n-087B90 Filename Length       005C (92)\n-087B92 Extra Length          0009 (9)\n-087B94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87B94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087BF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087BF2   Length              0005 (5)\n-087BF4   Flags               01 (1) 'Modification'\n-087BF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087BF9 LOCAL HEADER #247     04034B50 (67324752)\n-087BFD Extract Zip Spec      14 (20) '2.0'\n-087BFE Extract OS            00 (0) 'MS-DOS'\n-087BFF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-087C01 Compression Method    0000 (0) 'Stored'\n-087C03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087C07 CRC                   00000000 (0)\n-087C0B Compressed Size       00000000 (0)\n-087C0F Uncompressed Size     00000000 (0)\n-087C13 Filename Length       0072 (114)\n-087C15 Extra Length          0009 (9)\n-087C17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87C17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087C89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087C8B   Length              0005 (5)\n-087C8D   Flags               01 (1) 'Modification'\n-087C8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-087C92 PAYLOAD\n-\n-088358 DATA DESCRIPTOR       08074B50 (134695760)\n-08835C CRC                   357DA477 (897426551)\n-088360 Compressed Size       000006C6 (1734)\n-088364 Uncompressed Size     000006C6 (1734)\n-\n-088368 LOCAL HEADER #248     04034B50 (67324752)\n-08836C Extract Zip Spec      14 (20) '2.0'\n-08836D Extract OS            00 (0) 'MS-DOS'\n-08836E General Purpose Flag  0000 (0)\n-088370 Compression Method    0000 (0) 'Stored'\n-088372 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088376 CRC                   00000000 (0)\n-08837A Compressed Size       00000000 (0)\n-08837E Uncompressed Size     00000000 (0)\n-088382 Filename Length       0059 (89)\n-088384 Extra Length          0009 (9)\n-088386 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88386: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0883DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0883E1   Length              0005 (5)\n-0883E3   Flags               01 (1) 'Modification'\n-0883E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0883E8 LOCAL HEADER #249     04034B50 (67324752)\n-0883EC Extract Zip Spec      14 (20) '2.0'\n-0883ED Extract OS            00 (0) 'MS-DOS'\n-0883EE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0883F0 Compression Method    0000 (0) 'Stored'\n-0883F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0883F6 CRC                   00000000 (0)\n-0883FA Compressed Size       00000000 (0)\n-0883FE Uncompressed Size     00000000 (0)\n-088402 Filename Length       006F (111)\n-088404 Extra Length          0009 (9)\n-088406 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88406: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088475 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088477   Length              0005 (5)\n-088479   Flags               01 (1) 'Modification'\n-08847A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08847E PAYLOAD\n-\n-088E3A DATA DESCRIPTOR       08074B50 (134695760)\n-088E3E CRC                   F9CAC97B (4190816635)\n-088E42 Compressed Size       000009BC (2492)\n-088E46 Uncompressed Size     000009BC (2492)\n-\n-088E4A LOCAL HEADER #250     04034B50 (67324752)\n-088E4E Extract Zip Spec      14 (20) '2.0'\n-088E4F Extract OS            00 (0) 'MS-DOS'\n-088E50 General Purpose Flag  0000 (0)\n-088E52 Compression Method    0000 (0) 'Stored'\n-088E54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088E58 CRC                   00000000 (0)\n-088E5C Compressed Size       00000000 (0)\n-088E60 Uncompressed Size     00000000 (0)\n-088E64 Filename Length       005F (95)\n-088E66 Extra Length          0009 (9)\n-088E68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88E68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088EC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088EC9   Length              0005 (5)\n-088ECB   Flags               01 (1) 'Modification'\n-088ECC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-088ED0 LOCAL HEADER #251     04034B50 (67324752)\n-088ED4 Extract Zip Spec      14 (20) '2.0'\n-088ED5 Extract OS            00 (0) 'MS-DOS'\n-088ED6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-088ED8 Compression Method    0000 (0) 'Stored'\n-088EDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088EDE CRC                   00000000 (0)\n-088EE2 Compressed Size       00000000 (0)\n-088EE6 Uncompressed Size     00000000 (0)\n-088EEA Filename Length       0075 (117)\n-088EEC Extra Length          0009 (9)\n-088EEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88EEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088F63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088F65   Length              0005 (5)\n-088F67   Flags               01 (1) 'Modification'\n-088F68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-088F6C PAYLOAD\n-\n-089973 DATA DESCRIPTOR       08074B50 (134695760)\n-089977 CRC                   9DEB8C8B (2649459851)\n-08997B Compressed Size       00000A07 (2567)\n-08997F Uncompressed Size     00000A07 (2567)\n-\n-089983 LOCAL HEADER #252     04034B50 (67324752)\n-089987 Extract Zip Spec      14 (20) '2.0'\n-089988 Extract OS            00 (0) 'MS-DOS'\n-089989 General Purpose Flag  0000 (0)\n-08998B Compression Method    0000 (0) 'Stored'\n-08998D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089991 CRC                   00000000 (0)\n-089995 Compressed Size       00000000 (0)\n-089999 Uncompressed Size     00000000 (0)\n-08999D Filename Length       0059 (89)\n-08999F Extra Length          0009 (9)\n-0899A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x899A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0899FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0899FC   Length              0005 (5)\n-0899FE   Flags               01 (1) 'Modification'\n-0899FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-089A03 LOCAL HEADER #253     04034B50 (67324752)\n-089A07 Extract Zip Spec      14 (20) '2.0'\n-089A08 Extract OS            00 (0) 'MS-DOS'\n-089A09 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-089A0B Compression Method    0000 (0) 'Stored'\n-089A0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089A11 CRC                   00000000 (0)\n-089A15 Compressed Size       00000000 (0)\n-089A19 Uncompressed Size     00000000 (0)\n-089A1D Filename Length       006F (111)\n-089A1F Extra Length          0009 (9)\n-089A21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89A21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089A90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-089A92   Length              0005 (5)\n-089A94   Flags               01 (1) 'Modification'\n-089A95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-089A99 PAYLOAD\n-\n-08A877 DATA DESCRIPTOR       08074B50 (134695760)\n-08A87B CRC                   85B17459 (2242999385)\n-08A87F Compressed Size       00000DDE (3550)\n-08A883 Uncompressed Size     00000DDE (3550)\n-\n-08A887 LOCAL HEADER #254     04034B50 (67324752)\n-08A88B Extract Zip Spec      14 (20) '2.0'\n-08A88C Extract OS            00 (0) 'MS-DOS'\n-08A88D General Purpose Flag  0000 (0)\n-08A88F Compression Method    0000 (0) 'Stored'\n-08A891 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A895 CRC                   00000000 (0)\n-08A899 Compressed Size       00000000 (0)\n-08A89D Uncompressed Size     00000000 (0)\n-08A8A1 Filename Length       0064 (100)\n-08A8A3 Extra Length          0009 (9)\n-08A8A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A8A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A909 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A90B   Length              0005 (5)\n-08A90D   Flags               01 (1) 'Modification'\n-08A90E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08A912 LOCAL HEADER #255     04034B50 (67324752)\n-08A916 Extract Zip Spec      14 (20) '2.0'\n-08A917 Extract OS            00 (0) 'MS-DOS'\n-08A918 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08A91A Compression Method    0000 (0) 'Stored'\n-08A91C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A920 CRC                   00000000 (0)\n-08A924 Compressed Size       00000000 (0)\n-08A928 Uncompressed Size     00000000 (0)\n-08A92C Filename Length       007A (122)\n-08A92E Extra Length          0009 (9)\n-08A930 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A930: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A9AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A9AC   Length              0005 (5)\n-08A9AE   Flags               01 (1) 'Modification'\n-08A9AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08A9B3 PAYLOAD\n-\n-08AF82 DATA DESCRIPTOR       08074B50 (134695760)\n-08AF86 CRC                   9C229073 (2619510899)\n-08AF8A Compressed Size       000005CF (1487)\n-08AF8E Uncompressed Size     000005CF (1487)\n-\n-08AF92 LOCAL HEADER #256     04034B50 (67324752)\n-08AF96 Extract Zip Spec      14 (20) '2.0'\n-08AF97 Extract OS            00 (0) 'MS-DOS'\n-08AF98 General Purpose Flag  0000 (0)\n-08AF9A Compression Method    0000 (0) 'Stored'\n-08AF9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08AFA0 CRC                   00000000 (0)\n-08AFA4 Compressed Size       00000000 (0)\n-08AFA8 Uncompressed Size     00000000 (0)\n-08AFAC Filename Length       0064 (100)\n-08AFAE Extra Length          0009 (9)\n-08AFB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8AFB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B014 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B016   Length              0005 (5)\n-08B018   Flags               01 (1) 'Modification'\n-08B019   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B01D LOCAL HEADER #257     04034B50 (67324752)\n-08B021 Extract Zip Spec      14 (20) '2.0'\n-08B022 Extract OS            00 (0) 'MS-DOS'\n-08B023 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08B025 Compression Method    0000 (0) 'Stored'\n-08B027 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B02B CRC                   00000000 (0)\n-08B02F Compressed Size       00000000 (0)\n-08B033 Uncompressed Size     00000000 (0)\n-08B037 Filename Length       007A (122)\n-08B039 Extra Length          0009 (9)\n-08B03B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B03B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B0B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B0B7   Length              0005 (5)\n-08B0B9   Flags               01 (1) 'Modification'\n-08B0BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08B0BE PAYLOAD\n-\n-08B680 DATA DESCRIPTOR       08074B50 (134695760)\n-08B684 CRC                   A57691CD (2776011213)\n-08B688 Compressed Size       000005C2 (1474)\n-08B68C Uncompressed Size     000005C2 (1474)\n-\n-08B690 LOCAL HEADER #258     04034B50 (67324752)\n-08B694 Extract Zip Spec      14 (20) '2.0'\n-08B695 Extract OS            00 (0) 'MS-DOS'\n-08B696 General Purpose Flag  0000 (0)\n-08B698 Compression Method    0000 (0) 'Stored'\n-08B69A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B69E CRC                   00000000 (0)\n-08B6A2 Compressed Size       00000000 (0)\n-08B6A6 Uncompressed Size     00000000 (0)\n-08B6AA Filename Length       0063 (99)\n-08B6AC Extra Length          0009 (9)\n-08B6AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B6AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B711 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B713   Length              0005 (5)\n-08B715   Flags               01 (1) 'Modification'\n-08B716   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B71A LOCAL HEADER #259     04034B50 (67324752)\n-08B71E Extract Zip Spec      14 (20) '2.0'\n-08B71F Extract OS            00 (0) 'MS-DOS'\n-08B720 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08B722 Compression Method    0000 (0) 'Stored'\n-08B724 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B728 CRC                   00000000 (0)\n-08B72C Compressed Size       00000000 (0)\n-08B730 Uncompressed Size     00000000 (0)\n-08B734 Filename Length       0079 (121)\n-08B736 Extra Length          0009 (9)\n-08B738 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B738: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B7B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B7B3   Length              0005 (5)\n-08B7B5   Flags               01 (1) 'Modification'\n-08B7B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08B7BA PAYLOAD\n-\n-08BEF4 DATA DESCRIPTOR       08074B50 (134695760)\n-08BEF8 CRC                   6CD31445 (1825772613)\n-08BEFC Compressed Size       0000073A (1850)\n-08BF00 Uncompressed Size     0000073A (1850)\n-\n-08BF04 LOCAL HEADER #260     04034B50 (67324752)\n-08BF08 Extract Zip Spec      14 (20) '2.0'\n-08BF09 Extract OS            00 (0) 'MS-DOS'\n-08BF0A General Purpose Flag  0000 (0)\n-08BF0C Compression Method    0000 (0) 'Stored'\n-08BF0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08BF12 CRC                   00000000 (0)\n-08BF16 Compressed Size       00000000 (0)\n-08BF1A Uncompressed Size     00000000 (0)\n-08BF1E Filename Length       0061 (97)\n-08BF20 Extra Length          0009 (9)\n-08BF22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8BF22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08BF83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08BF85   Length              0005 (5)\n-08BF87   Flags               01 (1) 'Modification'\n-08BF88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08BF8C LOCAL HEADER #261     04034B50 (67324752)\n-08BF90 Extract Zip Spec      14 (20) '2.0'\n-08BF91 Extract OS            00 (0) 'MS-DOS'\n-08BF92 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08BF94 Compression Method    0000 (0) 'Stored'\n-08BF96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08BF9A CRC                   00000000 (0)\n-08BF9E Compressed Size       00000000 (0)\n-08BFA2 Uncompressed Size     00000000 (0)\n-08BFA6 Filename Length       0077 (119)\n-08BFA8 Extra Length          0009 (9)\n-08BFAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8BFAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08C021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08C023   Length              0005 (5)\n-08C025   Flags               01 (1) 'Modification'\n-08C026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08C02A PAYLOAD\n-\n-08CABC DATA DESCRIPTOR       08074B50 (134695760)\n-08CAC0 CRC                   C97DF8D6 (3380476118)\n-08CAC4 Compressed Size       00000A92 (2706)\n-08CAC8 Uncompressed Size     00000A92 (2706)\n-\n-08CACC LOCAL HEADER #262     04034B50 (67324752)\n-08CAD0 Extract Zip Spec      14 (20) '2.0'\n-08CAD1 Extract OS            00 (0) 'MS-DOS'\n-08CAD2 General Purpose Flag  0000 (0)\n-08CAD4 Compression Method    0000 (0) 'Stored'\n-08CAD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08CADA CRC                   00000000 (0)\n-08CADE Compressed Size       00000000 (0)\n-08CAE2 Uncompressed Size     00000000 (0)\n-08CAE6 Filename Length       0023 (35)\n-08CAE8 Extra Length          0009 (9)\n-08CAEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8CAEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08CB0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08CB0F   Length              0005 (5)\n-08CB11   Flags               01 (1) 'Modification'\n-08CB12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08CB16 LOCAL HEADER #263     04034B50 (67324752)\n-08CB1A Extract Zip Spec      14 (20) '2.0'\n-08CB1B Extract OS            00 (0) 'MS-DOS'\n-08CB1C General Purpose Flag  0000 (0)\n-08CB1E Compression Method    0000 (0) 'Stored'\n-08CB20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08CB24 CRC                   00000000 (0)\n-08CB28 Compressed Size       00000000 (0)\n-08CB2C Uncompressed Size     00000000 (0)\n-08CB30 Filename Length       002A (42)\n-08CB32 Extra Length          0009 (9)\n-08CB34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8CB34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08CB5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08CB60   Length              0005 (5)\n-08CB62   Flags               01 (1) 'Modification'\n-08CB63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08CB67 LOCAL HEADER #264     04034B50 (67324752)\n-08CB6B Extract Zip Spec      14 (20) '2.0'\n-08CB6C Extract OS            00 (0) 'MS-DOS'\n-08CB6D General Purpose Flag  0000 (0)\n-08CB6F Compression Method    0000 (0) 'Stored'\n-08CB71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08CB75 CRC                   00000000 (0)\n-08CB79 Compressed Size       00000000 (0)\n-08CB7D Uncompressed Size     00000000 (0)\n-08CB81 Filename Length       0056 (86)\n-08CB83 Extra Length          0009 (9)\n-08CB85 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8CB85: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08CBDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08CBDD   Length              0005 (5)\n-08CBDF   Flags               01 (1) 'Modification'\n-08CBE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08CBE4 LOCAL HEADER #265     04034B50 (67324752)\n-08CBE8 Extract Zip Spec      14 (20) '2.0'\n-08CBE9 Extract OS            00 (0) 'MS-DOS'\n-08CBEA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08CBEC Compression Method    0000 (0) 'Stored'\n-08CBEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08CBF2 CRC                   00000000 (0)\n-08CBF6 Compressed Size       00000000 (0)\n-08CBFA Uncompressed Size     00000000 (0)\n-08CBFE Filename Length       006C (108)\n-08CC00 Extra Length          0009 (9)\n-08CC02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8CC02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08CC6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08CC70   Length              0005 (5)\n-08CC72   Flags               01 (1) 'Modification'\n-08CC73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08CC77 PAYLOAD\n-\n-08D40C DATA DESCRIPTOR       08074B50 (134695760)\n-08D410 CRC                   0B04A112 (184852754)\n-08D414 Compressed Size       00000795 (1941)\n-08D418 Uncompressed Size     00000795 (1941)\n-\n-08D41C LOCAL HEADER #266     04034B50 (67324752)\n-08D420 Extract Zip Spec      14 (20) '2.0'\n-08D421 Extract OS            00 (0) 'MS-DOS'\n-08D422 General Purpose Flag  0000 (0)\n-08D424 Compression Method    0000 (0) 'Stored'\n-08D426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D42A CRC                   00000000 (0)\n-08D42E Compressed Size       00000000 (0)\n-08D432 Uncompressed Size     00000000 (0)\n-08D436 Filename Length       0031 (49)\n-08D438 Extra Length          0009 (9)\n-08D43A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D43A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D46B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D46D   Length              0005 (5)\n-08D46F   Flags               01 (1) 'Modification'\n-08D470   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08D474 LOCAL HEADER #267     04034B50 (67324752)\n-08D478 Extract Zip Spec      14 (20) '2.0'\n-08D479 Extract OS            00 (0) 'MS-DOS'\n-08D47A General Purpose Flag  0000 (0)\n-08D47C Compression Method    0000 (0) 'Stored'\n-08D47E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D482 CRC                   00000000 (0)\n-08D486 Compressed Size       00000000 (0)\n-08D48A Uncompressed Size     00000000 (0)\n-08D48E Filename Length       0038 (56)\n-08D490 Extra Length          0009 (9)\n-08D492 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D492: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D4CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D4CC   Length              0005 (5)\n-08D4CE   Flags               01 (1) 'Modification'\n-08D4CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08D4D3 LOCAL HEADER #268     04034B50 (67324752)\n-08D4D7 Extract Zip Spec      14 (20) '2.0'\n-08D4D8 Extract OS            00 (0) 'MS-DOS'\n-08D4D9 General Purpose Flag  0000 (0)\n-08D4DB Compression Method    0000 (0) 'Stored'\n-08D4DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D4E1 CRC                   00000000 (0)\n-08D4E5 Compressed Size       00000000 (0)\n-08D4E9 Uncompressed Size     00000000 (0)\n-08D4ED Filename Length       006A (106)\n-08D4EF Extra Length          0009 (9)\n-08D4F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D4F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D55B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D55D   Length              0005 (5)\n-08D55F   Flags               01 (1) 'Modification'\n-08D560   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08D564 LOCAL HEADER #269     04034B50 (67324752)\n-08D568 Extract Zip Spec      14 (20) '2.0'\n-08D569 Extract OS            00 (0) 'MS-DOS'\n-08D56A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08D56C Compression Method    0000 (0) 'Stored'\n-08D56E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08D572 CRC                   00000000 (0)\n-08D576 Compressed Size       00000000 (0)\n-08D57A Uncompressed Size     00000000 (0)\n-08D57E Filename Length       0080 (128)\n-08D580 Extra Length          0009 (9)\n-08D582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8D582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08D602 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08D604   Length              0005 (5)\n-08D606   Flags               01 (1) 'Modification'\n-08D607   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08D60B PAYLOAD\n-\n-08DEB6 DATA DESCRIPTOR       08074B50 (134695760)\n-08DEBA CRC                   9A51A289 (2589041289)\n-08DEBE Compressed Size       000008AB (2219)\n-08DEC2 Uncompressed Size     000008AB (2219)\n-\n-08DEC6 LOCAL HEADER #270     04034B50 (67324752)\n-08DECA Extract Zip Spec      14 (20) '2.0'\n-08DECB Extract OS            00 (0) 'MS-DOS'\n-08DECC General Purpose Flag  0000 (0)\n-08DECE Compression Method    0000 (0) 'Stored'\n-08DED0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08DED4 CRC                   00000000 (0)\n-08DED8 Compressed Size       00000000 (0)\n-08DEDC Uncompressed Size     00000000 (0)\n-08DEE0 Filename Length       0022 (34)\n-08DEE2 Extra Length          0009 (9)\n-08DEE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8DEE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08DF06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08DF08   Length              0005 (5)\n-08DF0A   Flags               01 (1) 'Modification'\n-08DF0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08DF0F LOCAL HEADER #271     04034B50 (67324752)\n-08DF13 Extract Zip Spec      14 (20) '2.0'\n-08DF14 Extract OS            00 (0) 'MS-DOS'\n-08DF15 General Purpose Flag  0000 (0)\n-08DF17 Compression Method    0000 (0) 'Stored'\n-08DF19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08DF1D CRC                   00000000 (0)\n-08DF21 Compressed Size       00000000 (0)\n-08DF25 Uncompressed Size     00000000 (0)\n-08DF29 Filename Length       0029 (41)\n-08DF2B Extra Length          0009 (9)\n-08DF2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8DF2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08DF56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08DF58   Length              0005 (5)\n-08DF5A   Flags               01 (1) 'Modification'\n-08DF5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08DF5F LOCAL HEADER #272     04034B50 (67324752)\n-08DF63 Extract Zip Spec      14 (20) '2.0'\n-08DF64 Extract OS            00 (0) 'MS-DOS'\n-08DF65 General Purpose Flag  0000 (0)\n-08DF67 Compression Method    0000 (0) 'Stored'\n-08DF69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08DF6D CRC                   00000000 (0)\n-08DF71 Compressed Size       00000000 (0)\n-08DF75 Uncompressed Size     00000000 (0)\n-08DF79 Filename Length       0063 (99)\n-08DF7B Extra Length          0009 (9)\n-08DF7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8DF7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08DFE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08DFE2   Length              0005 (5)\n-08DFE4   Flags               01 (1) 'Modification'\n-08DFE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08DFE9 LOCAL HEADER #273     04034B50 (67324752)\n-08DFED Extract Zip Spec      14 (20) '2.0'\n-08DFEE Extract OS            00 (0) 'MS-DOS'\n-08DFEF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08DFF1 Compression Method    0000 (0) 'Stored'\n-08DFF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08DFF7 CRC                   00000000 (0)\n-08DFFB Compressed Size       00000000 (0)\n-08DFFF Uncompressed Size     00000000 (0)\n-08E003 Filename Length       0079 (121)\n-08E005 Extra Length          0009 (9)\n-08E007 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8E007: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08E080 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08E082   Length              0005 (5)\n-08E084   Flags               01 (1) 'Modification'\n-08E085   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08E089 PAYLOAD\n-\n-08EECD DATA DESCRIPTOR       08074B50 (134695760)\n-08EED1 CRC                   28034B81 (671304577)\n-08EED5 Compressed Size       00000E44 (3652)\n-08EED9 Uncompressed Size     00000E44 (3652)\n-\n-08EEDD LOCAL HEADER #274     04034B50 (67324752)\n-08EEE1 Extract Zip Spec      14 (20) '2.0'\n-08EEE2 Extract OS            00 (0) 'MS-DOS'\n-08EEE3 General Purpose Flag  0000 (0)\n-08EEE5 Compression Method    0000 (0) 'Stored'\n-08EEE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EEEB CRC                   00000000 (0)\n-08EEEF Compressed Size       00000000 (0)\n-08EEF3 Uncompressed Size     00000000 (0)\n-08EEF7 Filename Length       003C (60)\n-08EEF9 Extra Length          0009 (9)\n-08EEFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EEFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08EF37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08EF39   Length              0005 (5)\n-08EF3B   Flags               01 (1) 'Modification'\n-08EF3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08EF40 LOCAL HEADER #275     04034B50 (67324752)\n-08EF44 Extract Zip Spec      14 (20) '2.0'\n-08EF45 Extract OS            00 (0) 'MS-DOS'\n-08EF46 General Purpose Flag  0000 (0)\n-08EF48 Compression Method    0000 (0) 'Stored'\n-08EF4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EF4E CRC                   00000000 (0)\n-08EF52 Compressed Size       00000000 (0)\n-08EF56 Uncompressed Size     00000000 (0)\n-08EF5A Filename Length       0043 (67)\n-08EF5C Extra Length          0009 (9)\n-08EF5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EF5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08EFA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08EFA3   Length              0005 (5)\n-08EFA5   Flags               01 (1) 'Modification'\n-08EFA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08EFAA LOCAL HEADER #276     04034B50 (67324752)\n-08EFAE Extract Zip Spec      14 (20) '2.0'\n-08EFAF Extract OS            00 (0) 'MS-DOS'\n-08EFB0 General Purpose Flag  0000 (0)\n-08EFB2 Compression Method    0000 (0) 'Stored'\n-08EFB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EFB8 CRC                   00000000 (0)\n-08EFBC Compressed Size       00000000 (0)\n-08EFC0 Uncompressed Size     00000000 (0)\n-08EFC4 Filename Length       0061 (97)\n-08EFC6 Extra Length          0009 (9)\n-08EFC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EFC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F029 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F02B   Length              0005 (5)\n-08F02D   Flags               01 (1) 'Modification'\n-08F02E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08F032 LOCAL HEADER #277     04034B50 (67324752)\n-08F036 Extract Zip Spec      14 (20) '2.0'\n-08F037 Extract OS            00 (0) 'MS-DOS'\n-08F038 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08F03A Compression Method    0000 (0) 'Stored'\n-08F03C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F040 CRC                   00000000 (0)\n-08F044 Compressed Size       00000000 (0)\n-08F048 Uncompressed Size     00000000 (0)\n-08F04C Filename Length       0077 (119)\n-08F04E Extra Length          0009 (9)\n-08F050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F0C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F0C9   Length              0005 (5)\n-08F0CB   Flags               01 (1) 'Modification'\n-08F0CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08F0D0 PAYLOAD\n-\n-0927B7 DATA DESCRIPTOR       08074B50 (134695760)\n-0927BB CRC                   9ED7BE90 (2664939152)\n-0927BF Compressed Size       000036E7 (14055)\n-0927C3 Uncompressed Size     000036E7 (14055)\n-\n-0927C7 LOCAL HEADER #278     04034B50 (67324752)\n-0927CB Extract Zip Spec      14 (20) '2.0'\n-0927CC Extract OS            00 (0) 'MS-DOS'\n-0927CD General Purpose Flag  0000 (0)\n-0927CF Compression Method    0000 (0) 'Stored'\n-0927D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0927D5 CRC                   00000000 (0)\n-0927D9 Compressed Size       00000000 (0)\n-0927DD Uncompressed Size     00000000 (0)\n-0927E1 Filename Length       0061 (97)\n-0927E3 Extra Length          0009 (9)\n-0927E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x927E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-092846 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-092848   Length              0005 (5)\n-09284A   Flags               01 (1) 'Modification'\n-09284B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09284F LOCAL HEADER #279     04034B50 (67324752)\n-092853 Extract Zip Spec      14 (20) '2.0'\n-092854 Extract OS            00 (0) 'MS-DOS'\n-092855 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-092857 Compression Method    0000 (0) 'Stored'\n-092859 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09285D CRC                   00000000 (0)\n-092861 Compressed Size       00000000 (0)\n-092865 Uncompressed Size     00000000 (0)\n-092869 Filename Length       0077 (119)\n-09286B Extra Length          0009 (9)\n-09286D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9286D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0928E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0928E6   Length              0005 (5)\n-0928E8   Flags               01 (1) 'Modification'\n-0928E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0928ED PAYLOAD\n-\n-09707F DATA DESCRIPTOR       08074B50 (134695760)\n-097083 CRC                   DF1BCC3E (3743140926)\n-097087 Compressed Size       00004792 (18322)\n-09708B Uncompressed Size     00004792 (18322)\n-\n-09708F LOCAL HEADER #280     04034B50 (67324752)\n-097093 Extract Zip Spec      14 (20) '2.0'\n-097094 Extract OS            00 (0) 'MS-DOS'\n-097095 General Purpose Flag  0000 (0)\n-097097 Compression Method    0000 (0) 'Stored'\n-097099 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09709D CRC                   00000000 (0)\n-0970A1 Compressed Size       00000000 (0)\n-0970A5 Uncompressed Size     00000000 (0)\n-0970A9 Filename Length       0063 (99)\n-0970AB Extra Length          0009 (9)\n-0970AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x970AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-097110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-097112   Length              0005 (5)\n-097114   Flags               01 (1) 'Modification'\n-097115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-097119 LOCAL HEADER #281     04034B50 (67324752)\n-09711D Extract Zip Spec      14 (20) '2.0'\n-09711E Extract OS            00 (0) 'MS-DOS'\n-09711F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-097121 Compression Method    0000 (0) 'Stored'\n-097123 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-097127 CRC                   00000000 (0)\n-09712B Compressed Size       00000000 (0)\n-09712F Uncompressed Size     00000000 (0)\n-097133 Filename Length       0079 (121)\n-097135 Extra Length          0009 (9)\n-097137 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97137: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0971B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0971B2   Length              0005 (5)\n-0971B4   Flags               01 (1) 'Modification'\n-0971B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0971B9 PAYLOAD\n-\n-09CF95 DATA DESCRIPTOR       08074B50 (134695760)\n-09CF99 CRC                   27CFA48B (667919499)\n-09CF9D Compressed Size       00005DDC (24028)\n-09CFA1 Uncompressed Size     00005DDC (24028)\n-\n-09CFA5 LOCAL HEADER #282     04034B50 (67324752)\n-09CFA9 Extract Zip Spec      14 (20) '2.0'\n-09CFAA Extract OS            00 (0) 'MS-DOS'\n-09CFAB General Purpose Flag  0000 (0)\n-09CFAD Compression Method    0000 (0) 'Stored'\n-09CFAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09CFB3 CRC                   00000000 (0)\n-09CFB7 Compressed Size       00000000 (0)\n-09CFBB Uncompressed Size     00000000 (0)\n-09CFBF Filename Length       0067 (103)\n-09CFC1 Extra Length          0009 (9)\n-09CFC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9CFC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09D02A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09D02C   Length              0005 (5)\n-09D02E   Flags               01 (1) 'Modification'\n-09D02F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09D033 LOCAL HEADER #283     04034B50 (67324752)\n-09D037 Extract Zip Spec      14 (20) '2.0'\n-09D038 Extract OS            00 (0) 'MS-DOS'\n-09D039 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09D03B Compression Method    0000 (0) 'Stored'\n-09D03D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09D041 CRC                   00000000 (0)\n-09D045 Compressed Size       00000000 (0)\n-09D049 Uncompressed Size     00000000 (0)\n-09D04D Filename Length       007D (125)\n-09D04F Extra Length          0009 (9)\n-09D051 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9D051: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09D0CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09D0D0   Length              0005 (5)\n-09D0D2   Flags               01 (1) 'Modification'\n-09D0D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09D0D7 PAYLOAD\n-\n-0A0C11 DATA DESCRIPTOR       08074B50 (134695760)\n-0A0C15 CRC                   620AB78F (1644869519)\n-0A0C19 Compressed Size       00003B3A (15162)\n-0A0C1D Uncompressed Size     00003B3A (15162)\n-\n-0A0C21 LOCAL HEADER #284     04034B50 (67324752)\n-0A0C25 Extract Zip Spec      14 (20) '2.0'\n-0A0C26 Extract OS            00 (0) 'MS-DOS'\n-0A0C27 General Purpose Flag  0000 (0)\n-0A0C29 Compression Method    0000 (0) 'Stored'\n-0A0C2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0C2F CRC                   00000000 (0)\n-0A0C33 Compressed Size       00000000 (0)\n-0A0C37 Uncompressed Size     00000000 (0)\n-0A0C3B Filename Length       0067 (103)\n-0A0C3D Extra Length          0009 (9)\n-0A0C3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0C3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0CA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0CA8   Length              0005 (5)\n-0A0CAA   Flags               01 (1) 'Modification'\n-0A0CAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A0CAF LOCAL HEADER #285     04034B50 (67324752)\n-0A0CB3 Extract Zip Spec      14 (20) '2.0'\n-0A0CB4 Extract OS            00 (0) 'MS-DOS'\n-0A0CB5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A0CB7 Compression Method    0000 (0) 'Stored'\n-0A0CB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0CBD CRC                   00000000 (0)\n-0A0CC1 Compressed Size       00000000 (0)\n-0A0CC5 Uncompressed Size     00000000 (0)\n-0A0CC9 Filename Length       007D (125)\n-0A0CCB Extra Length          0009 (9)\n-0A0CCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0CCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0D4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0D4C   Length              0005 (5)\n-0A0D4E   Flags               01 (1) 'Modification'\n-0A0D4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A0D53 PAYLOAD\n-\n-0A55B8 DATA DESCRIPTOR       08074B50 (134695760)\n-0A55BC CRC                   1E08683A (503867450)\n-0A55C0 Compressed Size       00004865 (18533)\n-0A55C4 Uncompressed Size     00004865 (18533)\n-\n-0A55C8 LOCAL HEADER #286     04034B50 (67324752)\n-0A55CC Extract Zip Spec      14 (20) '2.0'\n-0A55CD Extract OS            00 (0) 'MS-DOS'\n-0A55CE General Purpose Flag  0000 (0)\n-0A55D0 Compression Method    0000 (0) 'Stored'\n-0A55D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A55D6 CRC                   00000000 (0)\n-0A55DA Compressed Size       00000000 (0)\n-0A55DE Uncompressed Size     00000000 (0)\n-0A55E2 Filename Length       006B (107)\n-0A55E4 Extra Length          0009 (9)\n-0A55E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA55E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A5651 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A5653   Length              0005 (5)\n-0A5655   Flags               01 (1) 'Modification'\n-0A5656   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A565A LOCAL HEADER #287     04034B50 (67324752)\n-0A565E Extract Zip Spec      14 (20) '2.0'\n-0A565F Extract OS            00 (0) 'MS-DOS'\n-0A5660 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A5662 Compression Method    0000 (0) 'Stored'\n-0A5664 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A5668 CRC                   00000000 (0)\n-0A566C Compressed Size       00000000 (0)\n-0A5670 Uncompressed Size     00000000 (0)\n-0A5674 Filename Length       0081 (129)\n-0A5676 Extra Length          0009 (9)\n-0A5678 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA5678: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A56F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A56FB   Length              0005 (5)\n-0A56FD   Flags               01 (1) 'Modification'\n-0A56FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A5702 PAYLOAD\n-\n-0A61E1 DATA DESCRIPTOR       08074B50 (134695760)\n-0A61E5 CRC                   53DFF1D7 (1407185367)\n-0A61E9 Compressed Size       00000ADF (2783)\n-0A61ED Uncompressed Size     00000ADF (2783)\n-\n-0A61F1 LOCAL HEADER #288     04034B50 (67324752)\n-0A61F5 Extract Zip Spec      14 (20) '2.0'\n-0A61F6 Extract OS            00 (0) 'MS-DOS'\n-0A61F7 General Purpose Flag  0000 (0)\n-0A61F9 Compression Method    0000 (0) 'Stored'\n-0A61FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A61FF CRC                   00000000 (0)\n-0A6203 Compressed Size       00000000 (0)\n-0A6207 Uncompressed Size     00000000 (0)\n-0A620B Filename Length       0067 (103)\n-0A620D Extra Length          0009 (9)\n-0A620F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA620F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6276 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6278   Length              0005 (5)\n-0A627A   Flags               01 (1) 'Modification'\n-0A627B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A627F LOCAL HEADER #289     04034B50 (67324752)\n-0A6283 Extract Zip Spec      14 (20) '2.0'\n-0A6284 Extract OS            00 (0) 'MS-DOS'\n-0A6285 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A6287 Compression Method    0000 (0) 'Stored'\n-0A6289 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A628D CRC                   00000000 (0)\n-0A6291 Compressed Size       00000000 (0)\n-0A6295 Uncompressed Size     00000000 (0)\n-0A6299 Filename Length       007D (125)\n-0A629B Extra Length          0009 (9)\n-0A629D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA629D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A631A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A631C   Length              0005 (5)\n-0A631E   Flags               01 (1) 'Modification'\n-0A631F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A6323 PAYLOAD\n-\n-0A6C5C DATA DESCRIPTOR       08074B50 (134695760)\n-0A6C60 CRC                   6D3A5445 (1832539205)\n-0A6C64 Compressed Size       00000939 (2361)\n-0A6C68 Uncompressed Size     00000939 (2361)\n-\n-0A6C6C LOCAL HEADER #290     04034B50 (67324752)\n-0A6C70 Extract Zip Spec      14 (20) '2.0'\n-0A6C71 Extract OS            00 (0) 'MS-DOS'\n-0A6C72 General Purpose Flag  0000 (0)\n-0A6C74 Compression Method    0000 (0) 'Stored'\n-0A6C76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6C7A CRC                   00000000 (0)\n-0A6C7E Compressed Size       00000000 (0)\n-0A6C82 Uncompressed Size     00000000 (0)\n-0A6C86 Filename Length       0076 (118)\n-0A6C88 Extra Length          0009 (9)\n-0A6C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA6C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6D00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6D02   Length              0005 (5)\n-0A6D04   Flags               01 (1) 'Modification'\n-0A6D05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A6D09 LOCAL HEADER #291     04034B50 (67324752)\n-0A6D0D Extract Zip Spec      14 (20) '2.0'\n-0A6D0E Extract OS            00 (0) 'MS-DOS'\n-0A6D0F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A6D11 Compression Method    0000 (0) 'Stored'\n-0A6D13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6D17 CRC                   00000000 (0)\n-0A6D1B Compressed Size       00000000 (0)\n-0A6D1F Uncompressed Size     00000000 (0)\n-0A6D23 Filename Length       008C (140)\n-0A6D25 Extra Length          0009 (9)\n-0A6D27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+079DA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+079DA4   Length              0005 (5)\n+079DA6   Flags               01 (1) 'Modification'\n+079DA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+079DAB PAYLOAD\n+\n+0839E6 DATA DESCRIPTOR       08074B50 (134695760)\n+0839EA CRC                   6668C19E (1718141342)\n+0839EE Compressed Size       00009C3B (39995)\n+0839F2 Uncompressed Size     00009C3B (39995)\n+\n+0839F6 LOCAL HEADER #232     04034B50 (67324752)\n+0839FA Extract Zip Spec      14 (20) '2.0'\n+0839FB Extract OS            00 (0) 'MS-DOS'\n+0839FC General Purpose Flag  0000 (0)\n+0839FE Compression Method    0000 (0) 'Stored'\n+083A00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+083A04 CRC                   00000000 (0)\n+083A08 Compressed Size       00000000 (0)\n+083A0C Uncompressed Size     00000000 (0)\n+083A10 Filename Length       0068 (104)\n+083A12 Extra Length          0009 (9)\n+083A14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x83A14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083A7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083A7E   Length              0005 (5)\n+083A80   Flags               01 (1) 'Modification'\n+083A81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+083A85 LOCAL HEADER #233     04034B50 (67324752)\n+083A89 Extract Zip Spec      14 (20) '2.0'\n+083A8A Extract OS            00 (0) 'MS-DOS'\n+083A8B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+083A8D Compression Method    0000 (0) 'Stored'\n+083A8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+083A93 CRC                   00000000 (0)\n+083A97 Compressed Size       00000000 (0)\n+083A9B Uncompressed Size     00000000 (0)\n+083A9F Filename Length       007E (126)\n+083AA1 Extra Length          0009 (9)\n+083AA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x83AA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083B21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083B23   Length              0005 (5)\n+083B25   Flags               01 (1) 'Modification'\n+083B26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+083B2A PAYLOAD\n+\n+086774 DATA DESCRIPTOR       08074B50 (134695760)\n+086778 CRC                   23E20FDA (602017754)\n+08677C Compressed Size       00002C4A (11338)\n+086780 Uncompressed Size     00002C4A (11338)\n+\n+086784 LOCAL HEADER #234     04034B50 (67324752)\n+086788 Extract Zip Spec      14 (20) '2.0'\n+086789 Extract OS            00 (0) 'MS-DOS'\n+08678A General Purpose Flag  0000 (0)\n+08678C Compression Method    0000 (0) 'Stored'\n+08678E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+086792 CRC                   00000000 (0)\n+086796 Compressed Size       00000000 (0)\n+08679A Uncompressed Size     00000000 (0)\n+08679E Filename Length       0023 (35)\n+0867A0 Extra Length          0009 (9)\n+0867A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x867A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0867C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0867C7   Length              0005 (5)\n+0867C9   Flags               01 (1) 'Modification'\n+0867CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0867CE LOCAL HEADER #235     04034B50 (67324752)\n+0867D2 Extract Zip Spec      14 (20) '2.0'\n+0867D3 Extract OS            00 (0) 'MS-DOS'\n+0867D4 General Purpose Flag  0000 (0)\n+0867D6 Compression Method    0000 (0) 'Stored'\n+0867D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0867DC CRC                   00000000 (0)\n+0867E0 Compressed Size       00000000 (0)\n+0867E4 Uncompressed Size     00000000 (0)\n+0867E8 Filename Length       002A (42)\n+0867EA Extra Length          0009 (9)\n+0867EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x867EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+086816 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086818   Length              0005 (5)\n+08681A   Flags               01 (1) 'Modification'\n+08681B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08681F LOCAL HEADER #236     04034B50 (67324752)\n+086823 Extract Zip Spec      14 (20) '2.0'\n+086824 Extract OS            00 (0) 'MS-DOS'\n+086825 General Purpose Flag  0000 (0)\n+086827 Compression Method    0000 (0) 'Stored'\n+086829 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08682D CRC                   00000000 (0)\n+086831 Compressed Size       00000000 (0)\n+086835 Uncompressed Size     00000000 (0)\n+086839 Filename Length       0052 (82)\n+08683B Extra Length          0009 (9)\n+08683D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8683D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08688F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086891   Length              0005 (5)\n+086893   Flags               01 (1) 'Modification'\n+086894   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+086898 LOCAL HEADER #237     04034B50 (67324752)\n+08689C Extract Zip Spec      14 (20) '2.0'\n+08689D Extract OS            00 (0) 'MS-DOS'\n+08689E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0868A0 Compression Method    0000 (0) 'Stored'\n+0868A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0868A6 CRC                   00000000 (0)\n+0868AA Compressed Size       00000000 (0)\n+0868AE Uncompressed Size     00000000 (0)\n+0868B2 Filename Length       0068 (104)\n+0868B4 Extra Length          0009 (9)\n+0868B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x868B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08691E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086920   Length              0005 (5)\n+086922   Flags               01 (1) 'Modification'\n+086923   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+086927 PAYLOAD\n+\n+0883E4 DATA DESCRIPTOR       08074B50 (134695760)\n+0883E8 CRC                   90D14EC3 (2429636291)\n+0883EC Compressed Size       00001ABD (6845)\n+0883F0 Uncompressed Size     00001ABD (6845)\n+\n+0883F4 LOCAL HEADER #238     04034B50 (67324752)\n+0883F8 Extract Zip Spec      14 (20) '2.0'\n+0883F9 Extract OS            00 (0) 'MS-DOS'\n+0883FA General Purpose Flag  0000 (0)\n+0883FC Compression Method    0000 (0) 'Stored'\n+0883FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+088402 CRC                   00000000 (0)\n+088406 Compressed Size       00000000 (0)\n+08840A Uncompressed Size     00000000 (0)\n+08840E Filename Length       002E (46)\n+088410 Extra Length          0009 (9)\n+088412 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x88412: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+088440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+088442   Length              0005 (5)\n+088444   Flags               01 (1) 'Modification'\n+088445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+088449 LOCAL HEADER #239     04034B50 (67324752)\n+08844D Extract Zip Spec      14 (20) '2.0'\n+08844E Extract OS            00 (0) 'MS-DOS'\n+08844F General Purpose Flag  0000 (0)\n+088451 Compression Method    0000 (0) 'Stored'\n+088453 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+088457 CRC                   00000000 (0)\n+08845B Compressed Size       00000000 (0)\n+08845F Uncompressed Size     00000000 (0)\n+088463 Filename Length       0035 (53)\n+088465 Extra Length          0009 (9)\n+088467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x88467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08849C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08849E   Length              0005 (5)\n+0884A0   Flags               01 (1) 'Modification'\n+0884A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0884A5 LOCAL HEADER #240     04034B50 (67324752)\n+0884A9 Extract Zip Spec      14 (20) '2.0'\n+0884AA Extract OS            00 (0) 'MS-DOS'\n+0884AB General Purpose Flag  0000 (0)\n+0884AD Compression Method    0000 (0) 'Stored'\n+0884AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0884B3 CRC                   00000000 (0)\n+0884B7 Compressed Size       00000000 (0)\n+0884BB Uncompressed Size     00000000 (0)\n+0884BF Filename Length       005E (94)\n+0884C1 Extra Length          0009 (9)\n+0884C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x884C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+088521 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+088523   Length              0005 (5)\n+088525   Flags               01 (1) 'Modification'\n+088526   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08852A LOCAL HEADER #241     04034B50 (67324752)\n+08852E Extract Zip Spec      14 (20) '2.0'\n+08852F Extract OS            00 (0) 'MS-DOS'\n+088530 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+088532 Compression Method    0000 (0) 'Stored'\n+088534 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+088538 CRC                   00000000 (0)\n+08853C Compressed Size       00000000 (0)\n+088540 Uncompressed Size     00000000 (0)\n+088544 Filename Length       0074 (116)\n+088546 Extra Length          0009 (9)\n+088548 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x88548: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0885BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0885BE   Length              0005 (5)\n+0885C0   Flags               01 (1) 'Modification'\n+0885C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0885C5 PAYLOAD\n+\n+08949D DATA DESCRIPTOR       08074B50 (134695760)\n+0894A1 CRC                   F19E6303 (4053689091)\n+0894A5 Compressed Size       00000ED8 (3800)\n+0894A9 Uncompressed Size     00000ED8 (3800)\n+\n+0894AD LOCAL HEADER #242     04034B50 (67324752)\n+0894B1 Extract Zip Spec      14 (20) '2.0'\n+0894B2 Extract OS            00 (0) 'MS-DOS'\n+0894B3 General Purpose Flag  0000 (0)\n+0894B5 Compression Method    0000 (0) 'Stored'\n+0894B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0894BB CRC                   00000000 (0)\n+0894BF Compressed Size       00000000 (0)\n+0894C3 Uncompressed Size     00000000 (0)\n+0894C7 Filename Length       0064 (100)\n+0894C9 Extra Length          0009 (9)\n+0894CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x894CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08952F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+089531   Length              0005 (5)\n+089533   Flags               01 (1) 'Modification'\n+089534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+089538 LOCAL HEADER #243     04034B50 (67324752)\n+08953C Extract Zip Spec      14 (20) '2.0'\n+08953D Extract OS            00 (0) 'MS-DOS'\n+08953E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+089540 Compression Method    0000 (0) 'Stored'\n+089542 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089546 CRC                   00000000 (0)\n+08954A Compressed Size       00000000 (0)\n+08954E Uncompressed Size     00000000 (0)\n+089552 Filename Length       007A (122)\n+089554 Extra Length          0009 (9)\n+089556 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89556: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0895D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0895D2   Length              0005 (5)\n+0895D4   Flags               01 (1) 'Modification'\n+0895D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0895D9 PAYLOAD\n+\n+08ACB0 DATA DESCRIPTOR       08074B50 (134695760)\n+08ACB4 CRC                   51B4F745 (1370814277)\n+08ACB8 Compressed Size       000016D7 (5847)\n+08ACBC Uncompressed Size     000016D7 (5847)\n+\n+08ACC0 LOCAL HEADER #244     04034B50 (67324752)\n+08ACC4 Extract Zip Spec      14 (20) '2.0'\n+08ACC5 Extract OS            00 (0) 'MS-DOS'\n+08ACC6 General Purpose Flag  0000 (0)\n+08ACC8 Compression Method    0000 (0) 'Stored'\n+08ACCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08ACCE CRC                   00000000 (0)\n+08ACD2 Compressed Size       00000000 (0)\n+08ACD6 Uncompressed Size     00000000 (0)\n+08ACDA Filename Length       0026 (38)\n+08ACDC Extra Length          0009 (9)\n+08ACDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8ACDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AD04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AD06   Length              0005 (5)\n+08AD08   Flags               01 (1) 'Modification'\n+08AD09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08AD0D LOCAL HEADER #245     04034B50 (67324752)\n+08AD11 Extract Zip Spec      14 (20) '2.0'\n+08AD12 Extract OS            00 (0) 'MS-DOS'\n+08AD13 General Purpose Flag  0000 (0)\n+08AD15 Compression Method    0000 (0) 'Stored'\n+08AD17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08AD1B CRC                   00000000 (0)\n+08AD1F Compressed Size       00000000 (0)\n+08AD23 Uncompressed Size     00000000 (0)\n+08AD27 Filename Length       002D (45)\n+08AD29 Extra Length          0009 (9)\n+08AD2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8AD2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AD58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AD5A   Length              0005 (5)\n+08AD5C   Flags               01 (1) 'Modification'\n+08AD5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08AD61 LOCAL HEADER #246     04034B50 (67324752)\n+08AD65 Extract Zip Spec      14 (20) '2.0'\n+08AD66 Extract OS            00 (0) 'MS-DOS'\n+08AD67 General Purpose Flag  0000 (0)\n+08AD69 Compression Method    0000 (0) 'Stored'\n+08AD6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08AD6F CRC                   00000000 (0)\n+08AD73 Compressed Size       00000000 (0)\n+08AD77 Uncompressed Size     00000000 (0)\n+08AD7B Filename Length       005C (92)\n+08AD7D Extra Length          0009 (9)\n+08AD7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8AD7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08ADDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08ADDD   Length              0005 (5)\n+08ADDF   Flags               01 (1) 'Modification'\n+08ADE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08ADE4 LOCAL HEADER #247     04034B50 (67324752)\n+08ADE8 Extract Zip Spec      14 (20) '2.0'\n+08ADE9 Extract OS            00 (0) 'MS-DOS'\n+08ADEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08ADEC Compression Method    0000 (0) 'Stored'\n+08ADEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08ADF2 CRC                   00000000 (0)\n+08ADF6 Compressed Size       00000000 (0)\n+08ADFA Uncompressed Size     00000000 (0)\n+08ADFE Filename Length       0072 (114)\n+08AE00 Extra Length          0009 (9)\n+08AE02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8AE02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08AE74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08AE76   Length              0005 (5)\n+08AE78   Flags               01 (1) 'Modification'\n+08AE79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08AE7D PAYLOAD\n+\n+08B543 DATA DESCRIPTOR       08074B50 (134695760)\n+08B547 CRC                   357DA477 (897426551)\n+08B54B Compressed Size       000006C6 (1734)\n+08B54F Uncompressed Size     000006C6 (1734)\n+\n+08B553 LOCAL HEADER #248     04034B50 (67324752)\n+08B557 Extract Zip Spec      14 (20) '2.0'\n+08B558 Extract OS            00 (0) 'MS-DOS'\n+08B559 General Purpose Flag  0000 (0)\n+08B55B Compression Method    0000 (0) 'Stored'\n+08B55D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B561 CRC                   00000000 (0)\n+08B565 Compressed Size       00000000 (0)\n+08B569 Uncompressed Size     00000000 (0)\n+08B56D Filename Length       0059 (89)\n+08B56F Extra Length          0009 (9)\n+08B571 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B571: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B5CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B5CC   Length              0005 (5)\n+08B5CE   Flags               01 (1) 'Modification'\n+08B5CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08B5D3 LOCAL HEADER #249     04034B50 (67324752)\n+08B5D7 Extract Zip Spec      14 (20) '2.0'\n+08B5D8 Extract OS            00 (0) 'MS-DOS'\n+08B5D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08B5DB Compression Method    0000 (0) 'Stored'\n+08B5DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B5E1 CRC                   00000000 (0)\n+08B5E5 Compressed Size       00000000 (0)\n+08B5E9 Uncompressed Size     00000000 (0)\n+08B5ED Filename Length       006F (111)\n+08B5EF Extra Length          0009 (9)\n+08B5F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B5F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B660 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B662   Length              0005 (5)\n+08B664   Flags               01 (1) 'Modification'\n+08B665   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08B669 PAYLOAD\n+\n+08C025 DATA DESCRIPTOR       08074B50 (134695760)\n+08C029 CRC                   F9CAC97B (4190816635)\n+08C02D Compressed Size       000009BC (2492)\n+08C031 Uncompressed Size     000009BC (2492)\n+\n+08C035 LOCAL HEADER #250     04034B50 (67324752)\n+08C039 Extract Zip Spec      14 (20) '2.0'\n+08C03A Extract OS            00 (0) 'MS-DOS'\n+08C03B General Purpose Flag  0000 (0)\n+08C03D Compression Method    0000 (0) 'Stored'\n+08C03F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C043 CRC                   00000000 (0)\n+08C047 Compressed Size       00000000 (0)\n+08C04B Uncompressed Size     00000000 (0)\n+08C04F Filename Length       005F (95)\n+08C051 Extra Length          0009 (9)\n+08C053 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C053: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C0B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C0B4   Length              0005 (5)\n+08C0B6   Flags               01 (1) 'Modification'\n+08C0B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08C0BB LOCAL HEADER #251     04034B50 (67324752)\n+08C0BF Extract Zip Spec      14 (20) '2.0'\n+08C0C0 Extract OS            00 (0) 'MS-DOS'\n+08C0C1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08C0C3 Compression Method    0000 (0) 'Stored'\n+08C0C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08C0C9 CRC                   00000000 (0)\n+08C0CD Compressed Size       00000000 (0)\n+08C0D1 Uncompressed Size     00000000 (0)\n+08C0D5 Filename Length       0075 (117)\n+08C0D7 Extra Length          0009 (9)\n+08C0D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C0D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C14E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C150   Length              0005 (5)\n+08C152   Flags               01 (1) 'Modification'\n+08C153   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08C157 PAYLOAD\n+\n+08CB5E DATA DESCRIPTOR       08074B50 (134695760)\n+08CB62 CRC                   9DEB8C8B (2649459851)\n+08CB66 Compressed Size       00000A07 (2567)\n+08CB6A Uncompressed Size     00000A07 (2567)\n+\n+08CB6E LOCAL HEADER #252     04034B50 (67324752)\n+08CB72 Extract Zip Spec      14 (20) '2.0'\n+08CB73 Extract OS            00 (0) 'MS-DOS'\n+08CB74 General Purpose Flag  0000 (0)\n+08CB76 Compression Method    0000 (0) 'Stored'\n+08CB78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08CB7C CRC                   00000000 (0)\n+08CB80 Compressed Size       00000000 (0)\n+08CB84 Uncompressed Size     00000000 (0)\n+08CB88 Filename Length       0059 (89)\n+08CB8A Extra Length          0009 (9)\n+08CB8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8CB8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08CBE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08CBE7   Length              0005 (5)\n+08CBE9   Flags               01 (1) 'Modification'\n+08CBEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08CBEE LOCAL HEADER #253     04034B50 (67324752)\n+08CBF2 Extract Zip Spec      14 (20) '2.0'\n+08CBF3 Extract OS            00 (0) 'MS-DOS'\n+08CBF4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08CBF6 Compression Method    0000 (0) 'Stored'\n+08CBF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08CBFC CRC                   00000000 (0)\n+08CC00 Compressed Size       00000000 (0)\n+08CC04 Uncompressed Size     00000000 (0)\n+08CC08 Filename Length       006F (111)\n+08CC0A Extra Length          0009 (9)\n+08CC0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8CC0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08CC7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08CC7D   Length              0005 (5)\n+08CC7F   Flags               01 (1) 'Modification'\n+08CC80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08CC84 PAYLOAD\n+\n+08DA62 DATA DESCRIPTOR       08074B50 (134695760)\n+08DA66 CRC                   85B17459 (2242999385)\n+08DA6A Compressed Size       00000DDE (3550)\n+08DA6E Uncompressed Size     00000DDE (3550)\n+\n+08DA72 LOCAL HEADER #254     04034B50 (67324752)\n+08DA76 Extract Zip Spec      14 (20) '2.0'\n+08DA77 Extract OS            00 (0) 'MS-DOS'\n+08DA78 General Purpose Flag  0000 (0)\n+08DA7A Compression Method    0000 (0) 'Stored'\n+08DA7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08DA80 CRC                   00000000 (0)\n+08DA84 Compressed Size       00000000 (0)\n+08DA88 Uncompressed Size     00000000 (0)\n+08DA8C Filename Length       0064 (100)\n+08DA8E Extra Length          0009 (9)\n+08DA90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8DA90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08DAF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08DAF6   Length              0005 (5)\n+08DAF8   Flags               01 (1) 'Modification'\n+08DAF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08DAFD LOCAL HEADER #255     04034B50 (67324752)\n+08DB01 Extract Zip Spec      14 (20) '2.0'\n+08DB02 Extract OS            00 (0) 'MS-DOS'\n+08DB03 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08DB05 Compression Method    0000 (0) 'Stored'\n+08DB07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08DB0B CRC                   00000000 (0)\n+08DB0F Compressed Size       00000000 (0)\n+08DB13 Uncompressed Size     00000000 (0)\n+08DB17 Filename Length       007A (122)\n+08DB19 Extra Length          0009 (9)\n+08DB1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8DB1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08DB95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08DB97   Length              0005 (5)\n+08DB99   Flags               01 (1) 'Modification'\n+08DB9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08DB9E PAYLOAD\n+\n+08E16D DATA DESCRIPTOR       08074B50 (134695760)\n+08E171 CRC                   9C229073 (2619510899)\n+08E175 Compressed Size       000005CF (1487)\n+08E179 Uncompressed Size     000005CF (1487)\n+\n+08E17D LOCAL HEADER #256     04034B50 (67324752)\n+08E181 Extract Zip Spec      14 (20) '2.0'\n+08E182 Extract OS            00 (0) 'MS-DOS'\n+08E183 General Purpose Flag  0000 (0)\n+08E185 Compression Method    0000 (0) 'Stored'\n+08E187 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08E18B CRC                   00000000 (0)\n+08E18F Compressed Size       00000000 (0)\n+08E193 Uncompressed Size     00000000 (0)\n+08E197 Filename Length       0064 (100)\n+08E199 Extra Length          0009 (9)\n+08E19B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8E19B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08E1FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08E201   Length              0005 (5)\n+08E203   Flags               01 (1) 'Modification'\n+08E204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08E208 LOCAL HEADER #257     04034B50 (67324752)\n+08E20C Extract Zip Spec      14 (20) '2.0'\n+08E20D Extract OS            00 (0) 'MS-DOS'\n+08E20E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08E210 Compression Method    0000 (0) 'Stored'\n+08E212 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08E216 CRC                   00000000 (0)\n+08E21A Compressed Size       00000000 (0)\n+08E21E Uncompressed Size     00000000 (0)\n+08E222 Filename Length       007A (122)\n+08E224 Extra Length          0009 (9)\n+08E226 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8E226: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08E2A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08E2A2   Length              0005 (5)\n+08E2A4   Flags               01 (1) 'Modification'\n+08E2A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08E2A9 PAYLOAD\n+\n+08E86B DATA DESCRIPTOR       08074B50 (134695760)\n+08E86F CRC                   A57691CD (2776011213)\n+08E873 Compressed Size       000005C2 (1474)\n+08E877 Uncompressed Size     000005C2 (1474)\n+\n+08E87B LOCAL HEADER #258     04034B50 (67324752)\n+08E87F Extract Zip Spec      14 (20) '2.0'\n+08E880 Extract OS            00 (0) 'MS-DOS'\n+08E881 General Purpose Flag  0000 (0)\n+08E883 Compression Method    0000 (0) 'Stored'\n+08E885 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08E889 CRC                   00000000 (0)\n+08E88D Compressed Size       00000000 (0)\n+08E891 Uncompressed Size     00000000 (0)\n+08E895 Filename Length       0063 (99)\n+08E897 Extra Length          0009 (9)\n+08E899 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8E899: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08E8FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08E8FE   Length              0005 (5)\n+08E900   Flags               01 (1) 'Modification'\n+08E901   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08E905 LOCAL HEADER #259     04034B50 (67324752)\n+08E909 Extract Zip Spec      14 (20) '2.0'\n+08E90A Extract OS            00 (0) 'MS-DOS'\n+08E90B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08E90D Compression Method    0000 (0) 'Stored'\n+08E90F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08E913 CRC                   00000000 (0)\n+08E917 Compressed Size       00000000 (0)\n+08E91B Uncompressed Size     00000000 (0)\n+08E91F Filename Length       0079 (121)\n+08E921 Extra Length          0009 (9)\n+08E923 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8E923: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08E99C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08E99E   Length              0005 (5)\n+08E9A0   Flags               01 (1) 'Modification'\n+08E9A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08E9A5 PAYLOAD\n+\n+08F0DF DATA DESCRIPTOR       08074B50 (134695760)\n+08F0E3 CRC                   6CD31445 (1825772613)\n+08F0E7 Compressed Size       0000073A (1850)\n+08F0EB Uncompressed Size     0000073A (1850)\n+\n+08F0EF LOCAL HEADER #260     04034B50 (67324752)\n+08F0F3 Extract Zip Spec      14 (20) '2.0'\n+08F0F4 Extract OS            00 (0) 'MS-DOS'\n+08F0F5 General Purpose Flag  0000 (0)\n+08F0F7 Compression Method    0000 (0) 'Stored'\n+08F0F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F0FD CRC                   00000000 (0)\n+08F101 Compressed Size       00000000 (0)\n+08F105 Uncompressed Size     00000000 (0)\n+08F109 Filename Length       0061 (97)\n+08F10B Extra Length          0009 (9)\n+08F10D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F10D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F16E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F170   Length              0005 (5)\n+08F172   Flags               01 (1) 'Modification'\n+08F173   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08F177 LOCAL HEADER #261     04034B50 (67324752)\n+08F17B Extract Zip Spec      14 (20) '2.0'\n+08F17C Extract OS            00 (0) 'MS-DOS'\n+08F17D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08F17F Compression Method    0000 (0) 'Stored'\n+08F181 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F185 CRC                   00000000 (0)\n+08F189 Compressed Size       00000000 (0)\n+08F18D Uncompressed Size     00000000 (0)\n+08F191 Filename Length       0077 (119)\n+08F193 Extra Length          0009 (9)\n+08F195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F20C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F20E   Length              0005 (5)\n+08F210   Flags               01 (1) 'Modification'\n+08F211   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08F215 PAYLOAD\n+\n+08FCA7 DATA DESCRIPTOR       08074B50 (134695760)\n+08FCAB CRC                   C97DF8D6 (3380476118)\n+08FCAF Compressed Size       00000A92 (2706)\n+08FCB3 Uncompressed Size     00000A92 (2706)\n+\n+08FCB7 LOCAL HEADER #262     04034B50 (67324752)\n+08FCBB Extract Zip Spec      14 (20) '2.0'\n+08FCBC Extract OS            00 (0) 'MS-DOS'\n+08FCBD General Purpose Flag  0000 (0)\n+08FCBF Compression Method    0000 (0) 'Stored'\n+08FCC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08FCC5 CRC                   00000000 (0)\n+08FCC9 Compressed Size       00000000 (0)\n+08FCCD Uncompressed Size     00000000 (0)\n+08FCD1 Filename Length       0023 (35)\n+08FCD3 Extra Length          0009 (9)\n+08FCD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8FCD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08FCF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08FCFA   Length              0005 (5)\n+08FCFC   Flags               01 (1) 'Modification'\n+08FCFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08FD01 LOCAL HEADER #263     04034B50 (67324752)\n+08FD05 Extract Zip Spec      14 (20) '2.0'\n+08FD06 Extract OS            00 (0) 'MS-DOS'\n+08FD07 General Purpose Flag  0000 (0)\n+08FD09 Compression Method    0000 (0) 'Stored'\n+08FD0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08FD0F CRC                   00000000 (0)\n+08FD13 Compressed Size       00000000 (0)\n+08FD17 Uncompressed Size     00000000 (0)\n+08FD1B Filename Length       002A (42)\n+08FD1D Extra Length          0009 (9)\n+08FD1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8FD1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08FD49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08FD4B   Length              0005 (5)\n+08FD4D   Flags               01 (1) 'Modification'\n+08FD4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08FD52 LOCAL HEADER #264     04034B50 (67324752)\n+08FD56 Extract Zip Spec      14 (20) '2.0'\n+08FD57 Extract OS            00 (0) 'MS-DOS'\n+08FD58 General Purpose Flag  0000 (0)\n+08FD5A Compression Method    0000 (0) 'Stored'\n+08FD5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08FD60 CRC                   00000000 (0)\n+08FD64 Compressed Size       00000000 (0)\n+08FD68 Uncompressed Size     00000000 (0)\n+08FD6C Filename Length       0056 (86)\n+08FD6E Extra Length          0009 (9)\n+08FD70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8FD70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08FDC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08FDC8   Length              0005 (5)\n+08FDCA   Flags               01 (1) 'Modification'\n+08FDCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08FDCF LOCAL HEADER #265     04034B50 (67324752)\n+08FDD3 Extract Zip Spec      14 (20) '2.0'\n+08FDD4 Extract OS            00 (0) 'MS-DOS'\n+08FDD5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08FDD7 Compression Method    0000 (0) 'Stored'\n+08FDD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08FDDD CRC                   00000000 (0)\n+08FDE1 Compressed Size       00000000 (0)\n+08FDE5 Uncompressed Size     00000000 (0)\n+08FDE9 Filename Length       006C (108)\n+08FDEB Extra Length          0009 (9)\n+08FDED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8FDED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08FE59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08FE5B   Length              0005 (5)\n+08FE5D   Flags               01 (1) 'Modification'\n+08FE5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08FE62 PAYLOAD\n+\n+0905F7 DATA DESCRIPTOR       08074B50 (134695760)\n+0905FB CRC                   0B04A112 (184852754)\n+0905FF Compressed Size       00000795 (1941)\n+090603 Uncompressed Size     00000795 (1941)\n+\n+090607 LOCAL HEADER #266     04034B50 (67324752)\n+09060B Extract Zip Spec      14 (20) '2.0'\n+09060C Extract OS            00 (0) 'MS-DOS'\n+09060D General Purpose Flag  0000 (0)\n+09060F Compression Method    0000 (0) 'Stored'\n+090611 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+090615 CRC                   00000000 (0)\n+090619 Compressed Size       00000000 (0)\n+09061D Uncompressed Size     00000000 (0)\n+090621 Filename Length       0031 (49)\n+090623 Extra Length          0009 (9)\n+090625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x90625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090656 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090658   Length              0005 (5)\n+09065A   Flags               01 (1) 'Modification'\n+09065B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09065F LOCAL HEADER #267     04034B50 (67324752)\n+090663 Extract Zip Spec      14 (20) '2.0'\n+090664 Extract OS            00 (0) 'MS-DOS'\n+090665 General Purpose Flag  0000 (0)\n+090667 Compression Method    0000 (0) 'Stored'\n+090669 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09066D CRC                   00000000 (0)\n+090671 Compressed Size       00000000 (0)\n+090675 Uncompressed Size     00000000 (0)\n+090679 Filename Length       0038 (56)\n+09067B Extra Length          0009 (9)\n+09067D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9067D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0906B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0906B7   Length              0005 (5)\n+0906B9   Flags               01 (1) 'Modification'\n+0906BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0906BE LOCAL HEADER #268     04034B50 (67324752)\n+0906C2 Extract Zip Spec      14 (20) '2.0'\n+0906C3 Extract OS            00 (0) 'MS-DOS'\n+0906C4 General Purpose Flag  0000 (0)\n+0906C6 Compression Method    0000 (0) 'Stored'\n+0906C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0906CC CRC                   00000000 (0)\n+0906D0 Compressed Size       00000000 (0)\n+0906D4 Uncompressed Size     00000000 (0)\n+0906D8 Filename Length       006A (106)\n+0906DA Extra Length          0009 (9)\n+0906DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x906DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090746 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090748   Length              0005 (5)\n+09074A   Flags               01 (1) 'Modification'\n+09074B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09074F LOCAL HEADER #269     04034B50 (67324752)\n+090753 Extract Zip Spec      14 (20) '2.0'\n+090754 Extract OS            00 (0) 'MS-DOS'\n+090755 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+090757 Compression Method    0000 (0) 'Stored'\n+090759 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09075D CRC                   00000000 (0)\n+090761 Compressed Size       00000000 (0)\n+090765 Uncompressed Size     00000000 (0)\n+090769 Filename Length       0080 (128)\n+09076B Extra Length          0009 (9)\n+09076D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9076D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0907ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0907EF   Length              0005 (5)\n+0907F1   Flags               01 (1) 'Modification'\n+0907F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0907F6 PAYLOAD\n+\n+0910A1 DATA DESCRIPTOR       08074B50 (134695760)\n+0910A5 CRC                   9A51A289 (2589041289)\n+0910A9 Compressed Size       000008AB (2219)\n+0910AD Uncompressed Size     000008AB (2219)\n+\n+0910B1 LOCAL HEADER #270     04034B50 (67324752)\n+0910B5 Extract Zip Spec      14 (20) '2.0'\n+0910B6 Extract OS            00 (0) 'MS-DOS'\n+0910B7 General Purpose Flag  0000 (0)\n+0910B9 Compression Method    0000 (0) 'Stored'\n+0910BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0910BF CRC                   00000000 (0)\n+0910C3 Compressed Size       00000000 (0)\n+0910C7 Uncompressed Size     00000000 (0)\n+0910CB Filename Length       0022 (34)\n+0910CD Extra Length          0009 (9)\n+0910CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x910CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0910F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0910F3   Length              0005 (5)\n+0910F5   Flags               01 (1) 'Modification'\n+0910F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0910FA LOCAL HEADER #271     04034B50 (67324752)\n+0910FE Extract Zip Spec      14 (20) '2.0'\n+0910FF Extract OS            00 (0) 'MS-DOS'\n+091100 General Purpose Flag  0000 (0)\n+091102 Compression Method    0000 (0) 'Stored'\n+091104 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+091108 CRC                   00000000 (0)\n+09110C Compressed Size       00000000 (0)\n+091110 Uncompressed Size     00000000 (0)\n+091114 Filename Length       0029 (41)\n+091116 Extra Length          0009 (9)\n+091118 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x91118: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+091141 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+091143   Length              0005 (5)\n+091145   Flags               01 (1) 'Modification'\n+091146   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09114A LOCAL HEADER #272     04034B50 (67324752)\n+09114E Extract Zip Spec      14 (20) '2.0'\n+09114F Extract OS            00 (0) 'MS-DOS'\n+091150 General Purpose Flag  0000 (0)\n+091152 Compression Method    0000 (0) 'Stored'\n+091154 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+091158 CRC                   00000000 (0)\n+09115C Compressed Size       00000000 (0)\n+091160 Uncompressed Size     00000000 (0)\n+091164 Filename Length       0063 (99)\n+091166 Extra Length          0009 (9)\n+091168 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x91168: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0911CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0911CD   Length              0005 (5)\n+0911CF   Flags               01 (1) 'Modification'\n+0911D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0911D4 LOCAL HEADER #273     04034B50 (67324752)\n+0911D8 Extract Zip Spec      14 (20) '2.0'\n+0911D9 Extract OS            00 (0) 'MS-DOS'\n+0911DA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0911DC Compression Method    0000 (0) 'Stored'\n+0911DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0911E2 CRC                   00000000 (0)\n+0911E6 Compressed Size       00000000 (0)\n+0911EA Uncompressed Size     00000000 (0)\n+0911EE Filename Length       0079 (121)\n+0911F0 Extra Length          0009 (9)\n+0911F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x911F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09126B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09126D   Length              0005 (5)\n+09126F   Flags               01 (1) 'Modification'\n+091270   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+091274 PAYLOAD\n+\n+0920B8 DATA DESCRIPTOR       08074B50 (134695760)\n+0920BC CRC                   28034B81 (671304577)\n+0920C0 Compressed Size       00000E44 (3652)\n+0920C4 Uncompressed Size     00000E44 (3652)\n+\n+0920C8 LOCAL HEADER #274     04034B50 (67324752)\n+0920CC Extract Zip Spec      14 (20) '2.0'\n+0920CD Extract OS            00 (0) 'MS-DOS'\n+0920CE General Purpose Flag  0000 (0)\n+0920D0 Compression Method    0000 (0) 'Stored'\n+0920D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0920D6 CRC                   00000000 (0)\n+0920DA Compressed Size       00000000 (0)\n+0920DE Uncompressed Size     00000000 (0)\n+0920E2 Filename Length       003C (60)\n+0920E4 Extra Length          0009 (9)\n+0920E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x920E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+092122 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+092124   Length              0005 (5)\n+092126   Flags               01 (1) 'Modification'\n+092127   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09212B LOCAL HEADER #275     04034B50 (67324752)\n+09212F Extract Zip Spec      14 (20) '2.0'\n+092130 Extract OS            00 (0) 'MS-DOS'\n+092131 General Purpose Flag  0000 (0)\n+092133 Compression Method    0000 (0) 'Stored'\n+092135 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+092139 CRC                   00000000 (0)\n+09213D Compressed Size       00000000 (0)\n+092141 Uncompressed Size     00000000 (0)\n+092145 Filename Length       0043 (67)\n+092147 Extra Length          0009 (9)\n+092149 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x92149: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09218C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09218E   Length              0005 (5)\n+092190   Flags               01 (1) 'Modification'\n+092191   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+092195 LOCAL HEADER #276     04034B50 (67324752)\n+092199 Extract Zip Spec      14 (20) '2.0'\n+09219A Extract OS            00 (0) 'MS-DOS'\n+09219B General Purpose Flag  0000 (0)\n+09219D Compression Method    0000 (0) 'Stored'\n+09219F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0921A3 CRC                   00000000 (0)\n+0921A7 Compressed Size       00000000 (0)\n+0921AB Uncompressed Size     00000000 (0)\n+0921AF Filename Length       0061 (97)\n+0921B1 Extra Length          0009 (9)\n+0921B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x921B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+092214 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+092216   Length              0005 (5)\n+092218   Flags               01 (1) 'Modification'\n+092219   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09221D LOCAL HEADER #277     04034B50 (67324752)\n+092221 Extract Zip Spec      14 (20) '2.0'\n+092222 Extract OS            00 (0) 'MS-DOS'\n+092223 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+092225 Compression Method    0000 (0) 'Stored'\n+092227 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09222B CRC                   00000000 (0)\n+09222F Compressed Size       00000000 (0)\n+092233 Uncompressed Size     00000000 (0)\n+092237 Filename Length       0077 (119)\n+092239 Extra Length          0009 (9)\n+09223B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9223B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0922B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0922B4   Length              0005 (5)\n+0922B6   Flags               01 (1) 'Modification'\n+0922B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0922BB PAYLOAD\n+\n+0959A2 DATA DESCRIPTOR       08074B50 (134695760)\n+0959A6 CRC                   9ED7BE90 (2664939152)\n+0959AA Compressed Size       000036E7 (14055)\n+0959AE Uncompressed Size     000036E7 (14055)\n+\n+0959B2 LOCAL HEADER #278     04034B50 (67324752)\n+0959B6 Extract Zip Spec      14 (20) '2.0'\n+0959B7 Extract OS            00 (0) 'MS-DOS'\n+0959B8 General Purpose Flag  0000 (0)\n+0959BA Compression Method    0000 (0) 'Stored'\n+0959BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0959C0 CRC                   00000000 (0)\n+0959C4 Compressed Size       00000000 (0)\n+0959C8 Uncompressed Size     00000000 (0)\n+0959CC Filename Length       0061 (97)\n+0959CE Extra Length          0009 (9)\n+0959D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x959D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095A31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095A33   Length              0005 (5)\n+095A35   Flags               01 (1) 'Modification'\n+095A36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+095A3A LOCAL HEADER #279     04034B50 (67324752)\n+095A3E Extract Zip Spec      14 (20) '2.0'\n+095A3F Extract OS            00 (0) 'MS-DOS'\n+095A40 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+095A42 Compression Method    0000 (0) 'Stored'\n+095A44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095A48 CRC                   00000000 (0)\n+095A4C Compressed Size       00000000 (0)\n+095A50 Uncompressed Size     00000000 (0)\n+095A54 Filename Length       0077 (119)\n+095A56 Extra Length          0009 (9)\n+095A58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95A58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095ACF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095AD1   Length              0005 (5)\n+095AD3   Flags               01 (1) 'Modification'\n+095AD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+095AD8 PAYLOAD\n+\n+09A26A DATA DESCRIPTOR       08074B50 (134695760)\n+09A26E CRC                   DF1BCC3E (3743140926)\n+09A272 Compressed Size       00004792 (18322)\n+09A276 Uncompressed Size     00004792 (18322)\n+\n+09A27A LOCAL HEADER #280     04034B50 (67324752)\n+09A27E Extract Zip Spec      14 (20) '2.0'\n+09A27F Extract OS            00 (0) 'MS-DOS'\n+09A280 General Purpose Flag  0000 (0)\n+09A282 Compression Method    0000 (0) 'Stored'\n+09A284 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09A288 CRC                   00000000 (0)\n+09A28C Compressed Size       00000000 (0)\n+09A290 Uncompressed Size     00000000 (0)\n+09A294 Filename Length       0063 (99)\n+09A296 Extra Length          0009 (9)\n+09A298 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9A298: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09A2FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09A2FD   Length              0005 (5)\n+09A2FF   Flags               01 (1) 'Modification'\n+09A300   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09A304 LOCAL HEADER #281     04034B50 (67324752)\n+09A308 Extract Zip Spec      14 (20) '2.0'\n+09A309 Extract OS            00 (0) 'MS-DOS'\n+09A30A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09A30C Compression Method    0000 (0) 'Stored'\n+09A30E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09A312 CRC                   00000000 (0)\n+09A316 Compressed Size       00000000 (0)\n+09A31A Uncompressed Size     00000000 (0)\n+09A31E Filename Length       0079 (121)\n+09A320 Extra Length          0009 (9)\n+09A322 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9A322: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09A39B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09A39D   Length              0005 (5)\n+09A39F   Flags               01 (1) 'Modification'\n+09A3A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09A3A4 PAYLOAD\n+\n+0A0180 DATA DESCRIPTOR       08074B50 (134695760)\n+0A0184 CRC                   27CFA48B (667919499)\n+0A0188 Compressed Size       00005DDC (24028)\n+0A018C Uncompressed Size     00005DDC (24028)\n+\n+0A0190 LOCAL HEADER #282     04034B50 (67324752)\n+0A0194 Extract Zip Spec      14 (20) '2.0'\n+0A0195 Extract OS            00 (0) 'MS-DOS'\n+0A0196 General Purpose Flag  0000 (0)\n+0A0198 Compression Method    0000 (0) 'Stored'\n+0A019A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A019E CRC                   00000000 (0)\n+0A01A2 Compressed Size       00000000 (0)\n+0A01A6 Uncompressed Size     00000000 (0)\n+0A01AA Filename Length       0067 (103)\n+0A01AC Extra Length          0009 (9)\n+0A01AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA01AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A0215 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A0217   Length              0005 (5)\n+0A0219   Flags               01 (1) 'Modification'\n+0A021A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A021E LOCAL HEADER #283     04034B50 (67324752)\n+0A0222 Extract Zip Spec      14 (20) '2.0'\n+0A0223 Extract OS            00 (0) 'MS-DOS'\n+0A0224 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A0226 Compression Method    0000 (0) 'Stored'\n+0A0228 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A022C CRC                   00000000 (0)\n+0A0230 Compressed Size       00000000 (0)\n+0A0234 Uncompressed Size     00000000 (0)\n+0A0238 Filename Length       007D (125)\n+0A023A Extra Length          0009 (9)\n+0A023C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA023C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A02B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A02BB   Length              0005 (5)\n+0A02BD   Flags               01 (1) 'Modification'\n+0A02BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A02C2 PAYLOAD\n+\n+0A3DFC DATA DESCRIPTOR       08074B50 (134695760)\n+0A3E00 CRC                   620AB78F (1644869519)\n+0A3E04 Compressed Size       00003B3A (15162)\n+0A3E08 Uncompressed Size     00003B3A (15162)\n+\n+0A3E0C LOCAL HEADER #284     04034B50 (67324752)\n+0A3E10 Extract Zip Spec      14 (20) '2.0'\n+0A3E11 Extract OS            00 (0) 'MS-DOS'\n+0A3E12 General Purpose Flag  0000 (0)\n+0A3E14 Compression Method    0000 (0) 'Stored'\n+0A3E16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A3E1A CRC                   00000000 (0)\n+0A3E1E Compressed Size       00000000 (0)\n+0A3E22 Uncompressed Size     00000000 (0)\n+0A3E26 Filename Length       0067 (103)\n+0A3E28 Extra Length          0009 (9)\n+0A3E2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA3E2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A3E91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A3E93   Length              0005 (5)\n+0A3E95   Flags               01 (1) 'Modification'\n+0A3E96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A3E9A LOCAL HEADER #285     04034B50 (67324752)\n+0A3E9E Extract Zip Spec      14 (20) '2.0'\n+0A3E9F Extract OS            00 (0) 'MS-DOS'\n+0A3EA0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A3EA2 Compression Method    0000 (0) 'Stored'\n+0A3EA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A3EA8 CRC                   00000000 (0)\n+0A3EAC Compressed Size       00000000 (0)\n+0A3EB0 Uncompressed Size     00000000 (0)\n+0A3EB4 Filename Length       007D (125)\n+0A3EB6 Extra Length          0009 (9)\n+0A3EB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA3EB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A3F35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A3F37   Length              0005 (5)\n+0A3F39   Flags               01 (1) 'Modification'\n+0A3F3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A3F3E PAYLOAD\n+\n+0A87A3 DATA DESCRIPTOR       08074B50 (134695760)\n+0A87A7 CRC                   1E08683A (503867450)\n+0A87AB Compressed Size       00004865 (18533)\n+0A87AF Uncompressed Size     00004865 (18533)\n+\n+0A87B3 LOCAL HEADER #286     04034B50 (67324752)\n+0A87B7 Extract Zip Spec      14 (20) '2.0'\n+0A87B8 Extract OS            00 (0) 'MS-DOS'\n+0A87B9 General Purpose Flag  0000 (0)\n+0A87BB Compression Method    0000 (0) 'Stored'\n+0A87BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A87C1 CRC                   00000000 (0)\n+0A87C5 Compressed Size       00000000 (0)\n+0A87C9 Uncompressed Size     00000000 (0)\n+0A87CD Filename Length       006B (107)\n+0A87CF Extra Length          0009 (9)\n+0A87D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA87D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A883C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A883E   Length              0005 (5)\n+0A8840   Flags               01 (1) 'Modification'\n+0A8841   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A8845 LOCAL HEADER #287     04034B50 (67324752)\n+0A8849 Extract Zip Spec      14 (20) '2.0'\n+0A884A Extract OS            00 (0) 'MS-DOS'\n+0A884B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A884D Compression Method    0000 (0) 'Stored'\n+0A884F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A8853 CRC                   00000000 (0)\n+0A8857 Compressed Size       00000000 (0)\n+0A885B Uncompressed Size     00000000 (0)\n+0A885F Filename Length       0081 (129)\n+0A8861 Extra Length          0009 (9)\n+0A8863 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA8863: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A88E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A88E6   Length              0005 (5)\n+0A88E8   Flags               01 (1) 'Modification'\n+0A88E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A88ED PAYLOAD\n+\n+0A93CC DATA DESCRIPTOR       08074B50 (134695760)\n+0A93D0 CRC                   53DFF1D7 (1407185367)\n+0A93D4 Compressed Size       00000ADF (2783)\n+0A93D8 Uncompressed Size     00000ADF (2783)\n+\n+0A93DC LOCAL HEADER #288     04034B50 (67324752)\n+0A93E0 Extract Zip Spec      14 (20) '2.0'\n+0A93E1 Extract OS            00 (0) 'MS-DOS'\n+0A93E2 General Purpose Flag  0000 (0)\n+0A93E4 Compression Method    0000 (0) 'Stored'\n+0A93E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A93EA CRC                   00000000 (0)\n+0A93EE Compressed Size       00000000 (0)\n+0A93F2 Uncompressed Size     00000000 (0)\n+0A93F6 Filename Length       0067 (103)\n+0A93F8 Extra Length          0009 (9)\n+0A93FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA93FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A9461 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9463   Length              0005 (5)\n+0A9465   Flags               01 (1) 'Modification'\n+0A9466   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A946A LOCAL HEADER #289     04034B50 (67324752)\n+0A946E Extract Zip Spec      14 (20) '2.0'\n+0A946F Extract OS            00 (0) 'MS-DOS'\n+0A9470 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A9472 Compression Method    0000 (0) 'Stored'\n+0A9474 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A9478 CRC                   00000000 (0)\n+0A947C Compressed Size       00000000 (0)\n+0A9480 Uncompressed Size     00000000 (0)\n+0A9484 Filename Length       007D (125)\n+0A9486 Extra Length          0009 (9)\n+0A9488 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA9488: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A9505 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9507   Length              0005 (5)\n+0A9509   Flags               01 (1) 'Modification'\n+0A950A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A950E PAYLOAD\n+\n+0A9E47 DATA DESCRIPTOR       08074B50 (134695760)\n+0A9E4B CRC                   6D3A5445 (1832539205)\n+0A9E4F Compressed Size       00000939 (2361)\n+0A9E53 Uncompressed Size     00000939 (2361)\n+\n+0A9E57 LOCAL HEADER #290     04034B50 (67324752)\n+0A9E5B Extract Zip Spec      14 (20) '2.0'\n+0A9E5C Extract OS            00 (0) 'MS-DOS'\n+0A9E5D General Purpose Flag  0000 (0)\n+0A9E5F Compression Method    0000 (0) 'Stored'\n+0A9E61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A9E65 CRC                   00000000 (0)\n+0A9E69 Compressed Size       00000000 (0)\n+0A9E6D Uncompressed Size     00000000 (0)\n+0A9E71 Filename Length       0076 (118)\n+0A9E73 Extra Length          0009 (9)\n+0A9E75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA9E75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A9EEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9EED   Length              0005 (5)\n+0A9EEF   Flags               01 (1) 'Modification'\n+0A9EF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A9EF4 LOCAL HEADER #291     04034B50 (67324752)\n+0A9EF8 Extract Zip Spec      14 (20) '2.0'\n+0A9EF9 Extract OS            00 (0) 'MS-DOS'\n+0A9EFA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A9EFC Compression Method    0000 (0) 'Stored'\n+0A9EFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A9F02 CRC                   00000000 (0)\n+0A9F06 Compressed Size       00000000 (0)\n+0A9F0A Uncompressed Size     00000000 (0)\n+0A9F0E Filename Length       008C (140)\n+0A9F10 Extra Length          0009 (9)\n+0A9F12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xA6D27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA9F12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A6DB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6DB5   Length              0005 (5)\n-0A6DB7   Flags               01 (1) 'Modification'\n-0A6DB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A6DBC PAYLOAD\n-\n-0A7B99 DATA DESCRIPTOR       08074B50 (134695760)\n-0A7B9D CRC                   5C6B1924 (1550522660)\n-0A7BA1 Compressed Size       00000DDD (3549)\n-0A7BA5 Uncompressed Size     00000DDD (3549)\n-\n-0A7BA9 LOCAL HEADER #292     04034B50 (67324752)\n-0A7BAD Extract Zip Spec      14 (20) '2.0'\n-0A7BAE Extract OS            00 (0) 'MS-DOS'\n-0A7BAF General Purpose Flag  0000 (0)\n-0A7BB1 Compression Method    0000 (0) 'Stored'\n-0A7BB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A7BB7 CRC                   00000000 (0)\n-0A7BBB Compressed Size       00000000 (0)\n-0A7BBF Uncompressed Size     00000000 (0)\n-0A7BC3 Filename Length       0061 (97)\n-0A7BC5 Extra Length          0009 (9)\n-0A7BC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA7BC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A7C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A7C2A   Length              0005 (5)\n-0A7C2C   Flags               01 (1) 'Modification'\n-0A7C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A7C31 LOCAL HEADER #293     04034B50 (67324752)\n-0A7C35 Extract Zip Spec      14 (20) '2.0'\n-0A7C36 Extract OS            00 (0) 'MS-DOS'\n-0A7C37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A7C39 Compression Method    0000 (0) 'Stored'\n-0A7C3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A7C3F CRC                   00000000 (0)\n-0A7C43 Compressed Size       00000000 (0)\n-0A7C47 Uncompressed Size     00000000 (0)\n-0A7C4B Filename Length       0077 (119)\n-0A7C4D Extra Length          0009 (9)\n-0A7C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA7C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A7CC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A7CC8   Length              0005 (5)\n-0A7CCA   Flags               01 (1) 'Modification'\n-0A7CCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A7CCF PAYLOAD\n-\n-0B1004 DATA DESCRIPTOR       08074B50 (134695760)\n-0B1008 CRC                   C7DF88BB (3353315515)\n-0B100C Compressed Size       00009335 (37685)\n-0B1010 Uncompressed Size     00009335 (37685)\n-\n-0B1014 LOCAL HEADER #294     04034B50 (67324752)\n-0B1018 Extract Zip Spec      14 (20) '2.0'\n-0B1019 Extract OS            00 (0) 'MS-DOS'\n-0B101A General Purpose Flag  0000 (0)\n-0B101C Compression Method    0000 (0) 'Stored'\n-0B101E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1022 CRC                   00000000 (0)\n-0B1026 Compressed Size       00000000 (0)\n-0B102A Uncompressed Size     00000000 (0)\n-0B102E Filename Length       006A (106)\n-0B1030 Extra Length          0009 (9)\n-0B1032 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1032: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B109C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B109E   Length              0005 (5)\n-0B10A0   Flags               01 (1) 'Modification'\n-0B10A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B10A5 LOCAL HEADER #295     04034B50 (67324752)\n-0B10A9 Extract Zip Spec      14 (20) '2.0'\n-0B10AA Extract OS            00 (0) 'MS-DOS'\n-0B10AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B10AD Compression Method    0000 (0) 'Stored'\n-0B10AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B10B3 CRC                   00000000 (0)\n-0B10B7 Compressed Size       00000000 (0)\n-0B10BB Uncompressed Size     00000000 (0)\n-0B10BF Filename Length       0080 (128)\n-0B10C1 Extra Length          0009 (9)\n-0B10C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB10C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1143 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1145   Length              0005 (5)\n-0B1147   Flags               01 (1) 'Modification'\n-0B1148   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B114C PAYLOAD\n-\n-0B2CFD DATA DESCRIPTOR       08074B50 (134695760)\n-0B2D01 CRC                   217BBE0B (561757707)\n-0B2D05 Compressed Size       00001BB1 (7089)\n-0B2D09 Uncompressed Size     00001BB1 (7089)\n-\n-0B2D0D LOCAL HEADER #296     04034B50 (67324752)\n-0B2D11 Extract Zip Spec      14 (20) '2.0'\n-0B2D12 Extract OS            00 (0) 'MS-DOS'\n-0B2D13 General Purpose Flag  0000 (0)\n-0B2D15 Compression Method    0000 (0) 'Stored'\n-0B2D17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2D1B CRC                   00000000 (0)\n-0B2D1F Compressed Size       00000000 (0)\n-0B2D23 Uncompressed Size     00000000 (0)\n-0B2D27 Filename Length       0029 (41)\n-0B2D29 Extra Length          0009 (9)\n-0B2D2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2D2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2D54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2D56   Length              0005 (5)\n-0B2D58   Flags               01 (1) 'Modification'\n-0B2D59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B2D5D LOCAL HEADER #297     04034B50 (67324752)\n-0B2D61 Extract Zip Spec      14 (20) '2.0'\n-0B2D62 Extract OS            00 (0) 'MS-DOS'\n-0B2D63 General Purpose Flag  0000 (0)\n-0B2D65 Compression Method    0000 (0) 'Stored'\n-0B2D67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2D6B CRC                   00000000 (0)\n-0B2D6F Compressed Size       00000000 (0)\n-0B2D73 Uncompressed Size     00000000 (0)\n-0B2D77 Filename Length       0030 (48)\n-0B2D79 Extra Length          0009 (9)\n-0B2D7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2D7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2DAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2DAD   Length              0005 (5)\n-0B2DAF   Flags               01 (1) 'Modification'\n-0B2DB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B2DB4 LOCAL HEADER #298     04034B50 (67324752)\n-0B2DB8 Extract Zip Spec      14 (20) '2.0'\n-0B2DB9 Extract OS            00 (0) 'MS-DOS'\n-0B2DBA General Purpose Flag  0000 (0)\n-0B2DBC Compression Method    0000 (0) 'Stored'\n-0B2DBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2DC2 CRC                   00000000 (0)\n-0B2DC6 Compressed Size       00000000 (0)\n-0B2DCA Uncompressed Size     00000000 (0)\n-0B2DCE Filename Length       006A (106)\n-0B2DD0 Extra Length          0009 (9)\n-0B2DD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2DD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2E3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2E3E   Length              0005 (5)\n-0B2E40   Flags               01 (1) 'Modification'\n-0B2E41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B2E45 LOCAL HEADER #299     04034B50 (67324752)\n-0B2E49 Extract Zip Spec      14 (20) '2.0'\n-0B2E4A Extract OS            00 (0) 'MS-DOS'\n-0B2E4B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B2E4D Compression Method    0000 (0) 'Stored'\n-0B2E4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2E53 CRC                   00000000 (0)\n-0B2E57 Compressed Size       00000000 (0)\n-0B2E5B Uncompressed Size     00000000 (0)\n-0B2E5F Filename Length       0080 (128)\n-0B2E61 Extra Length          0009 (9)\n-0B2E63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2E63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2EE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2EE5   Length              0005 (5)\n-0B2EE7   Flags               01 (1) 'Modification'\n-0B2EE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B2EEC PAYLOAD\n-\n-0B38BF DATA DESCRIPTOR       08074B50 (134695760)\n-0B38C3 CRC                   DCEFA272 (3706692210)\n-0B38C7 Compressed Size       000009D3 (2515)\n-0B38CB Uncompressed Size     000009D3 (2515)\n-\n-0B38CF LOCAL HEADER #300     04034B50 (67324752)\n-0B38D3 Extract Zip Spec      14 (20) '2.0'\n-0B38D4 Extract OS            00 (0) 'MS-DOS'\n-0B38D5 General Purpose Flag  0000 (0)\n-0B38D7 Compression Method    0000 (0) 'Stored'\n-0B38D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B38DD CRC                   00000000 (0)\n-0B38E1 Compressed Size       00000000 (0)\n-0B38E5 Uncompressed Size     00000000 (0)\n-0B38E9 Filename Length       006C (108)\n-0B38EB Extra Length          0009 (9)\n-0B38ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB38ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B3959 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B395B   Length              0005 (5)\n-0B395D   Flags               01 (1) 'Modification'\n-0B395E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B3962 LOCAL HEADER #301     04034B50 (67324752)\n-0B3966 Extract Zip Spec      14 (20) '2.0'\n-0B3967 Extract OS            00 (0) 'MS-DOS'\n-0B3968 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B396A Compression Method    0000 (0) 'Stored'\n-0B396C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B3970 CRC                   00000000 (0)\n-0B3974 Compressed Size       00000000 (0)\n-0B3978 Uncompressed Size     00000000 (0)\n-0B397C Filename Length       0082 (130)\n-0B397E Extra Length          0009 (9)\n-0B3980 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB3980: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B3A02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B3A04   Length              0005 (5)\n-0B3A06   Flags               01 (1) 'Modification'\n-0B3A07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B3A0B PAYLOAD\n-\n-0B4C81 DATA DESCRIPTOR       08074B50 (134695760)\n-0B4C85 CRC                   26E963FE (652829694)\n-0B4C89 Compressed Size       00001276 (4726)\n-0B4C8D Uncompressed Size     00001276 (4726)\n-\n-0B4C91 LOCAL HEADER #302     04034B50 (67324752)\n-0B4C95 Extract Zip Spec      14 (20) '2.0'\n-0B4C96 Extract OS            00 (0) 'MS-DOS'\n-0B4C97 General Purpose Flag  0000 (0)\n-0B4C99 Compression Method    0000 (0) 'Stored'\n-0B4C9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B4C9F CRC                   00000000 (0)\n-0B4CA3 Compressed Size       00000000 (0)\n-0B4CA7 Uncompressed Size     00000000 (0)\n-0B4CAB Filename Length       0028 (40)\n-0B4CAD Extra Length          0009 (9)\n-0B4CAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB4CAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B4CD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B4CD9   Length              0005 (5)\n-0B4CDB   Flags               01 (1) 'Modification'\n-0B4CDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B4CE0 LOCAL HEADER #303     04034B50 (67324752)\n-0B4CE4 Extract Zip Spec      14 (20) '2.0'\n-0B4CE5 Extract OS            00 (0) 'MS-DOS'\n-0B4CE6 General Purpose Flag  0000 (0)\n-0B4CE8 Compression Method    0000 (0) 'Stored'\n-0B4CEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B4CEE CRC                   00000000 (0)\n-0B4CF2 Compressed Size       00000000 (0)\n-0B4CF6 Uncompressed Size     00000000 (0)\n-0B4CFA Filename Length       002F (47)\n-0B4CFC Extra Length          0009 (9)\n-0B4CFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB4CFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B4D2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B4D2F   Length              0005 (5)\n-0B4D31   Flags               01 (1) 'Modification'\n-0B4D32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B4D36 LOCAL HEADER #304     04034B50 (67324752)\n-0B4D3A Extract Zip Spec      14 (20) '2.0'\n-0B4D3B Extract OS            00 (0) 'MS-DOS'\n-0B4D3C General Purpose Flag  0000 (0)\n-0B4D3E Compression Method    0000 (0) 'Stored'\n-0B4D40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B4D44 CRC                   00000000 (0)\n-0B4D48 Compressed Size       00000000 (0)\n-0B4D4C Uncompressed Size     00000000 (0)\n-0B4D50 Filename Length       005F (95)\n-0B4D52 Extra Length          0009 (9)\n-0B4D54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB4D54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B4DB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B4DB5   Length              0005 (5)\n-0B4DB7   Flags               01 (1) 'Modification'\n-0B4DB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B4DBC LOCAL HEADER #305     04034B50 (67324752)\n-0B4DC0 Extract Zip Spec      14 (20) '2.0'\n-0B4DC1 Extract OS            00 (0) 'MS-DOS'\n-0B4DC2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B4DC4 Compression Method    0000 (0) 'Stored'\n-0B4DC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B4DCA CRC                   00000000 (0)\n-0B4DCE Compressed Size       00000000 (0)\n-0B4DD2 Uncompressed Size     00000000 (0)\n-0B4DD6 Filename Length       0075 (117)\n-0B4DD8 Extra Length          0009 (9)\n-0B4DDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB4DDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B4E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B4E51   Length              0005 (5)\n-0B4E53   Flags               01 (1) 'Modification'\n-0B4E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B4E58 PAYLOAD\n-\n-0BD79C DATA DESCRIPTOR       08074B50 (134695760)\n-0BD7A0 CRC                   6B96B8CE (1805039822)\n-0BD7A4 Compressed Size       00008944 (35140)\n-0BD7A8 Uncompressed Size     00008944 (35140)\n-\n-0BD7AC LOCAL HEADER #306     04034B50 (67324752)\n-0BD7B0 Extract Zip Spec      14 (20) '2.0'\n-0BD7B1 Extract OS            00 (0) 'MS-DOS'\n-0BD7B2 General Purpose Flag  0000 (0)\n-0BD7B4 Compression Method    0000 (0) 'Stored'\n-0BD7B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BD7BA CRC                   00000000 (0)\n-0BD7BE Compressed Size       00000000 (0)\n-0BD7C2 Uncompressed Size     00000000 (0)\n-0BD7C6 Filename Length       0066 (102)\n-0BD7C8 Extra Length          0009 (9)\n-0BD7CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBD7CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BD830 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BD832   Length              0005 (5)\n-0BD834   Flags               01 (1) 'Modification'\n-0BD835   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BD839 LOCAL HEADER #307     04034B50 (67324752)\n-0BD83D Extract Zip Spec      14 (20) '2.0'\n-0BD83E Extract OS            00 (0) 'MS-DOS'\n-0BD83F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BD841 Compression Method    0000 (0) 'Stored'\n-0BD843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BD847 CRC                   00000000 (0)\n-0BD84B Compressed Size       00000000 (0)\n-0BD84F Uncompressed Size     00000000 (0)\n-0BD853 Filename Length       007C (124)\n-0BD855 Extra Length          0009 (9)\n-0BD857 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBD857: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BD8D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BD8D5   Length              0005 (5)\n-0BD8D7   Flags               01 (1) 'Modification'\n-0BD8D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BD8DC PAYLOAD\n-\n-0BF516 DATA DESCRIPTOR       08074B50 (134695760)\n-0BF51A CRC                   DB2A8543 (3676996931)\n-0BF51E Compressed Size       00001C3A (7226)\n-0BF522 Uncompressed Size     00001C3A (7226)\n-\n-0BF526 LOCAL HEADER #308     04034B50 (67324752)\n-0BF52A Extract Zip Spec      14 (20) '2.0'\n-0BF52B Extract OS            00 (0) 'MS-DOS'\n-0BF52C General Purpose Flag  0000 (0)\n-0BF52E Compression Method    0000 (0) 'Stored'\n-0BF530 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF534 CRC                   00000000 (0)\n-0BF538 Compressed Size       00000000 (0)\n-0BF53C Uncompressed Size     00000000 (0)\n-0BF540 Filename Length       0069 (105)\n-0BF542 Extra Length          0009 (9)\n-0BF544 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF544: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF5AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF5AF   Length              0005 (5)\n-0BF5B1   Flags               01 (1) 'Modification'\n-0BF5B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BF5B6 LOCAL HEADER #309     04034B50 (67324752)\n-0BF5BA Extract Zip Spec      14 (20) '2.0'\n-0BF5BB Extract OS            00 (0) 'MS-DOS'\n-0BF5BC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BF5BE Compression Method    0000 (0) 'Stored'\n-0BF5C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF5C4 CRC                   00000000 (0)\n-0BF5C8 Compressed Size       00000000 (0)\n-0BF5CC Uncompressed Size     00000000 (0)\n-0BF5D0 Filename Length       007F (127)\n-0BF5D2 Extra Length          0009 (9)\n-0BF5D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF5D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF653 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF655   Length              0005 (5)\n-0BF657   Flags               01 (1) 'Modification'\n-0BF658   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BF65C PAYLOAD\n-\n-0C0BAE DATA DESCRIPTOR       08074B50 (134695760)\n-0C0BB2 CRC                   FF5BC4DC (4284204252)\n-0C0BB6 Compressed Size       00001552 (5458)\n-0C0BBA Uncompressed Size     00001552 (5458)\n-\n-0C0BBE LOCAL HEADER #310     04034B50 (67324752)\n-0C0BC2 Extract Zip Spec      14 (20) '2.0'\n-0C0BC3 Extract OS            00 (0) 'MS-DOS'\n-0C0BC4 General Purpose Flag  0000 (0)\n-0C0BC6 Compression Method    0000 (0) 'Stored'\n-0C0BC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0BCC CRC                   00000000 (0)\n-0C0BD0 Compressed Size       00000000 (0)\n-0C0BD4 Uncompressed Size     00000000 (0)\n-0C0BD8 Filename Length       0069 (105)\n-0C0BDA Extra Length          0009 (9)\n-0C0BDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0BDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0C45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0C47   Length              0005 (5)\n-0C0C49   Flags               01 (1) 'Modification'\n-0C0C4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C0C4E LOCAL HEADER #311     04034B50 (67324752)\n-0C0C52 Extract Zip Spec      14 (20) '2.0'\n-0C0C53 Extract OS            00 (0) 'MS-DOS'\n-0C0C54 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C0C56 Compression Method    0000 (0) 'Stored'\n-0C0C58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0C5C CRC                   00000000 (0)\n-0C0C60 Compressed Size       00000000 (0)\n-0C0C64 Uncompressed Size     00000000 (0)\n-0C0C68 Filename Length       007F (127)\n-0C0C6A Extra Length          0009 (9)\n-0C0C6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0C6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0CEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0CED   Length              0005 (5)\n-0C0CEF   Flags               01 (1) 'Modification'\n-0C0CF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0CF4 PAYLOAD\n-\n-0C4920 DATA DESCRIPTOR       08074B50 (134695760)\n-0C4924 CRC                   D6140D51 (3591638353)\n-0C4928 Compressed Size       00003C2C (15404)\n-0C492C Uncompressed Size     00003C2C (15404)\n-\n-0C4930 LOCAL HEADER #312     04034B50 (67324752)\n-0C4934 Extract Zip Spec      14 (20) '2.0'\n-0C4935 Extract OS            00 (0) 'MS-DOS'\n-0C4936 General Purpose Flag  0000 (0)\n-0C4938 Compression Method    0000 (0) 'Stored'\n-0C493A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C493E CRC                   00000000 (0)\n-0C4942 Compressed Size       00000000 (0)\n-0C4946 Uncompressed Size     00000000 (0)\n-0C494A Filename Length       0068 (104)\n-0C494C Extra Length          0009 (9)\n-0C494E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC494E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C49B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C49B8   Length              0005 (5)\n-0C49BA   Flags               01 (1) 'Modification'\n-0C49BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C49BF LOCAL HEADER #313     04034B50 (67324752)\n-0C49C3 Extract Zip Spec      14 (20) '2.0'\n-0C49C4 Extract OS            00 (0) 'MS-DOS'\n-0C49C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C49C7 Compression Method    0000 (0) 'Stored'\n-0C49C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C49CD CRC                   00000000 (0)\n-0C49D1 Compressed Size       00000000 (0)\n-0C49D5 Uncompressed Size     00000000 (0)\n-0C49D9 Filename Length       007E (126)\n-0C49DB Extra Length          0009 (9)\n-0C49DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC49DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C4A5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C4A5D   Length              0005 (5)\n-0C4A5F   Flags               01 (1) 'Modification'\n-0C4A60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C4A64 PAYLOAD\n-\n-0C6BC6 DATA DESCRIPTOR       08074B50 (134695760)\n-0C6BCA CRC                   86CE2079 (2261655673)\n-0C6BCE Compressed Size       00002162 (8546)\n-0C6BD2 Uncompressed Size     00002162 (8546)\n-\n-0C6BD6 LOCAL HEADER #314     04034B50 (67324752)\n-0C6BDA Extract Zip Spec      14 (20) '2.0'\n-0C6BDB Extract OS            00 (0) 'MS-DOS'\n-0C6BDC General Purpose Flag  0000 (0)\n-0C6BDE Compression Method    0000 (0) 'Stored'\n-0C6BE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6BE4 CRC                   00000000 (0)\n-0C6BE8 Compressed Size       00000000 (0)\n-0C6BEC Uncompressed Size     00000000 (0)\n-0C6BF0 Filename Length       0026 (38)\n-0C6BF2 Extra Length          0009 (9)\n-0C6BF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6BF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C6C1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C6C1C   Length              0005 (5)\n-0C6C1E   Flags               01 (1) 'Modification'\n-0C6C1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C6C23 LOCAL HEADER #315     04034B50 (67324752)\n-0C6C27 Extract Zip Spec      14 (20) '2.0'\n-0C6C28 Extract OS            00 (0) 'MS-DOS'\n-0C6C29 General Purpose Flag  0000 (0)\n-0C6C2B Compression Method    0000 (0) 'Stored'\n-0C6C2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6C31 CRC                   00000000 (0)\n-0C6C35 Compressed Size       00000000 (0)\n-0C6C39 Uncompressed Size     00000000 (0)\n-0C6C3D Filename Length       002D (45)\n-0C6C3F Extra Length          0009 (9)\n-0C6C41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6C41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C6C6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C6C70   Length              0005 (5)\n-0C6C72   Flags               01 (1) 'Modification'\n-0C6C73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C6C77 LOCAL HEADER #316     04034B50 (67324752)\n-0C6C7B Extract Zip Spec      14 (20) '2.0'\n-0C6C7C Extract OS            00 (0) 'MS-DOS'\n-0C6C7D General Purpose Flag  0000 (0)\n-0C6C7F Compression Method    0000 (0) 'Stored'\n-0C6C81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6C85 CRC                   00000000 (0)\n-0C6C89 Compressed Size       00000000 (0)\n-0C6C8D Uncompressed Size     00000000 (0)\n-0C6C91 Filename Length       005B (91)\n-0C6C93 Extra Length          0009 (9)\n-0C6C95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6C95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C6CF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C6CF2   Length              0005 (5)\n-0C6CF4   Flags               01 (1) 'Modification'\n-0C6CF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C6CF9 LOCAL HEADER #317     04034B50 (67324752)\n-0C6CFD Extract Zip Spec      14 (20) '2.0'\n-0C6CFE Extract OS            00 (0) 'MS-DOS'\n-0C6CFF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C6D01 Compression Method    0000 (0) 'Stored'\n-0C6D03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6D07 CRC                   00000000 (0)\n-0C6D0B Compressed Size       00000000 (0)\n-0C6D0F Uncompressed Size     00000000 (0)\n-0C6D13 Filename Length       0071 (113)\n-0C6D15 Extra Length          0009 (9)\n-0C6D17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6D17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C6D88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C6D8A   Length              0005 (5)\n-0C6D8C   Flags               01 (1) 'Modification'\n-0C6D8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C6D91 PAYLOAD\n-\n-0C77EC DATA DESCRIPTOR       08074B50 (134695760)\n-0C77F0 CRC                   B12610E6 (2972061926)\n-0C77F4 Compressed Size       00000A5B (2651)\n-0C77F8 Uncompressed Size     00000A5B (2651)\n-\n-0C77FC LOCAL HEADER #318     04034B50 (67324752)\n-0C7800 Extract Zip Spec      14 (20) '2.0'\n-0C7801 Extract OS            00 (0) 'MS-DOS'\n-0C7802 General Purpose Flag  0000 (0)\n-0C7804 Compression Method    0000 (0) 'Stored'\n-0C7806 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C780A CRC                   00000000 (0)\n-0C780E Compressed Size       00000000 (0)\n-0C7812 Uncompressed Size     00000000 (0)\n-0C7816 Filename Length       0035 (53)\n-0C7818 Extra Length          0009 (9)\n-0C781A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC781A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C784F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7851   Length              0005 (5)\n-0C7853   Flags               01 (1) 'Modification'\n-0C7854   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C7858 LOCAL HEADER #319     04034B50 (67324752)\n-0C785C Extract Zip Spec      14 (20) '2.0'\n-0C785D Extract OS            00 (0) 'MS-DOS'\n-0C785E General Purpose Flag  0000 (0)\n-0C7860 Compression Method    0000 (0) 'Stored'\n-0C7862 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7866 CRC                   00000000 (0)\n-0C786A Compressed Size       00000000 (0)\n-0C786E Uncompressed Size     00000000 (0)\n-0C7872 Filename Length       003C (60)\n-0C7874 Extra Length          0009 (9)\n-0C7876 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC7876: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C78B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C78B4   Length              0005 (5)\n-0C78B6   Flags               01 (1) 'Modification'\n-0C78B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C78BB LOCAL HEADER #320     04034B50 (67324752)\n-0C78BF Extract Zip Spec      14 (20) '2.0'\n-0C78C0 Extract OS            00 (0) 'MS-DOS'\n-0C78C1 General Purpose Flag  0000 (0)\n-0C78C3 Compression Method    0000 (0) 'Stored'\n-0C78C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C78C9 CRC                   00000000 (0)\n-0C78CD Compressed Size       00000000 (0)\n-0C78D1 Uncompressed Size     00000000 (0)\n-0C78D5 Filename Length       0076 (118)\n-0C78D7 Extra Length          0009 (9)\n-0C78D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC78D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C794F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7951   Length              0005 (5)\n-0C7953   Flags               01 (1) 'Modification'\n-0C7954   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C7958 LOCAL HEADER #321     04034B50 (67324752)\n-0C795C Extract Zip Spec      14 (20) '2.0'\n-0C795D Extract OS            00 (0) 'MS-DOS'\n-0C795E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C7960 Compression Method    0000 (0) 'Stored'\n-0C7962 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7966 CRC                   00000000 (0)\n-0C796A Compressed Size       00000000 (0)\n-0C796E Uncompressed Size     00000000 (0)\n-0C7972 Filename Length       008C (140)\n-0C7974 Extra Length          0009 (9)\n-0C7976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0A9F9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9FA0   Length              0005 (5)\n+0A9FA2   Flags               01 (1) 'Modification'\n+0A9FA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A9FA7 PAYLOAD\n+\n+0AAD84 DATA DESCRIPTOR       08074B50 (134695760)\n+0AAD88 CRC                   5C6B1924 (1550522660)\n+0AAD8C Compressed Size       00000DDD (3549)\n+0AAD90 Uncompressed Size     00000DDD (3549)\n+\n+0AAD94 LOCAL HEADER #292     04034B50 (67324752)\n+0AAD98 Extract Zip Spec      14 (20) '2.0'\n+0AAD99 Extract OS            00 (0) 'MS-DOS'\n+0AAD9A General Purpose Flag  0000 (0)\n+0AAD9C Compression Method    0000 (0) 'Stored'\n+0AAD9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AADA2 CRC                   00000000 (0)\n+0AADA6 Compressed Size       00000000 (0)\n+0AADAA Uncompressed Size     00000000 (0)\n+0AADAE Filename Length       0061 (97)\n+0AADB0 Extra Length          0009 (9)\n+0AADB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAADB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AAE13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AAE15   Length              0005 (5)\n+0AAE17   Flags               01 (1) 'Modification'\n+0AAE18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AAE1C LOCAL HEADER #293     04034B50 (67324752)\n+0AAE20 Extract Zip Spec      14 (20) '2.0'\n+0AAE21 Extract OS            00 (0) 'MS-DOS'\n+0AAE22 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AAE24 Compression Method    0000 (0) 'Stored'\n+0AAE26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AAE2A CRC                   00000000 (0)\n+0AAE2E Compressed Size       00000000 (0)\n+0AAE32 Uncompressed Size     00000000 (0)\n+0AAE36 Filename Length       0077 (119)\n+0AAE38 Extra Length          0009 (9)\n+0AAE3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAAE3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AAEB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AAEB3   Length              0005 (5)\n+0AAEB5   Flags               01 (1) 'Modification'\n+0AAEB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AAEBA PAYLOAD\n+\n+0B41EF DATA DESCRIPTOR       08074B50 (134695760)\n+0B41F3 CRC                   C7DF88BB (3353315515)\n+0B41F7 Compressed Size       00009335 (37685)\n+0B41FB Uncompressed Size     00009335 (37685)\n+\n+0B41FF LOCAL HEADER #294     04034B50 (67324752)\n+0B4203 Extract Zip Spec      14 (20) '2.0'\n+0B4204 Extract OS            00 (0) 'MS-DOS'\n+0B4205 General Purpose Flag  0000 (0)\n+0B4207 Compression Method    0000 (0) 'Stored'\n+0B4209 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B420D CRC                   00000000 (0)\n+0B4211 Compressed Size       00000000 (0)\n+0B4215 Uncompressed Size     00000000 (0)\n+0B4219 Filename Length       006A (106)\n+0B421B Extra Length          0009 (9)\n+0B421D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB421D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B4287 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B4289   Length              0005 (5)\n+0B428B   Flags               01 (1) 'Modification'\n+0B428C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B4290 LOCAL HEADER #295     04034B50 (67324752)\n+0B4294 Extract Zip Spec      14 (20) '2.0'\n+0B4295 Extract OS            00 (0) 'MS-DOS'\n+0B4296 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B4298 Compression Method    0000 (0) 'Stored'\n+0B429A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B429E CRC                   00000000 (0)\n+0B42A2 Compressed Size       00000000 (0)\n+0B42A6 Uncompressed Size     00000000 (0)\n+0B42AA Filename Length       0080 (128)\n+0B42AC Extra Length          0009 (9)\n+0B42AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB42AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B432E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B4330   Length              0005 (5)\n+0B4332   Flags               01 (1) 'Modification'\n+0B4333   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B4337 PAYLOAD\n+\n+0B5EE8 DATA DESCRIPTOR       08074B50 (134695760)\n+0B5EEC CRC                   217BBE0B (561757707)\n+0B5EF0 Compressed Size       00001BB1 (7089)\n+0B5EF4 Uncompressed Size     00001BB1 (7089)\n+\n+0B5EF8 LOCAL HEADER #296     04034B50 (67324752)\n+0B5EFC Extract Zip Spec      14 (20) '2.0'\n+0B5EFD Extract OS            00 (0) 'MS-DOS'\n+0B5EFE General Purpose Flag  0000 (0)\n+0B5F00 Compression Method    0000 (0) 'Stored'\n+0B5F02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5F06 CRC                   00000000 (0)\n+0B5F0A Compressed Size       00000000 (0)\n+0B5F0E Uncompressed Size     00000000 (0)\n+0B5F12 Filename Length       0029 (41)\n+0B5F14 Extra Length          0009 (9)\n+0B5F16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5F16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B5F3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5F41   Length              0005 (5)\n+0B5F43   Flags               01 (1) 'Modification'\n+0B5F44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B5F48 LOCAL HEADER #297     04034B50 (67324752)\n+0B5F4C Extract Zip Spec      14 (20) '2.0'\n+0B5F4D Extract OS            00 (0) 'MS-DOS'\n+0B5F4E General Purpose Flag  0000 (0)\n+0B5F50 Compression Method    0000 (0) 'Stored'\n+0B5F52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5F56 CRC                   00000000 (0)\n+0B5F5A Compressed Size       00000000 (0)\n+0B5F5E Uncompressed Size     00000000 (0)\n+0B5F62 Filename Length       0030 (48)\n+0B5F64 Extra Length          0009 (9)\n+0B5F66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5F66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B5F96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5F98   Length              0005 (5)\n+0B5F9A   Flags               01 (1) 'Modification'\n+0B5F9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B5F9F LOCAL HEADER #298     04034B50 (67324752)\n+0B5FA3 Extract Zip Spec      14 (20) '2.0'\n+0B5FA4 Extract OS            00 (0) 'MS-DOS'\n+0B5FA5 General Purpose Flag  0000 (0)\n+0B5FA7 Compression Method    0000 (0) 'Stored'\n+0B5FA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5FAD CRC                   00000000 (0)\n+0B5FB1 Compressed Size       00000000 (0)\n+0B5FB5 Uncompressed Size     00000000 (0)\n+0B5FB9 Filename Length       006A (106)\n+0B5FBB Extra Length          0009 (9)\n+0B5FBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5FBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6027 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6029   Length              0005 (5)\n+0B602B   Flags               01 (1) 'Modification'\n+0B602C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6030 LOCAL HEADER #299     04034B50 (67324752)\n+0B6034 Extract Zip Spec      14 (20) '2.0'\n+0B6035 Extract OS            00 (0) 'MS-DOS'\n+0B6036 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B6038 Compression Method    0000 (0) 'Stored'\n+0B603A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B603E CRC                   00000000 (0)\n+0B6042 Compressed Size       00000000 (0)\n+0B6046 Uncompressed Size     00000000 (0)\n+0B604A Filename Length       0080 (128)\n+0B604C Extra Length          0009 (9)\n+0B604E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB604E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B60CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B60D0   Length              0005 (5)\n+0B60D2   Flags               01 (1) 'Modification'\n+0B60D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B60D7 PAYLOAD\n+\n+0B6AAA DATA DESCRIPTOR       08074B50 (134695760)\n+0B6AAE CRC                   DCEFA272 (3706692210)\n+0B6AB2 Compressed Size       000009D3 (2515)\n+0B6AB6 Uncompressed Size     000009D3 (2515)\n+\n+0B6ABA LOCAL HEADER #300     04034B50 (67324752)\n+0B6ABE Extract Zip Spec      14 (20) '2.0'\n+0B6ABF Extract OS            00 (0) 'MS-DOS'\n+0B6AC0 General Purpose Flag  0000 (0)\n+0B6AC2 Compression Method    0000 (0) 'Stored'\n+0B6AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6AC8 CRC                   00000000 (0)\n+0B6ACC Compressed Size       00000000 (0)\n+0B6AD0 Uncompressed Size     00000000 (0)\n+0B6AD4 Filename Length       006C (108)\n+0B6AD6 Extra Length          0009 (9)\n+0B6AD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6AD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6B44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6B46   Length              0005 (5)\n+0B6B48   Flags               01 (1) 'Modification'\n+0B6B49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6B4D LOCAL HEADER #301     04034B50 (67324752)\n+0B6B51 Extract Zip Spec      14 (20) '2.0'\n+0B6B52 Extract OS            00 (0) 'MS-DOS'\n+0B6B53 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B6B55 Compression Method    0000 (0) 'Stored'\n+0B6B57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6B5B CRC                   00000000 (0)\n+0B6B5F Compressed Size       00000000 (0)\n+0B6B63 Uncompressed Size     00000000 (0)\n+0B6B67 Filename Length       0082 (130)\n+0B6B69 Extra Length          0009 (9)\n+0B6B6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6B6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6BED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6BEF   Length              0005 (5)\n+0B6BF1   Flags               01 (1) 'Modification'\n+0B6BF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B6BF6 PAYLOAD\n+\n+0B7E6C DATA DESCRIPTOR       08074B50 (134695760)\n+0B7E70 CRC                   26E963FE (652829694)\n+0B7E74 Compressed Size       00001276 (4726)\n+0B7E78 Uncompressed Size     00001276 (4726)\n+\n+0B7E7C LOCAL HEADER #302     04034B50 (67324752)\n+0B7E80 Extract Zip Spec      14 (20) '2.0'\n+0B7E81 Extract OS            00 (0) 'MS-DOS'\n+0B7E82 General Purpose Flag  0000 (0)\n+0B7E84 Compression Method    0000 (0) 'Stored'\n+0B7E86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7E8A CRC                   00000000 (0)\n+0B7E8E Compressed Size       00000000 (0)\n+0B7E92 Uncompressed Size     00000000 (0)\n+0B7E96 Filename Length       0028 (40)\n+0B7E98 Extra Length          0009 (9)\n+0B7E9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7E9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B7EC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B7EC4   Length              0005 (5)\n+0B7EC6   Flags               01 (1) 'Modification'\n+0B7EC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B7ECB LOCAL HEADER #303     04034B50 (67324752)\n+0B7ECF Extract Zip Spec      14 (20) '2.0'\n+0B7ED0 Extract OS            00 (0) 'MS-DOS'\n+0B7ED1 General Purpose Flag  0000 (0)\n+0B7ED3 Compression Method    0000 (0) 'Stored'\n+0B7ED5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7ED9 CRC                   00000000 (0)\n+0B7EDD Compressed Size       00000000 (0)\n+0B7EE1 Uncompressed Size     00000000 (0)\n+0B7EE5 Filename Length       002F (47)\n+0B7EE7 Extra Length          0009 (9)\n+0B7EE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7EE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B7F18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B7F1A   Length              0005 (5)\n+0B7F1C   Flags               01 (1) 'Modification'\n+0B7F1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B7F21 LOCAL HEADER #304     04034B50 (67324752)\n+0B7F25 Extract Zip Spec      14 (20) '2.0'\n+0B7F26 Extract OS            00 (0) 'MS-DOS'\n+0B7F27 General Purpose Flag  0000 (0)\n+0B7F29 Compression Method    0000 (0) 'Stored'\n+0B7F2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7F2F CRC                   00000000 (0)\n+0B7F33 Compressed Size       00000000 (0)\n+0B7F37 Uncompressed Size     00000000 (0)\n+0B7F3B Filename Length       005F (95)\n+0B7F3D Extra Length          0009 (9)\n+0B7F3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7F3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B7F9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B7FA0   Length              0005 (5)\n+0B7FA2   Flags               01 (1) 'Modification'\n+0B7FA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B7FA7 LOCAL HEADER #305     04034B50 (67324752)\n+0B7FAB Extract Zip Spec      14 (20) '2.0'\n+0B7FAC Extract OS            00 (0) 'MS-DOS'\n+0B7FAD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B7FAF Compression Method    0000 (0) 'Stored'\n+0B7FB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7FB5 CRC                   00000000 (0)\n+0B7FB9 Compressed Size       00000000 (0)\n+0B7FBD Uncompressed Size     00000000 (0)\n+0B7FC1 Filename Length       0075 (117)\n+0B7FC3 Extra Length          0009 (9)\n+0B7FC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7FC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B803A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B803C   Length              0005 (5)\n+0B803E   Flags               01 (1) 'Modification'\n+0B803F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B8043 PAYLOAD\n+\n+0C0987 DATA DESCRIPTOR       08074B50 (134695760)\n+0C098B CRC                   6B96B8CE (1805039822)\n+0C098F Compressed Size       00008944 (35140)\n+0C0993 Uncompressed Size     00008944 (35140)\n+\n+0C0997 LOCAL HEADER #306     04034B50 (67324752)\n+0C099B Extract Zip Spec      14 (20) '2.0'\n+0C099C Extract OS            00 (0) 'MS-DOS'\n+0C099D General Purpose Flag  0000 (0)\n+0C099F Compression Method    0000 (0) 'Stored'\n+0C09A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C09A5 CRC                   00000000 (0)\n+0C09A9 Compressed Size       00000000 (0)\n+0C09AD Uncompressed Size     00000000 (0)\n+0C09B1 Filename Length       0066 (102)\n+0C09B3 Extra Length          0009 (9)\n+0C09B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC09B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0A1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0A1D   Length              0005 (5)\n+0C0A1F   Flags               01 (1) 'Modification'\n+0C0A20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0A24 LOCAL HEADER #307     04034B50 (67324752)\n+0C0A28 Extract Zip Spec      14 (20) '2.0'\n+0C0A29 Extract OS            00 (0) 'MS-DOS'\n+0C0A2A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C0A2C Compression Method    0000 (0) 'Stored'\n+0C0A2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0A32 CRC                   00000000 (0)\n+0C0A36 Compressed Size       00000000 (0)\n+0C0A3A Uncompressed Size     00000000 (0)\n+0C0A3E Filename Length       007C (124)\n+0C0A40 Extra Length          0009 (9)\n+0C0A42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0A42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0ABE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0AC0   Length              0005 (5)\n+0C0AC2   Flags               01 (1) 'Modification'\n+0C0AC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C0AC7 PAYLOAD\n+\n+0C2701 DATA DESCRIPTOR       08074B50 (134695760)\n+0C2705 CRC                   DB2A8543 (3676996931)\n+0C2709 Compressed Size       00001C3A (7226)\n+0C270D Uncompressed Size     00001C3A (7226)\n+\n+0C2711 LOCAL HEADER #308     04034B50 (67324752)\n+0C2715 Extract Zip Spec      14 (20) '2.0'\n+0C2716 Extract OS            00 (0) 'MS-DOS'\n+0C2717 General Purpose Flag  0000 (0)\n+0C2719 Compression Method    0000 (0) 'Stored'\n+0C271B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C271F CRC                   00000000 (0)\n+0C2723 Compressed Size       00000000 (0)\n+0C2727 Uncompressed Size     00000000 (0)\n+0C272B Filename Length       0069 (105)\n+0C272D Extra Length          0009 (9)\n+0C272F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC272F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C2798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C279A   Length              0005 (5)\n+0C279C   Flags               01 (1) 'Modification'\n+0C279D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C27A1 LOCAL HEADER #309     04034B50 (67324752)\n+0C27A5 Extract Zip Spec      14 (20) '2.0'\n+0C27A6 Extract OS            00 (0) 'MS-DOS'\n+0C27A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C27A9 Compression Method    0000 (0) 'Stored'\n+0C27AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C27AF CRC                   00000000 (0)\n+0C27B3 Compressed Size       00000000 (0)\n+0C27B7 Uncompressed Size     00000000 (0)\n+0C27BB Filename Length       007F (127)\n+0C27BD Extra Length          0009 (9)\n+0C27BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC27BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C283E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C2840   Length              0005 (5)\n+0C2842   Flags               01 (1) 'Modification'\n+0C2843   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C2847 PAYLOAD\n+\n+0C3D99 DATA DESCRIPTOR       08074B50 (134695760)\n+0C3D9D CRC                   FF5BC4DC (4284204252)\n+0C3DA1 Compressed Size       00001552 (5458)\n+0C3DA5 Uncompressed Size     00001552 (5458)\n+\n+0C3DA9 LOCAL HEADER #310     04034B50 (67324752)\n+0C3DAD Extract Zip Spec      14 (20) '2.0'\n+0C3DAE Extract OS            00 (0) 'MS-DOS'\n+0C3DAF General Purpose Flag  0000 (0)\n+0C3DB1 Compression Method    0000 (0) 'Stored'\n+0C3DB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3DB7 CRC                   00000000 (0)\n+0C3DBB Compressed Size       00000000 (0)\n+0C3DBF Uncompressed Size     00000000 (0)\n+0C3DC3 Filename Length       0069 (105)\n+0C3DC5 Extra Length          0009 (9)\n+0C3DC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3DC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3E30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3E32   Length              0005 (5)\n+0C3E34   Flags               01 (1) 'Modification'\n+0C3E35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C3E39 LOCAL HEADER #311     04034B50 (67324752)\n+0C3E3D Extract Zip Spec      14 (20) '2.0'\n+0C3E3E Extract OS            00 (0) 'MS-DOS'\n+0C3E3F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C3E41 Compression Method    0000 (0) 'Stored'\n+0C3E43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3E47 CRC                   00000000 (0)\n+0C3E4B Compressed Size       00000000 (0)\n+0C3E4F Uncompressed Size     00000000 (0)\n+0C3E53 Filename Length       007F (127)\n+0C3E55 Extra Length          0009 (9)\n+0C3E57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3E57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3ED6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3ED8   Length              0005 (5)\n+0C3EDA   Flags               01 (1) 'Modification'\n+0C3EDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C3EDF PAYLOAD\n+\n+0C7B0B DATA DESCRIPTOR       08074B50 (134695760)\n+0C7B0F CRC                   D6140D51 (3591638353)\n+0C7B13 Compressed Size       00003C2C (15404)\n+0C7B17 Uncompressed Size     00003C2C (15404)\n+\n+0C7B1B LOCAL HEADER #312     04034B50 (67324752)\n+0C7B1F Extract Zip Spec      14 (20) '2.0'\n+0C7B20 Extract OS            00 (0) 'MS-DOS'\n+0C7B21 General Purpose Flag  0000 (0)\n+0C7B23 Compression Method    0000 (0) 'Stored'\n+0C7B25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C7B29 CRC                   00000000 (0)\n+0C7B2D Compressed Size       00000000 (0)\n+0C7B31 Uncompressed Size     00000000 (0)\n+0C7B35 Filename Length       0068 (104)\n+0C7B37 Extra Length          0009 (9)\n+0C7B39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC7B39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C7BA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C7BA3   Length              0005 (5)\n+0C7BA5   Flags               01 (1) 'Modification'\n+0C7BA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C7BAA LOCAL HEADER #313     04034B50 (67324752)\n+0C7BAE Extract Zip Spec      14 (20) '2.0'\n+0C7BAF Extract OS            00 (0) 'MS-DOS'\n+0C7BB0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C7BB2 Compression Method    0000 (0) 'Stored'\n+0C7BB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C7BB8 CRC                   00000000 (0)\n+0C7BBC Compressed Size       00000000 (0)\n+0C7BC0 Uncompressed Size     00000000 (0)\n+0C7BC4 Filename Length       007E (126)\n+0C7BC6 Extra Length          0009 (9)\n+0C7BC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC7BC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C7C46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C7C48   Length              0005 (5)\n+0C7C4A   Flags               01 (1) 'Modification'\n+0C7C4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C7C4F PAYLOAD\n+\n+0C9DB1 DATA DESCRIPTOR       08074B50 (134695760)\n+0C9DB5 CRC                   86CE2079 (2261655673)\n+0C9DB9 Compressed Size       00002162 (8546)\n+0C9DBD Uncompressed Size     00002162 (8546)\n+\n+0C9DC1 LOCAL HEADER #314     04034B50 (67324752)\n+0C9DC5 Extract Zip Spec      14 (20) '2.0'\n+0C9DC6 Extract OS            00 (0) 'MS-DOS'\n+0C9DC7 General Purpose Flag  0000 (0)\n+0C9DC9 Compression Method    0000 (0) 'Stored'\n+0C9DCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9DCF CRC                   00000000 (0)\n+0C9DD3 Compressed Size       00000000 (0)\n+0C9DD7 Uncompressed Size     00000000 (0)\n+0C9DDB Filename Length       0026 (38)\n+0C9DDD Extra Length          0009 (9)\n+0C9DDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9DDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9E05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9E07   Length              0005 (5)\n+0C9E09   Flags               01 (1) 'Modification'\n+0C9E0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C9E0E LOCAL HEADER #315     04034B50 (67324752)\n+0C9E12 Extract Zip Spec      14 (20) '2.0'\n+0C9E13 Extract OS            00 (0) 'MS-DOS'\n+0C9E14 General Purpose Flag  0000 (0)\n+0C9E16 Compression Method    0000 (0) 'Stored'\n+0C9E18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9E1C CRC                   00000000 (0)\n+0C9E20 Compressed Size       00000000 (0)\n+0C9E24 Uncompressed Size     00000000 (0)\n+0C9E28 Filename Length       002D (45)\n+0C9E2A Extra Length          0009 (9)\n+0C9E2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9E2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9E59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9E5B   Length              0005 (5)\n+0C9E5D   Flags               01 (1) 'Modification'\n+0C9E5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C9E62 LOCAL HEADER #316     04034B50 (67324752)\n+0C9E66 Extract Zip Spec      14 (20) '2.0'\n+0C9E67 Extract OS            00 (0) 'MS-DOS'\n+0C9E68 General Purpose Flag  0000 (0)\n+0C9E6A Compression Method    0000 (0) 'Stored'\n+0C9E6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9E70 CRC                   00000000 (0)\n+0C9E74 Compressed Size       00000000 (0)\n+0C9E78 Uncompressed Size     00000000 (0)\n+0C9E7C Filename Length       005B (91)\n+0C9E7E Extra Length          0009 (9)\n+0C9E80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9E80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9EDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9EDD   Length              0005 (5)\n+0C9EDF   Flags               01 (1) 'Modification'\n+0C9EE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C9EE4 LOCAL HEADER #317     04034B50 (67324752)\n+0C9EE8 Extract Zip Spec      14 (20) '2.0'\n+0C9EE9 Extract OS            00 (0) 'MS-DOS'\n+0C9EEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C9EEC Compression Method    0000 (0) 'Stored'\n+0C9EEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9EF2 CRC                   00000000 (0)\n+0C9EF6 Compressed Size       00000000 (0)\n+0C9EFA Uncompressed Size     00000000 (0)\n+0C9EFE Filename Length       0071 (113)\n+0C9F00 Extra Length          0009 (9)\n+0C9F02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9F02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9F73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9F75   Length              0005 (5)\n+0C9F77   Flags               01 (1) 'Modification'\n+0C9F78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C9F7C PAYLOAD\n+\n+0CA9D7 DATA DESCRIPTOR       08074B50 (134695760)\n+0CA9DB CRC                   B12610E6 (2972061926)\n+0CA9DF Compressed Size       00000A5B (2651)\n+0CA9E3 Uncompressed Size     00000A5B (2651)\n+\n+0CA9E7 LOCAL HEADER #318     04034B50 (67324752)\n+0CA9EB Extract Zip Spec      14 (20) '2.0'\n+0CA9EC Extract OS            00 (0) 'MS-DOS'\n+0CA9ED General Purpose Flag  0000 (0)\n+0CA9EF Compression Method    0000 (0) 'Stored'\n+0CA9F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CA9F5 CRC                   00000000 (0)\n+0CA9F9 Compressed Size       00000000 (0)\n+0CA9FD Uncompressed Size     00000000 (0)\n+0CAA01 Filename Length       0035 (53)\n+0CAA03 Extra Length          0009 (9)\n+0CAA05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCAA05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CAA3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CAA3C   Length              0005 (5)\n+0CAA3E   Flags               01 (1) 'Modification'\n+0CAA3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CAA43 LOCAL HEADER #319     04034B50 (67324752)\n+0CAA47 Extract Zip Spec      14 (20) '2.0'\n+0CAA48 Extract OS            00 (0) 'MS-DOS'\n+0CAA49 General Purpose Flag  0000 (0)\n+0CAA4B Compression Method    0000 (0) 'Stored'\n+0CAA4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CAA51 CRC                   00000000 (0)\n+0CAA55 Compressed Size       00000000 (0)\n+0CAA59 Uncompressed Size     00000000 (0)\n+0CAA5D Filename Length       003C (60)\n+0CAA5F Extra Length          0009 (9)\n+0CAA61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCAA61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CAA9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CAA9F   Length              0005 (5)\n+0CAAA1   Flags               01 (1) 'Modification'\n+0CAAA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CAAA6 LOCAL HEADER #320     04034B50 (67324752)\n+0CAAAA Extract Zip Spec      14 (20) '2.0'\n+0CAAAB Extract OS            00 (0) 'MS-DOS'\n+0CAAAC General Purpose Flag  0000 (0)\n+0CAAAE Compression Method    0000 (0) 'Stored'\n+0CAAB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CAAB4 CRC                   00000000 (0)\n+0CAAB8 Compressed Size       00000000 (0)\n+0CAABC Uncompressed Size     00000000 (0)\n+0CAAC0 Filename Length       0076 (118)\n+0CAAC2 Extra Length          0009 (9)\n+0CAAC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCAAC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CAB3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CAB3C   Length              0005 (5)\n+0CAB3E   Flags               01 (1) 'Modification'\n+0CAB3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CAB43 LOCAL HEADER #321     04034B50 (67324752)\n+0CAB47 Extract Zip Spec      14 (20) '2.0'\n+0CAB48 Extract OS            00 (0) 'MS-DOS'\n+0CAB49 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CAB4B Compression Method    0000 (0) 'Stored'\n+0CAB4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CAB51 CRC                   00000000 (0)\n+0CAB55 Compressed Size       00000000 (0)\n+0CAB59 Uncompressed Size     00000000 (0)\n+0CAB5D Filename Length       008C (140)\n+0CAB5F Extra Length          0009 (9)\n+0CAB61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xC7976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAB61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C7A02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7A04   Length              0005 (5)\n-0C7A06   Flags               01 (1) 'Modification'\n-0C7A07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C7A0B PAYLOAD\n-\n-0C852D DATA DESCRIPTOR       08074B50 (134695760)\n-0C8531 CRC                   041CE92B (69003563)\n-0C8535 Compressed Size       00000B22 (2850)\n-0C8539 Uncompressed Size     00000B22 (2850)\n-\n-0C853D LOCAL HEADER #322     04034B50 (67324752)\n-0C8541 Extract Zip Spec      14 (20) '2.0'\n-0C8542 Extract OS            00 (0) 'MS-DOS'\n-0C8543 General Purpose Flag  0000 (0)\n-0C8545 Compression Method    0000 (0) 'Stored'\n-0C8547 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C854B CRC                   00000000 (0)\n-0C854F Compressed Size       00000000 (0)\n-0C8553 Uncompressed Size     00000000 (0)\n-0C8557 Filename Length       0075 (117)\n-0C8559 Extra Length          0009 (9)\n-0C855B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC855B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C85D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C85D2   Length              0005 (5)\n-0C85D4   Flags               01 (1) 'Modification'\n-0C85D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C85D9 LOCAL HEADER #323     04034B50 (67324752)\n-0C85DD Extract Zip Spec      14 (20) '2.0'\n-0C85DE Extract OS            00 (0) 'MS-DOS'\n-0C85DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C85E1 Compression Method    0000 (0) 'Stored'\n-0C85E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C85E7 CRC                   00000000 (0)\n-0C85EB Compressed Size       00000000 (0)\n-0C85EF Uncompressed Size     00000000 (0)\n-0C85F3 Filename Length       008B (139)\n-0C85F5 Extra Length          0009 (9)\n-0C85F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0CABED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CABEF   Length              0005 (5)\n+0CABF1   Flags               01 (1) 'Modification'\n+0CABF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CABF6 PAYLOAD\n+\n+0CB718 DATA DESCRIPTOR       08074B50 (134695760)\n+0CB71C CRC                   041CE92B (69003563)\n+0CB720 Compressed Size       00000B22 (2850)\n+0CB724 Uncompressed Size     00000B22 (2850)\n+\n+0CB728 LOCAL HEADER #322     04034B50 (67324752)\n+0CB72C Extract Zip Spec      14 (20) '2.0'\n+0CB72D Extract OS            00 (0) 'MS-DOS'\n+0CB72E General Purpose Flag  0000 (0)\n+0CB730 Compression Method    0000 (0) 'Stored'\n+0CB732 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB736 CRC                   00000000 (0)\n+0CB73A Compressed Size       00000000 (0)\n+0CB73E Uncompressed Size     00000000 (0)\n+0CB742 Filename Length       0075 (117)\n+0CB744 Extra Length          0009 (9)\n+0CB746 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB746: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB7BD   Length              0005 (5)\n+0CB7BF   Flags               01 (1) 'Modification'\n+0CB7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CB7C4 LOCAL HEADER #323     04034B50 (67324752)\n+0CB7C8 Extract Zip Spec      14 (20) '2.0'\n+0CB7C9 Extract OS            00 (0) 'MS-DOS'\n+0CB7CA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CB7CC Compression Method    0000 (0) 'Stored'\n+0CB7CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB7D2 CRC                   00000000 (0)\n+0CB7D6 Compressed Size       00000000 (0)\n+0CB7DA Uncompressed Size     00000000 (0)\n+0CB7DE Filename Length       008B (139)\n+0CB7E0 Extra Length          0009 (9)\n+0CB7E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0xC85F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB7E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C8682 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C8684   Length              0005 (5)\n-0C8686   Flags               01 (1) 'Modification'\n-0C8687   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C868B PAYLOAD\n-\n-0C9D6F DATA DESCRIPTOR       08074B50 (134695760)\n-0C9D73 CRC                   16A4BA93 (379894419)\n-0C9D77 Compressed Size       000016E4 (5860)\n-0C9D7B Uncompressed Size     000016E4 (5860)\n-\n-0C9D7F LOCAL HEADER #324     04034B50 (67324752)\n-0C9D83 Extract Zip Spec      14 (20) '2.0'\n-0C9D84 Extract OS            00 (0) 'MS-DOS'\n-0C9D85 General Purpose Flag  0000 (0)\n-0C9D87 Compression Method    0000 (0) 'Stored'\n-0C9D89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9D8D CRC                   00000000 (0)\n-0C9D91 Compressed Size       00000000 (0)\n-0C9D95 Uncompressed Size     00000000 (0)\n-0C9D99 Filename Length       0078 (120)\n-0C9D9B Extra Length          0009 (9)\n-0C9D9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC9D9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C9E15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C9E17   Length              0005 (5)\n-0C9E19   Flags               01 (1) 'Modification'\n-0C9E1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C9E1E LOCAL HEADER #325     04034B50 (67324752)\n-0C9E22 Extract Zip Spec      14 (20) '2.0'\n-0C9E23 Extract OS            00 (0) 'MS-DOS'\n-0C9E24 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C9E26 Compression Method    0000 (0) 'Stored'\n-0C9E28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9E2C CRC                   00000000 (0)\n-0C9E30 Compressed Size       00000000 (0)\n-0C9E34 Uncompressed Size     00000000 (0)\n-0C9E38 Filename Length       008E (142)\n-0C9E3A Extra Length          0009 (9)\n-0C9E3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0CB86D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB86F   Length              0005 (5)\n+0CB871   Flags               01 (1) 'Modification'\n+0CB872   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CB876 PAYLOAD\n+\n+0CCF5A DATA DESCRIPTOR       08074B50 (134695760)\n+0CCF5E CRC                   16A4BA93 (379894419)\n+0CCF62 Compressed Size       000016E4 (5860)\n+0CCF66 Uncompressed Size     000016E4 (5860)\n+\n+0CCF6A LOCAL HEADER #324     04034B50 (67324752)\n+0CCF6E Extract Zip Spec      14 (20) '2.0'\n+0CCF6F Extract OS            00 (0) 'MS-DOS'\n+0CCF70 General Purpose Flag  0000 (0)\n+0CCF72 Compression Method    0000 (0) 'Stored'\n+0CCF74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CCF78 CRC                   00000000 (0)\n+0CCF7C Compressed Size       00000000 (0)\n+0CCF80 Uncompressed Size     00000000 (0)\n+0CCF84 Filename Length       0078 (120)\n+0CCF86 Extra Length          0009 (9)\n+0CCF88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCCF88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD002   Length              0005 (5)\n+0CD004   Flags               01 (1) 'Modification'\n+0CD005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CD009 LOCAL HEADER #325     04034B50 (67324752)\n+0CD00D Extract Zip Spec      14 (20) '2.0'\n+0CD00E Extract OS            00 (0) 'MS-DOS'\n+0CD00F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CD011 Compression Method    0000 (0) 'Stored'\n+0CD013 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD017 CRC                   00000000 (0)\n+0CD01B Compressed Size       00000000 (0)\n+0CD01F Uncompressed Size     00000000 (0)\n+0CD023 Filename Length       008E (142)\n+0CD025 Extra Length          0009 (9)\n+0CD027 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9E3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD027: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C9ECA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C9ECC   Length              0005 (5)\n-0C9ECE   Flags               01 (1) 'Modification'\n-0C9ECF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C9ED3 PAYLOAD\n-\n-0CAF3B DATA DESCRIPTOR       08074B50 (134695760)\n-0CAF3F CRC                   390AB403 (957002755)\n-0CAF43 Compressed Size       00001068 (4200)\n-0CAF47 Uncompressed Size     00001068 (4200)\n-\n-0CAF4B LOCAL HEADER #326     04034B50 (67324752)\n-0CAF4F Extract Zip Spec      14 (20) '2.0'\n-0CAF50 Extract OS            00 (0) 'MS-DOS'\n-0CAF51 General Purpose Flag  0000 (0)\n-0CAF53 Compression Method    0000 (0) 'Stored'\n-0CAF55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CAF59 CRC                   00000000 (0)\n-0CAF5D Compressed Size       00000000 (0)\n-0CAF61 Uncompressed Size     00000000 (0)\n-0CAF65 Filename Length       0074 (116)\n-0CAF67 Extra Length          0009 (9)\n-0CAF69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCAF69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CAFDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CAFDF   Length              0005 (5)\n-0CAFE1   Flags               01 (1) 'Modification'\n-0CAFE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CAFE6 LOCAL HEADER #327     04034B50 (67324752)\n-0CAFEA Extract Zip Spec      14 (20) '2.0'\n-0CAFEB Extract OS            00 (0) 'MS-DOS'\n-0CAFEC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CAFEE Compression Method    0000 (0) 'Stored'\n-0CAFF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CAFF4 CRC                   00000000 (0)\n-0CAFF8 Compressed Size       00000000 (0)\n-0CAFFC Uncompressed Size     00000000 (0)\n-0CB000 Filename Length       008A (138)\n-0CB002 Extra Length          0009 (9)\n-0CB004 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0CD0B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD0B7   Length              0005 (5)\n+0CD0B9   Flags               01 (1) 'Modification'\n+0CD0BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CD0BE PAYLOAD\n+\n+0CE126 DATA DESCRIPTOR       08074B50 (134695760)\n+0CE12A CRC                   390AB403 (957002755)\n+0CE12E Compressed Size       00001068 (4200)\n+0CE132 Uncompressed Size     00001068 (4200)\n+\n+0CE136 LOCAL HEADER #326     04034B50 (67324752)\n+0CE13A Extract Zip Spec      14 (20) '2.0'\n+0CE13B Extract OS            00 (0) 'MS-DOS'\n+0CE13C General Purpose Flag  0000 (0)\n+0CE13E Compression Method    0000 (0) 'Stored'\n+0CE140 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE144 CRC                   00000000 (0)\n+0CE148 Compressed Size       00000000 (0)\n+0CE14C Uncompressed Size     00000000 (0)\n+0CE150 Filename Length       0074 (116)\n+0CE152 Extra Length          0009 (9)\n+0CE154 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE154: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE1C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE1CA   Length              0005 (5)\n+0CE1CC   Flags               01 (1) 'Modification'\n+0CE1CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CE1D1 LOCAL HEADER #327     04034B50 (67324752)\n+0CE1D5 Extract Zip Spec      14 (20) '2.0'\n+0CE1D6 Extract OS            00 (0) 'MS-DOS'\n+0CE1D7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CE1D9 Compression Method    0000 (0) 'Stored'\n+0CE1DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE1DF CRC                   00000000 (0)\n+0CE1E3 Compressed Size       00000000 (0)\n+0CE1E7 Uncompressed Size     00000000 (0)\n+0CE1EB Filename Length       008A (138)\n+0CE1ED Extra Length          0009 (9)\n+0CE1EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0xCB004: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE1EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0CB08E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CB090   Length              0005 (5)\n-0CB092   Flags               01 (1) 'Modification'\n-0CB093   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CB097 PAYLOAD\n-\n-0CC741 DATA DESCRIPTOR       08074B50 (134695760)\n-0CC745 CRC                   3DE98548 (1038714184)\n-0CC749 Compressed Size       000016AA (5802)\n-0CC74D Uncompressed Size     000016AA (5802)\n-\n-0CC751 LOCAL HEADER #328     04034B50 (67324752)\n-0CC755 Extract Zip Spec      14 (20) '2.0'\n-0CC756 Extract OS            00 (0) 'MS-DOS'\n-0CC757 General Purpose Flag  0000 (0)\n-0CC759 Compression Method    0000 (0) 'Stored'\n-0CC75B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC75F CRC                   00000000 (0)\n-0CC763 Compressed Size       00000000 (0)\n-0CC767 Uncompressed Size     00000000 (0)\n-0CC76B Filename Length       0024 (36)\n-0CC76D Extra Length          0009 (9)\n-0CC76F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC76F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC793 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC795   Length              0005 (5)\n-0CC797   Flags               01 (1) 'Modification'\n-0CC798   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CC79C LOCAL HEADER #329     04034B50 (67324752)\n-0CC7A0 Extract Zip Spec      14 (20) '2.0'\n-0CC7A1 Extract OS            00 (0) 'MS-DOS'\n-0CC7A2 General Purpose Flag  0000 (0)\n-0CC7A4 Compression Method    0000 (0) 'Stored'\n-0CC7A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC7AA CRC                   00000000 (0)\n-0CC7AE Compressed Size       00000000 (0)\n-0CC7B2 Uncompressed Size     00000000 (0)\n-0CC7B6 Filename Length       002B (43)\n-0CC7B8 Extra Length          0009 (9)\n-0CC7BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC7BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC7E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC7E7   Length              0005 (5)\n-0CC7E9   Flags               01 (1) 'Modification'\n-0CC7EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CC7EE LOCAL HEADER #330     04034B50 (67324752)\n-0CC7F2 Extract Zip Spec      14 (20) '2.0'\n-0CC7F3 Extract OS            00 (0) 'MS-DOS'\n-0CC7F4 General Purpose Flag  0000 (0)\n-0CC7F6 Compression Method    0000 (0) 'Stored'\n-0CC7F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC7FC CRC                   00000000 (0)\n-0CC800 Compressed Size       00000000 (0)\n-0CC804 Uncompressed Size     00000000 (0)\n-0CC808 Filename Length       0056 (86)\n-0CC80A Extra Length          0009 (9)\n-0CC80C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC80C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC862 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC864   Length              0005 (5)\n-0CC866   Flags               01 (1) 'Modification'\n-0CC867   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CC86B LOCAL HEADER #331     04034B50 (67324752)\n-0CC86F Extract Zip Spec      14 (20) '2.0'\n-0CC870 Extract OS            00 (0) 'MS-DOS'\n-0CC871 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CC873 Compression Method    0000 (0) 'Stored'\n-0CC875 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC879 CRC                   00000000 (0)\n-0CC87D Compressed Size       00000000 (0)\n-0CC881 Uncompressed Size     00000000 (0)\n-0CC885 Filename Length       006C (108)\n-0CC887 Extra Length          0009 (9)\n-0CC889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC8F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC8F7   Length              0005 (5)\n-0CC8F9   Flags               01 (1) 'Modification'\n-0CC8FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CC8FE PAYLOAD\n-\n-0CDE93 DATA DESCRIPTOR       08074B50 (134695760)\n-0CDE97 CRC                   F32265E7 (4079117799)\n-0CDE9B Compressed Size       00001595 (5525)\n-0CDE9F Uncompressed Size     00001595 (5525)\n-\n-0CDEA3 LOCAL HEADER #332     04034B50 (67324752)\n-0CDEA7 Extract Zip Spec      14 (20) '2.0'\n-0CDEA8 Extract OS            00 (0) 'MS-DOS'\n-0CDEA9 General Purpose Flag  0000 (0)\n-0CDEAB Compression Method    0000 (0) 'Stored'\n-0CDEAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CDEB1 CRC                   00000000 (0)\n-0CDEB5 Compressed Size       00000000 (0)\n-0CDEB9 Uncompressed Size     00000000 (0)\n-0CDEBD Filename Length       0055 (85)\n-0CDEBF Extra Length          0009 (9)\n-0CDEC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCDEC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDF16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDF18   Length              0005 (5)\n-0CDF1A   Flags               01 (1) 'Modification'\n-0CDF1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CDF1F LOCAL HEADER #333     04034B50 (67324752)\n-0CDF23 Extract Zip Spec      14 (20) '2.0'\n-0CDF24 Extract OS            00 (0) 'MS-DOS'\n-0CDF25 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CDF27 Compression Method    0000 (0) 'Stored'\n-0CDF29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CDF2D CRC                   00000000 (0)\n-0CDF31 Compressed Size       00000000 (0)\n-0CDF35 Uncompressed Size     00000000 (0)\n-0CDF39 Filename Length       006B (107)\n-0CDF3B Extra Length          0009 (9)\n-0CDF3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCDF3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDFA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDFAA   Length              0005 (5)\n-0CDFAC   Flags               01 (1) 'Modification'\n-0CDFAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CDFB1 PAYLOAD\n-\n-0CEAAC DATA DESCRIPTOR       08074B50 (134695760)\n-0CEAB0 CRC                   62A57B9F (1655012255)\n-0CEAB4 Compressed Size       00000AFB (2811)\n-0CEAB8 Uncompressed Size     00000AFB (2811)\n-\n-0CEABC LOCAL HEADER #334     04034B50 (67324752)\n-0CEAC0 Extract Zip Spec      14 (20) '2.0'\n-0CEAC1 Extract OS            00 (0) 'MS-DOS'\n-0CEAC2 General Purpose Flag  0000 (0)\n-0CEAC4 Compression Method    0000 (0) 'Stored'\n-0CEAC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CEACA CRC                   00000000 (0)\n-0CEACE Compressed Size       00000000 (0)\n-0CEAD2 Uncompressed Size     00000000 (0)\n-0CEAD6 Filename Length       0023 (35)\n-0CEAD8 Extra Length          0009 (9)\n-0CEADA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCEADA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CEAFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CEAFF   Length              0005 (5)\n-0CEB01   Flags               01 (1) 'Modification'\n-0CEB02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CEB06 LOCAL HEADER #335     04034B50 (67324752)\n-0CEB0A Extract Zip Spec      14 (20) '2.0'\n-0CEB0B Extract OS            00 (0) 'MS-DOS'\n-0CEB0C General Purpose Flag  0000 (0)\n-0CEB0E Compression Method    0000 (0) 'Stored'\n-0CEB10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CEB14 CRC                   00000000 (0)\n-0CEB18 Compressed Size       00000000 (0)\n-0CEB1C Uncompressed Size     00000000 (0)\n-0CEB20 Filename Length       002A (42)\n-0CEB22 Extra Length          0009 (9)\n-0CEB24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCEB24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CEB4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CEB50   Length              0005 (5)\n-0CEB52   Flags               01 (1) 'Modification'\n-0CEB53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CEB57 LOCAL HEADER #336     04034B50 (67324752)\n-0CEB5B Extract Zip Spec      14 (20) '2.0'\n-0CEB5C Extract OS            00 (0) 'MS-DOS'\n-0CEB5D General Purpose Flag  0000 (0)\n-0CEB5F Compression Method    0000 (0) 'Stored'\n-0CEB61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CEB65 CRC                   00000000 (0)\n-0CEB69 Compressed Size       00000000 (0)\n-0CEB6D Uncompressed Size     00000000 (0)\n-0CEB71 Filename Length       0052 (82)\n-0CEB73 Extra Length          0009 (9)\n-0CEB75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCEB75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CEBC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CEBC9   Length              0005 (5)\n-0CEBCB   Flags               01 (1) 'Modification'\n-0CEBCC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CEBD0 LOCAL HEADER #337     04034B50 (67324752)\n-0CEBD4 Extract Zip Spec      14 (20) '2.0'\n-0CEBD5 Extract OS            00 (0) 'MS-DOS'\n-0CEBD6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CEBD8 Compression Method    0000 (0) 'Stored'\n-0CEBDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CEBDE CRC                   00000000 (0)\n-0CEBE2 Compressed Size       00000000 (0)\n-0CEBE6 Uncompressed Size     00000000 (0)\n-0CEBEA Filename Length       0068 (104)\n-0CEBEC Extra Length          0009 (9)\n-0CEBEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCEBEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CEC56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CEC58   Length              0005 (5)\n-0CEC5A   Flags               01 (1) 'Modification'\n-0CEC5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CEC5F PAYLOAD\n-\n-0CF957 DATA DESCRIPTOR       08074B50 (134695760)\n-0CF95B CRC                   63C353AF (1673745327)\n-0CF95F Compressed Size       00000CF8 (3320)\n-0CF963 Uncompressed Size     00000CF8 (3320)\n-\n-0CF967 LOCAL HEADER #338     04034B50 (67324752)\n-0CF96B Extract Zip Spec      14 (20) '2.0'\n-0CF96C Extract OS            00 (0) 'MS-DOS'\n-0CF96D General Purpose Flag  0000 (0)\n-0CF96F Compression Method    0000 (0) 'Stored'\n-0CF971 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF975 CRC                   00000000 (0)\n-0CF979 Compressed Size       00000000 (0)\n-0CF97D Uncompressed Size     00000000 (0)\n-0CF981 Filename Length       0059 (89)\n-0CF983 Extra Length          0009 (9)\n-0CF985 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF985: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF9DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF9E0   Length              0005 (5)\n-0CF9E2   Flags               01 (1) 'Modification'\n-0CF9E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CF9E7 LOCAL HEADER #339     04034B50 (67324752)\n-0CF9EB Extract Zip Spec      14 (20) '2.0'\n-0CF9EC Extract OS            00 (0) 'MS-DOS'\n-0CF9ED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CF9EF Compression Method    0000 (0) 'Stored'\n-0CF9F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF9F5 CRC                   00000000 (0)\n-0CF9F9 Compressed Size       00000000 (0)\n-0CF9FD Uncompressed Size     00000000 (0)\n-0CFA01 Filename Length       006F (111)\n-0CFA03 Extra Length          0009 (9)\n-0CFA05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCFA05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CFA74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CFA76   Length              0005 (5)\n-0CFA78   Flags               01 (1) 'Modification'\n-0CFA79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CFA7D PAYLOAD\n-\n-0D01A0 DATA DESCRIPTOR       08074B50 (134695760)\n-0D01A4 CRC                   C64481A5 (3326378405)\n-0D01A8 Compressed Size       00000723 (1827)\n-0D01AC Uncompressed Size     00000723 (1827)\n-\n-0D01B0 LOCAL HEADER #340     04034B50 (67324752)\n-0D01B4 Extract Zip Spec      14 (20) '2.0'\n-0D01B5 Extract OS            00 (0) 'MS-DOS'\n-0D01B6 General Purpose Flag  0000 (0)\n-0D01B8 Compression Method    0000 (0) 'Stored'\n-0D01BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D01BE CRC                   00000000 (0)\n-0D01C2 Compressed Size       00000000 (0)\n-0D01C6 Uncompressed Size     00000000 (0)\n-0D01CA Filename Length       0057 (87)\n-0D01CC Extra Length          0009 (9)\n-0D01CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD01CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D0225 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D0227   Length              0005 (5)\n-0D0229   Flags               01 (1) 'Modification'\n-0D022A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D022E LOCAL HEADER #341     04034B50 (67324752)\n-0D0232 Extract Zip Spec      14 (20) '2.0'\n-0D0233 Extract OS            00 (0) 'MS-DOS'\n-0D0234 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D0236 Compression Method    0000 (0) 'Stored'\n-0D0238 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D023C CRC                   00000000 (0)\n-0D0240 Compressed Size       00000000 (0)\n-0D0244 Uncompressed Size     00000000 (0)\n-0D0248 Filename Length       006D (109)\n-0D024A Extra Length          0009 (9)\n-0D024C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD024C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D02B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D02BB   Length              0005 (5)\n-0D02BD   Flags               01 (1) 'Modification'\n-0D02BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D02C2 PAYLOAD\n-\n-0D09A4 DATA DESCRIPTOR       08074B50 (134695760)\n-0D09A8 CRC                   39649106 (962892038)\n-0D09AC Compressed Size       000006E2 (1762)\n-0D09B0 Uncompressed Size     000006E2 (1762)\n-\n-0D09B4 LOCAL HEADER #342     04034B50 (67324752)\n-0D09B8 Extract Zip Spec      14 (20) '2.0'\n-0D09B9 Extract OS            00 (0) 'MS-DOS'\n-0D09BA General Purpose Flag  0000 (0)\n-0D09BC Compression Method    0000 (0) 'Stored'\n-0D09BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D09C2 CRC                   00000000 (0)\n-0D09C6 Compressed Size       00000000 (0)\n-0D09CA Uncompressed Size     00000000 (0)\n-0D09CE Filename Length       0052 (82)\n-0D09D0 Extra Length          0009 (9)\n-0D09D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD09D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D0A24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D0A26   Length              0005 (5)\n-0D0A28   Flags               01 (1) 'Modification'\n-0D0A29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D0A2D LOCAL HEADER #343     04034B50 (67324752)\n-0D0A31 Extract Zip Spec      14 (20) '2.0'\n-0D0A32 Extract OS            00 (0) 'MS-DOS'\n-0D0A33 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D0A35 Compression Method    0000 (0) 'Stored'\n-0D0A37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D0A3B CRC                   00000000 (0)\n-0D0A3F Compressed Size       00000000 (0)\n-0D0A43 Uncompressed Size     00000000 (0)\n-0D0A47 Filename Length       0068 (104)\n-0D0A49 Extra Length          0009 (9)\n-0D0A4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD0A4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D0AB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D0AB5   Length              0005 (5)\n-0D0AB7   Flags               01 (1) 'Modification'\n-0D0AB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D0ABC PAYLOAD\n-\n-0D123E DATA DESCRIPTOR       08074B50 (134695760)\n-0D1242 CRC                   8DC8B44C (2378740812)\n-0D1246 Compressed Size       00000782 (1922)\n-0D124A Uncompressed Size     00000782 (1922)\n-\n-0D124E LOCAL HEADER #344     04034B50 (67324752)\n-0D1252 Extract Zip Spec      14 (20) '2.0'\n-0D1253 Extract OS            00 (0) 'MS-DOS'\n-0D1254 General Purpose Flag  0000 (0)\n-0D1256 Compression Method    0000 (0) 'Stored'\n-0D1258 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D125C CRC                   00000000 (0)\n-0D1260 Compressed Size       00000000 (0)\n-0D1264 Uncompressed Size     00000000 (0)\n-0D1268 Filename Length       0023 (35)\n-0D126A Extra Length          0009 (9)\n-0D126C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD126C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D128F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D1291   Length              0005 (5)\n-0D1293   Flags               01 (1) 'Modification'\n-0D1294   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D1298 LOCAL HEADER #345     04034B50 (67324752)\n-0D129C Extract Zip Spec      14 (20) '2.0'\n-0D129D Extract OS            00 (0) 'MS-DOS'\n-0D129E General Purpose Flag  0000 (0)\n-0D12A0 Compression Method    0000 (0) 'Stored'\n-0D12A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D12A6 CRC                   00000000 (0)\n-0D12AA Compressed Size       00000000 (0)\n-0D12AE Uncompressed Size     00000000 (0)\n-0D12B2 Filename Length       002A (42)\n-0D12B4 Extra Length          0009 (9)\n-0D12B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD12B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D12E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D12E2   Length              0005 (5)\n-0D12E4   Flags               01 (1) 'Modification'\n-0D12E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D12E9 LOCAL HEADER #346     04034B50 (67324752)\n-0D12ED Extract Zip Spec      14 (20) '2.0'\n-0D12EE Extract OS            00 (0) 'MS-DOS'\n-0D12EF General Purpose Flag  0000 (0)\n-0D12F1 Compression Method    0000 (0) 'Stored'\n-0D12F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D12F7 CRC                   00000000 (0)\n-0D12FB Compressed Size       00000000 (0)\n-0D12FF Uncompressed Size     00000000 (0)\n-0D1303 Filename Length       0052 (82)\n-0D1305 Extra Length          0009 (9)\n-0D1307 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1307: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D1359 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D135B   Length              0005 (5)\n-0D135D   Flags               01 (1) 'Modification'\n-0D135E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D1362 LOCAL HEADER #347     04034B50 (67324752)\n-0D1366 Extract Zip Spec      14 (20) '2.0'\n-0D1367 Extract OS            00 (0) 'MS-DOS'\n-0D1368 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D136A Compression Method    0000 (0) 'Stored'\n-0D136C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D1370 CRC                   00000000 (0)\n-0D1374 Compressed Size       00000000 (0)\n-0D1378 Uncompressed Size     00000000 (0)\n-0D137C Filename Length       0068 (104)\n-0D137E Extra Length          0009 (9)\n-0D1380 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1380: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D13E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D13EA   Length              0005 (5)\n-0D13EC   Flags               01 (1) 'Modification'\n-0D13ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D13F1 PAYLOAD\n-\n-0D1D05 DATA DESCRIPTOR       08074B50 (134695760)\n-0D1D09 CRC                   605D4301 (1616724737)\n-0D1D0D Compressed Size       00000914 (2324)\n-0D1D11 Uncompressed Size     00000914 (2324)\n-\n-0D1D15 LOCAL HEADER #348     04034B50 (67324752)\n-0D1D19 Extract Zip Spec      14 (20) '2.0'\n-0D1D1A Extract OS            00 (0) 'MS-DOS'\n-0D1D1B General Purpose Flag  0000 (0)\n-0D1D1D Compression Method    0000 (0) 'Stored'\n-0D1D1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D1D23 CRC                   00000000 (0)\n-0D1D27 Compressed Size       00000000 (0)\n-0D1D2B Uncompressed Size     00000000 (0)\n-0D1D2F Filename Length       005F (95)\n-0D1D31 Extra Length          0009 (9)\n-0D1D33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1D33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D1D92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D1D94   Length              0005 (5)\n-0D1D96   Flags               01 (1) 'Modification'\n-0D1D97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D1D9B LOCAL HEADER #349     04034B50 (67324752)\n-0D1D9F Extract Zip Spec      14 (20) '2.0'\n-0D1DA0 Extract OS            00 (0) 'MS-DOS'\n-0D1DA1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D1DA3 Compression Method    0000 (0) 'Stored'\n-0D1DA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D1DA9 CRC                   00000000 (0)\n-0D1DAD Compressed Size       00000000 (0)\n-0D1DB1 Uncompressed Size     00000000 (0)\n-0D1DB5 Filename Length       0075 (117)\n-0D1DB7 Extra Length          0009 (9)\n-0D1DB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1DB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D1E2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D1E30   Length              0005 (5)\n-0D1E32   Flags               01 (1) 'Modification'\n-0D1E33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D1E37 PAYLOAD\n-\n-0D25DC DATA DESCRIPTOR       08074B50 (134695760)\n-0D25E0 CRC                   A64E298E (2790140302)\n-0D25E4 Compressed Size       000007A5 (1957)\n-0D25E8 Uncompressed Size     000007A5 (1957)\n-\n-0D25EC LOCAL HEADER #350     04034B50 (67324752)\n-0D25F0 Extract Zip Spec      14 (20) '2.0'\n-0D25F1 Extract OS            00 (0) 'MS-DOS'\n-0D25F2 General Purpose Flag  0000 (0)\n-0D25F4 Compression Method    0000 (0) 'Stored'\n-0D25F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D25FA CRC                   00000000 (0)\n-0D25FE Compressed Size       00000000 (0)\n-0D2602 Uncompressed Size     00000000 (0)\n-0D2606 Filename Length       0058 (88)\n-0D2608 Extra Length          0009 (9)\n-0D260A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD260A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D2662 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D2664   Length              0005 (5)\n-0D2666   Flags               01 (1) 'Modification'\n-0D2667   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D266B LOCAL HEADER #351     04034B50 (67324752)\n-0D266F Extract Zip Spec      14 (20) '2.0'\n-0D2670 Extract OS            00 (0) 'MS-DOS'\n-0D2671 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D2673 Compression Method    0000 (0) 'Stored'\n-0D2675 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2679 CRC                   00000000 (0)\n-0D267D Compressed Size       00000000 (0)\n-0D2681 Uncompressed Size     00000000 (0)\n-0D2685 Filename Length       006E (110)\n-0D2687 Extra Length          0009 (9)\n-0D2689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D26F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D26F9   Length              0005 (5)\n-0D26FB   Flags               01 (1) 'Modification'\n-0D26FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D2700 PAYLOAD\n-\n-0D3643 DATA DESCRIPTOR       08074B50 (134695760)\n-0D3647 CRC                   937D5C9D (2474466461)\n-0D364B Compressed Size       00000F43 (3907)\n-0D364F Uncompressed Size     00000F43 (3907)\n-\n-0D3653 LOCAL HEADER #352     04034B50 (67324752)\n-0D3657 Extract Zip Spec      14 (20) '2.0'\n-0D3658 Extract OS            00 (0) 'MS-DOS'\n-0D3659 General Purpose Flag  0000 (0)\n-0D365B Compression Method    0000 (0) 'Stored'\n-0D365D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3661 CRC                   00000000 (0)\n-0D3665 Compressed Size       00000000 (0)\n-0D3669 Uncompressed Size     00000000 (0)\n-0D366D Filename Length       0025 (37)\n-0D366F Extra Length          0009 (9)\n-0D3671 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3671: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D3696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D3698   Length              0005 (5)\n-0D369A   Flags               01 (1) 'Modification'\n-0D369B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D369F LOCAL HEADER #353     04034B50 (67324752)\n-0D36A3 Extract Zip Spec      14 (20) '2.0'\n-0D36A4 Extract OS            00 (0) 'MS-DOS'\n-0D36A5 General Purpose Flag  0000 (0)\n-0D36A7 Compression Method    0000 (0) 'Stored'\n-0D36A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D36AD CRC                   00000000 (0)\n-0D36B1 Compressed Size       00000000 (0)\n-0D36B5 Uncompressed Size     00000000 (0)\n-0D36B9 Filename Length       002C (44)\n-0D36BB Extra Length          0009 (9)\n-0D36BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD36BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D36E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D36EB   Length              0005 (5)\n-0D36ED   Flags               01 (1) 'Modification'\n-0D36EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D36F2 LOCAL HEADER #354     04034B50 (67324752)\n-0D36F6 Extract Zip Spec      14 (20) '2.0'\n-0D36F7 Extract OS            00 (0) 'MS-DOS'\n-0D36F8 General Purpose Flag  0000 (0)\n-0D36FA Compression Method    0000 (0) 'Stored'\n-0D36FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3700 CRC                   00000000 (0)\n-0D3704 Compressed Size       00000000 (0)\n-0D3708 Uncompressed Size     00000000 (0)\n-0D370C Filename Length       005C (92)\n-0D370E Extra Length          0009 (9)\n-0D3710 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3710: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D376C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D376E   Length              0005 (5)\n-0D3770   Flags               01 (1) 'Modification'\n-0D3771   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D3775 LOCAL HEADER #355     04034B50 (67324752)\n-0D3779 Extract Zip Spec      14 (20) '2.0'\n-0D377A Extract OS            00 (0) 'MS-DOS'\n-0D377B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D377D Compression Method    0000 (0) 'Stored'\n-0D377F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3783 CRC                   00000000 (0)\n-0D3787 Compressed Size       00000000 (0)\n-0D378B Uncompressed Size     00000000 (0)\n-0D378F Filename Length       0072 (114)\n-0D3791 Extra Length          0009 (9)\n-0D3793 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3793: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D3805 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D3807   Length              0005 (5)\n-0D3809   Flags               01 (1) 'Modification'\n-0D380A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D380E PAYLOAD\n-\n-0D46A8 DATA DESCRIPTOR       08074B50 (134695760)\n-0D46AC CRC                   335CA1CD (861708749)\n-0D46B0 Compressed Size       00000E9A (3738)\n-0D46B4 Uncompressed Size     00000E9A (3738)\n-\n-0D46B8 LOCAL HEADER #356     04034B50 (67324752)\n-0D46BC Extract Zip Spec      14 (20) '2.0'\n-0D46BD Extract OS            00 (0) 'MS-DOS'\n-0D46BE General Purpose Flag  0000 (0)\n-0D46C0 Compression Method    0000 (0) 'Stored'\n-0D46C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D46C6 CRC                   00000000 (0)\n-0D46CA Compressed Size       00000000 (0)\n-0D46CE Uncompressed Size     00000000 (0)\n-0D46D2 Filename Length       0068 (104)\n-0D46D4 Extra Length          0009 (9)\n-0D46D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD46D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D473E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D4740   Length              0005 (5)\n-0D4742   Flags               01 (1) 'Modification'\n-0D4743   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D4747 LOCAL HEADER #357     04034B50 (67324752)\n-0D474B Extract Zip Spec      14 (20) '2.0'\n-0D474C Extract OS            00 (0) 'MS-DOS'\n-0D474D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D474F Compression Method    0000 (0) 'Stored'\n-0D4751 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D4755 CRC                   00000000 (0)\n-0D4759 Compressed Size       00000000 (0)\n-0D475D Uncompressed Size     00000000 (0)\n-0D4761 Filename Length       007E (126)\n-0D4763 Extra Length          0009 (9)\n-0D4765 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD4765: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D47E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D47E5   Length              0005 (5)\n-0D47E7   Flags               01 (1) 'Modification'\n-0D47E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D47EC PAYLOAD\n-\n-0D5845 DATA DESCRIPTOR       08074B50 (134695760)\n-0D5849 CRC                   3EE7FDDD (1055391197)\n-0D584D Compressed Size       00001059 (4185)\n-0D5851 Uncompressed Size     00001059 (4185)\n-\n-0D5855 LOCAL HEADER #358     04034B50 (67324752)\n-0D5859 Extract Zip Spec      14 (20) '2.0'\n-0D585A Extract OS            00 (0) 'MS-DOS'\n-0D585B General Purpose Flag  0000 (0)\n-0D585D Compression Method    0000 (0) 'Stored'\n-0D585F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5863 CRC                   00000000 (0)\n-0D5867 Compressed Size       00000000 (0)\n-0D586B Uncompressed Size     00000000 (0)\n-0D586F Filename Length       0025 (37)\n-0D5871 Extra Length          0009 (9)\n-0D5873 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5873: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5898 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D589A   Length              0005 (5)\n-0D589C   Flags               01 (1) 'Modification'\n-0D589D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D58A1 LOCAL HEADER #359     04034B50 (67324752)\n-0D58A5 Extract Zip Spec      14 (20) '2.0'\n-0D58A6 Extract OS            00 (0) 'MS-DOS'\n-0D58A7 General Purpose Flag  0000 (0)\n-0D58A9 Compression Method    0000 (0) 'Stored'\n-0D58AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D58AF CRC                   00000000 (0)\n-0D58B3 Compressed Size       00000000 (0)\n-0D58B7 Uncompressed Size     00000000 (0)\n-0D58BB Filename Length       002C (44)\n-0D58BD Extra Length          0009 (9)\n-0D58BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD58BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D58EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D58ED   Length              0005 (5)\n-0D58EF   Flags               01 (1) 'Modification'\n-0D58F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D58F4 LOCAL HEADER #360     04034B50 (67324752)\n-0D58F8 Extract Zip Spec      14 (20) '2.0'\n-0D58F9 Extract OS            00 (0) 'MS-DOS'\n-0D58FA General Purpose Flag  0000 (0)\n-0D58FC Compression Method    0000 (0) 'Stored'\n-0D58FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5902 CRC                   00000000 (0)\n-0D5906 Compressed Size       00000000 (0)\n-0D590A Uncompressed Size     00000000 (0)\n-0D590E Filename Length       005A (90)\n-0D5910 Extra Length          0009 (9)\n-0D5912 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5912: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D596C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D596E   Length              0005 (5)\n-0D5970   Flags               01 (1) 'Modification'\n-0D5971   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D5975 LOCAL HEADER #361     04034B50 (67324752)\n-0D5979 Extract Zip Spec      14 (20) '2.0'\n-0D597A Extract OS            00 (0) 'MS-DOS'\n-0D597B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D597D Compression Method    0000 (0) 'Stored'\n-0D597F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5983 CRC                   00000000 (0)\n-0D5987 Compressed Size       00000000 (0)\n-0D598B Uncompressed Size     00000000 (0)\n-0D598F Filename Length       0070 (112)\n-0D5991 Extra Length          0009 (9)\n-0D5993 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5993: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D5A03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5A05   Length              0005 (5)\n-0D5A07   Flags               01 (1) 'Modification'\n-0D5A08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D5A0C PAYLOAD\n-\n-0D71D3 DATA DESCRIPTOR       08074B50 (134695760)\n-0D71D7 CRC                   0944969F (155489951)\n-0D71DB Compressed Size       000017C7 (6087)\n-0D71DF Uncompressed Size     000017C7 (6087)\n-\n-0D71E3 LOCAL HEADER #362     04034B50 (67324752)\n-0D71E7 Extract Zip Spec      14 (20) '2.0'\n-0D71E8 Extract OS            00 (0) 'MS-DOS'\n-0D71E9 General Purpose Flag  0000 (0)\n-0D71EB Compression Method    0000 (0) 'Stored'\n-0D71ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D71F1 CRC                   00000000 (0)\n-0D71F5 Compressed Size       00000000 (0)\n-0D71F9 Uncompressed Size     00000000 (0)\n-0D71FD Filename Length       0027 (39)\n-0D71FF Extra Length          0009 (9)\n-0D7201 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD7201: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D7228 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D722A   Length              0005 (5)\n-0D722C   Flags               01 (1) 'Modification'\n-0D722D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D7231 LOCAL HEADER #363     04034B50 (67324752)\n-0D7235 Extract Zip Spec      14 (20) '2.0'\n-0D7236 Extract OS            00 (0) 'MS-DOS'\n-0D7237 General Purpose Flag  0000 (0)\n-0D7239 Compression Method    0000 (0) 'Stored'\n-0D723B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D723F CRC                   00000000 (0)\n-0D7243 Compressed Size       00000000 (0)\n-0D7247 Uncompressed Size     00000000 (0)\n-0D724B Filename Length       002E (46)\n-0D724D Extra Length          0009 (9)\n-0D724F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD724F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D727D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D727F   Length              0005 (5)\n-0D7281   Flags               01 (1) 'Modification'\n-0D7282   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D7286 LOCAL HEADER #364     04034B50 (67324752)\n-0D728A Extract Zip Spec      14 (20) '2.0'\n-0D728B Extract OS            00 (0) 'MS-DOS'\n-0D728C General Purpose Flag  0000 (0)\n-0D728E Compression Method    0000 (0) 'Stored'\n-0D7290 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D7294 CRC                   00000000 (0)\n-0D7298 Compressed Size       00000000 (0)\n-0D729C Uncompressed Size     00000000 (0)\n-0D72A0 Filename Length       0067 (103)\n-0D72A2 Extra Length          0009 (9)\n-0D72A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD72A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D730B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D730D   Length              0005 (5)\n-0D730F   Flags               01 (1) 'Modification'\n-0D7310   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D7314 LOCAL HEADER #365     04034B50 (67324752)\n-0D7318 Extract Zip Spec      14 (20) '2.0'\n-0D7319 Extract OS            00 (0) 'MS-DOS'\n-0D731A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D731C Compression Method    0000 (0) 'Stored'\n-0D731E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D7322 CRC                   00000000 (0)\n-0D7326 Compressed Size       00000000 (0)\n-0D732A Uncompressed Size     00000000 (0)\n-0D732E Filename Length       007D (125)\n-0D7330 Extra Length          0009 (9)\n-0D7332 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD7332: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D73AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D73B1   Length              0005 (5)\n-0D73B3   Flags               01 (1) 'Modification'\n-0D73B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D73B8 PAYLOAD\n-\n-0D8013 DATA DESCRIPTOR       08074B50 (134695760)\n-0D8017 CRC                   67FA3A91 (1744452241)\n-0D801B Compressed Size       00000C5B (3163)\n-0D801F Uncompressed Size     00000C5B (3163)\n-\n-0D8023 LOCAL HEADER #366     04034B50 (67324752)\n-0D8027 Extract Zip Spec      14 (20) '2.0'\n-0D8028 Extract OS            00 (0) 'MS-DOS'\n-0D8029 General Purpose Flag  0000 (0)\n-0D802B Compression Method    0000 (0) 'Stored'\n-0D802D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D8031 CRC                   00000000 (0)\n-0D8035 Compressed Size       00000000 (0)\n-0D8039 Uncompressed Size     00000000 (0)\n-0D803D Filename Length       0067 (103)\n-0D803F Extra Length          0009 (9)\n-0D8041 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD8041: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D80A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D80AA   Length              0005 (5)\n-0D80AC   Flags               01 (1) 'Modification'\n-0D80AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D80B1 LOCAL HEADER #367     04034B50 (67324752)\n-0D80B5 Extract Zip Spec      14 (20) '2.0'\n-0D80B6 Extract OS            00 (0) 'MS-DOS'\n-0D80B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D80B9 Compression Method    0000 (0) 'Stored'\n-0D80BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D80BF CRC                   00000000 (0)\n-0D80C3 Compressed Size       00000000 (0)\n-0D80C7 Uncompressed Size     00000000 (0)\n-0D80CB Filename Length       007D (125)\n-0D80CD Extra Length          0009 (9)\n-0D80CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD80CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D814C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D814E   Length              0005 (5)\n-0D8150   Flags               01 (1) 'Modification'\n-0D8151   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D8155 PAYLOAD\n-\n-0D8915 DATA DESCRIPTOR       08074B50 (134695760)\n-0D8919 CRC                   63513D5C (1666268508)\n-0D891D Compressed Size       000007C0 (1984)\n-0D8921 Uncompressed Size     000007C0 (1984)\n-\n-0D8925 LOCAL HEADER #368     04034B50 (67324752)\n-0D8929 Extract Zip Spec      14 (20) '2.0'\n-0D892A Extract OS            00 (0) 'MS-DOS'\n-0D892B General Purpose Flag  0000 (0)\n-0D892D Compression Method    0000 (0) 'Stored'\n-0D892F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D8933 CRC                   00000000 (0)\n-0D8937 Compressed Size       00000000 (0)\n-0D893B Uncompressed Size     00000000 (0)\n-0D893F Filename Length       005E (94)\n-0D8941 Extra Length          0009 (9)\n-0D8943 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD8943: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D89A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D89A3   Length              0005 (5)\n-0D89A5   Flags               01 (1) 'Modification'\n-0D89A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D89AA LOCAL HEADER #369     04034B50 (67324752)\n-0D89AE Extract Zip Spec      14 (20) '2.0'\n-0D89AF Extract OS            00 (0) 'MS-DOS'\n-0D89B0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D89B2 Compression Method    0000 (0) 'Stored'\n-0D89B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D89B8 CRC                   00000000 (0)\n-0D89BC Compressed Size       00000000 (0)\n-0D89C0 Uncompressed Size     00000000 (0)\n-0D89C4 Filename Length       0074 (116)\n-0D89C6 Extra Length          0009 (9)\n-0D89C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD89C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D8A3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D8A3E   Length              0005 (5)\n-0D8A40   Flags               01 (1) 'Modification'\n-0D8A41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D8A45 PAYLOAD\n-\n-0D991F DATA DESCRIPTOR       08074B50 (134695760)\n-0D9923 CRC                   99929518 (2576520472)\n-0D9927 Compressed Size       00000EDA (3802)\n-0D992B Uncompressed Size     00000EDA (3802)\n-\n-0D992F LOCAL HEADER #370     04034B50 (67324752)\n-0D9933 Extract Zip Spec      14 (20) '2.0'\n-0D9934 Extract OS            00 (0) 'MS-DOS'\n-0D9935 General Purpose Flag  0000 (0)\n-0D9937 Compression Method    0000 (0) 'Stored'\n-0D9939 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D993D CRC                   00000000 (0)\n-0D9941 Compressed Size       00000000 (0)\n-0D9945 Uncompressed Size     00000000 (0)\n-0D9949 Filename Length       005C (92)\n-0D994B Extra Length          0009 (9)\n-0D994D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD994D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D99A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D99AB   Length              0005 (5)\n-0D99AD   Flags               01 (1) 'Modification'\n-0D99AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D99B2 LOCAL HEADER #371     04034B50 (67324752)\n-0D99B6 Extract Zip Spec      14 (20) '2.0'\n-0D99B7 Extract OS            00 (0) 'MS-DOS'\n-0D99B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D99BA Compression Method    0000 (0) 'Stored'\n-0D99BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D99C0 CRC                   00000000 (0)\n-0D99C4 Compressed Size       00000000 (0)\n-0D99C8 Uncompressed Size     00000000 (0)\n-0D99CC Filename Length       0072 (114)\n-0D99CE Extra Length          0009 (9)\n-0D99D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD99D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D9A42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D9A44   Length              0005 (5)\n-0D9A46   Flags               01 (1) 'Modification'\n-0D9A47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D9A4B PAYLOAD\n-\n-0DA343 DATA DESCRIPTOR       08074B50 (134695760)\n-0DA347 CRC                   E6BF62E0 (3871302368)\n-0DA34B Compressed Size       000008F8 (2296)\n-0DA34F Uncompressed Size     000008F8 (2296)\n-\n-0DA353 LOCAL HEADER #372     04034B50 (67324752)\n-0DA357 Extract Zip Spec      14 (20) '2.0'\n-0DA358 Extract OS            00 (0) 'MS-DOS'\n-0DA359 General Purpose Flag  0000 (0)\n-0DA35B Compression Method    0000 (0) 'Stored'\n-0DA35D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DA361 CRC                   00000000 (0)\n-0DA365 Compressed Size       00000000 (0)\n-0DA369 Uncompressed Size     00000000 (0)\n-0DA36D Filename Length       0061 (97)\n-0DA36F Extra Length          0009 (9)\n-0DA371 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDA371: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DA3D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DA3D4   Length              0005 (5)\n-0DA3D6   Flags               01 (1) 'Modification'\n-0DA3D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DA3DB LOCAL HEADER #373     04034B50 (67324752)\n-0DA3DF Extract Zip Spec      14 (20) '2.0'\n-0DA3E0 Extract OS            00 (0) 'MS-DOS'\n-0DA3E1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DA3E3 Compression Method    0000 (0) 'Stored'\n-0DA3E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DA3E9 CRC                   00000000 (0)\n-0DA3ED Compressed Size       00000000 (0)\n-0DA3F1 Uncompressed Size     00000000 (0)\n-0DA3F5 Filename Length       0077 (119)\n-0DA3F7 Extra Length          0009 (9)\n-0DA3F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDA3F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DA470 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DA472   Length              0005 (5)\n-0DA474   Flags               01 (1) 'Modification'\n-0DA475   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DA479 PAYLOAD\n-\n-0DAA0D DATA DESCRIPTOR       08074B50 (134695760)\n-0DAA11 CRC                   01130591 (18023825)\n-0DAA15 Compressed Size       00000594 (1428)\n-0DAA19 Uncompressed Size     00000594 (1428)\n-\n-0DAA1D LOCAL HEADER #374     04034B50 (67324752)\n-0DAA21 Extract Zip Spec      14 (20) '2.0'\n-0DAA22 Extract OS            00 (0) 'MS-DOS'\n-0DAA23 General Purpose Flag  0000 (0)\n-0DAA25 Compression Method    0000 (0) 'Stored'\n-0DAA27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAA2B CRC                   00000000 (0)\n-0DAA2F Compressed Size       00000000 (0)\n-0DAA33 Uncompressed Size     00000000 (0)\n-0DAA37 Filename Length       0063 (99)\n-0DAA39 Extra Length          0009 (9)\n-0DAA3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAA3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAA9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAAA0   Length              0005 (5)\n-0DAAA2   Flags               01 (1) 'Modification'\n-0DAAA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DAAA7 LOCAL HEADER #375     04034B50 (67324752)\n-0DAAAB Extract Zip Spec      14 (20) '2.0'\n-0DAAAC Extract OS            00 (0) 'MS-DOS'\n-0DAAAD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DAAAF Compression Method    0000 (0) 'Stored'\n-0DAAB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAAB5 CRC                   00000000 (0)\n-0DAAB9 Compressed Size       00000000 (0)\n-0DAABD Uncompressed Size     00000000 (0)\n-0DAAC1 Filename Length       0079 (121)\n-0DAAC3 Extra Length          0009 (9)\n-0DAAC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAAC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAB3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAB40   Length              0005 (5)\n-0DAB42   Flags               01 (1) 'Modification'\n-0DAB43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DAB47 PAYLOAD\n-\n-0DB378 DATA DESCRIPTOR       08074B50 (134695760)\n-0DB37C CRC                   F05E2331 (4032701233)\n-0DB380 Compressed Size       00000831 (2097)\n-0DB384 Uncompressed Size     00000831 (2097)\n-\n-0DB388 LOCAL HEADER #376     04034B50 (67324752)\n-0DB38C Extract Zip Spec      14 (20) '2.0'\n-0DB38D Extract OS            00 (0) 'MS-DOS'\n-0DB38E General Purpose Flag  0000 (0)\n-0DB390 Compression Method    0000 (0) 'Stored'\n-0DB392 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DB396 CRC                   00000000 (0)\n-0DB39A Compressed Size       00000000 (0)\n-0DB39E Uncompressed Size     00000000 (0)\n-0DB3A2 Filename Length       0061 (97)\n-0DB3A4 Extra Length          0009 (9)\n-0DB3A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDB3A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DB407 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DB409   Length              0005 (5)\n-0DB40B   Flags               01 (1) 'Modification'\n-0DB40C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DB410 LOCAL HEADER #377     04034B50 (67324752)\n-0DB414 Extract Zip Spec      14 (20) '2.0'\n-0DB415 Extract OS            00 (0) 'MS-DOS'\n-0DB416 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DB418 Compression Method    0000 (0) 'Stored'\n-0DB41A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DB41E CRC                   00000000 (0)\n-0DB422 Compressed Size       00000000 (0)\n-0DB426 Uncompressed Size     00000000 (0)\n-0DB42A Filename Length       0077 (119)\n-0DB42C Extra Length          0009 (9)\n-0DB42E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDB42E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DB4A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DB4A7   Length              0005 (5)\n-0DB4A9   Flags               01 (1) 'Modification'\n-0DB4AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DB4AE PAYLOAD\n-\n-0DCA7E DATA DESCRIPTOR       08074B50 (134695760)\n-0DCA82 CRC                   80ED3BA4 (2163030948)\n-0DCA86 Compressed Size       000015D0 (5584)\n-0DCA8A Uncompressed Size     000015D0 (5584)\n-\n-0DCA8E LOCAL HEADER #378     04034B50 (67324752)\n-0DCA92 Extract Zip Spec      14 (20) '2.0'\n-0DCA93 Extract OS            00 (0) 'MS-DOS'\n-0DCA94 General Purpose Flag  0000 (0)\n-0DCA96 Compression Method    0000 (0) 'Stored'\n-0DCA98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DCA9C CRC                   00000000 (0)\n-0DCAA0 Compressed Size       00000000 (0)\n-0DCAA4 Uncompressed Size     00000000 (0)\n-0DCAA8 Filename Length       0067 (103)\n-0DCAAA Extra Length          0009 (9)\n-0DCAAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDCAAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DCB13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DCB15   Length              0005 (5)\n-0DCB17   Flags               01 (1) 'Modification'\n-0DCB18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DCB1C LOCAL HEADER #379     04034B50 (67324752)\n-0DCB20 Extract Zip Spec      14 (20) '2.0'\n-0DCB21 Extract OS            00 (0) 'MS-DOS'\n-0DCB22 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DCB24 Compression Method    0000 (0) 'Stored'\n-0DCB26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DCB2A CRC                   00000000 (0)\n-0DCB2E Compressed Size       00000000 (0)\n-0DCB32 Uncompressed Size     00000000 (0)\n-0DCB36 Filename Length       007D (125)\n-0DCB38 Extra Length          0009 (9)\n-0DCB3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDCB3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DCBB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DCBB9   Length              0005 (5)\n-0DCBBB   Flags               01 (1) 'Modification'\n-0DCBBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DCBC0 PAYLOAD\n-\n-0DEB72 DATA DESCRIPTOR       08074B50 (134695760)\n-0DEB76 CRC                   BEB620A1 (3199606945)\n-0DEB7A Compressed Size       00001FB2 (8114)\n-0DEB7E Uncompressed Size     00001FB2 (8114)\n-\n-0DEB82 LOCAL HEADER #380     04034B50 (67324752)\n-0DEB86 Extract Zip Spec      14 (20) '2.0'\n-0DEB87 Extract OS            00 (0) 'MS-DOS'\n-0DEB88 General Purpose Flag  0000 (0)\n-0DEB8A Compression Method    0000 (0) 'Stored'\n-0DEB8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DEB90 CRC                   00000000 (0)\n-0DEB94 Compressed Size       00000000 (0)\n-0DEB98 Uncompressed Size     00000000 (0)\n-0DEB9C Filename Length       005E (94)\n-0DEB9E Extra Length          0009 (9)\n-0DEBA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDEBA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DEBFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DEC00   Length              0005 (5)\n-0DEC02   Flags               01 (1) 'Modification'\n-0DEC03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DEC07 LOCAL HEADER #381     04034B50 (67324752)\n-0DEC0B Extract Zip Spec      14 (20) '2.0'\n-0DEC0C Extract OS            00 (0) 'MS-DOS'\n-0DEC0D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DEC0F Compression Method    0000 (0) 'Stored'\n-0DEC11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DEC15 CRC                   00000000 (0)\n-0DEC19 Compressed Size       00000000 (0)\n-0DEC1D Uncompressed Size     00000000 (0)\n-0DEC21 Filename Length       0074 (116)\n-0DEC23 Extra Length          0009 (9)\n-0DEC25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDEC25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DEC99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DEC9B   Length              0005 (5)\n-0DEC9D   Flags               01 (1) 'Modification'\n-0DEC9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DECA2 PAYLOAD\n-\n-0DFF9C DATA DESCRIPTOR       08074B50 (134695760)\n-0DFFA0 CRC                   61A0CE5A (1637928538)\n-0DFFA4 Compressed Size       000012FA (4858)\n-0DFFA8 Uncompressed Size     000012FA (4858)\n-\n-0DFFAC LOCAL HEADER #382     04034B50 (67324752)\n-0DFFB0 Extract Zip Spec      14 (20) '2.0'\n-0DFFB1 Extract OS            00 (0) 'MS-DOS'\n-0DFFB2 General Purpose Flag  0000 (0)\n-0DFFB4 Compression Method    0000 (0) 'Stored'\n-0DFFB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DFFBA CRC                   00000000 (0)\n-0DFFBE Compressed Size       00000000 (0)\n-0DFFC2 Uncompressed Size     00000000 (0)\n-0DFFC6 Filename Length       0061 (97)\n-0DFFC8 Extra Length          0009 (9)\n-0DFFCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDFFCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E002B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E002D   Length              0005 (5)\n-0E002F   Flags               01 (1) 'Modification'\n-0E0030   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E0034 LOCAL HEADER #383     04034B50 (67324752)\n-0E0038 Extract Zip Spec      14 (20) '2.0'\n-0E0039 Extract OS            00 (0) 'MS-DOS'\n-0E003A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E003C Compression Method    0000 (0) 'Stored'\n-0E003E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E0042 CRC                   00000000 (0)\n-0E0046 Compressed Size       00000000 (0)\n-0E004A Uncompressed Size     00000000 (0)\n-0E004E Filename Length       0077 (119)\n-0E0050 Extra Length          0009 (9)\n-0E0052 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE0052: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E00C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E00CB   Length              0005 (5)\n-0E00CD   Flags               01 (1) 'Modification'\n-0E00CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E00D2 PAYLOAD\n-\n-0E13E7 DATA DESCRIPTOR       08074B50 (134695760)\n-0E13EB CRC                   624BE63E (1649141310)\n-0E13EF Compressed Size       00001315 (4885)\n-0E13F3 Uncompressed Size     00001315 (4885)\n-\n-0E13F7 LOCAL HEADER #384     04034B50 (67324752)\n-0E13FB Extract Zip Spec      14 (20) '2.0'\n-0E13FC Extract OS            00 (0) 'MS-DOS'\n-0E13FD General Purpose Flag  0000 (0)\n-0E13FF Compression Method    0000 (0) 'Stored'\n-0E1401 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E1405 CRC                   00000000 (0)\n-0E1409 Compressed Size       00000000 (0)\n-0E140D Uncompressed Size     00000000 (0)\n-0E1411 Filename Length       005D (93)\n-0E1413 Extra Length          0009 (9)\n-0E1415 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE1415: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E1472 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E1474   Length              0005 (5)\n-0E1476   Flags               01 (1) 'Modification'\n-0E1477   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E147B LOCAL HEADER #385     04034B50 (67324752)\n-0E147F Extract Zip Spec      14 (20) '2.0'\n-0E1480 Extract OS            00 (0) 'MS-DOS'\n-0E1481 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E1483 Compression Method    0000 (0) 'Stored'\n-0E1485 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E1489 CRC                   00000000 (0)\n-0E148D Compressed Size       00000000 (0)\n-0E1491 Uncompressed Size     00000000 (0)\n-0E1495 Filename Length       0073 (115)\n-0E1497 Extra Length          0009 (9)\n-0E1499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE1499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E150C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E150E   Length              0005 (5)\n-0E1510   Flags               01 (1) 'Modification'\n-0E1511   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E1515 PAYLOAD\n-\n-0E3CF9 DATA DESCRIPTOR       08074B50 (134695760)\n-0E3CFD CRC                   F4A07CA3 (4104158371)\n-0E3D01 Compressed Size       000027E4 (10212)\n-0E3D05 Uncompressed Size     000027E4 (10212)\n-\n-0E3D09 LOCAL HEADER #386     04034B50 (67324752)\n-0E3D0D Extract Zip Spec      14 (20) '2.0'\n-0E3D0E Extract OS            00 (0) 'MS-DOS'\n-0E3D0F General Purpose Flag  0000 (0)\n-0E3D11 Compression Method    0000 (0) 'Stored'\n-0E3D13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E3D17 CRC                   00000000 (0)\n-0E3D1B Compressed Size       00000000 (0)\n-0E3D1F Uncompressed Size     00000000 (0)\n-0E3D23 Filename Length       0065 (101)\n-0E3D25 Extra Length          0009 (9)\n-0E3D27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE3D27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3D8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3D8E   Length              0005 (5)\n-0E3D90   Flags               01 (1) 'Modification'\n-0E3D91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E3D95 LOCAL HEADER #387     04034B50 (67324752)\n-0E3D99 Extract Zip Spec      14 (20) '2.0'\n-0E3D9A Extract OS            00 (0) 'MS-DOS'\n-0E3D9B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E3D9D Compression Method    0000 (0) 'Stored'\n-0E3D9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E3DA3 CRC                   00000000 (0)\n-0E3DA7 Compressed Size       00000000 (0)\n-0E3DAB Uncompressed Size     00000000 (0)\n-0E3DAF Filename Length       007B (123)\n-0E3DB1 Extra Length          0009 (9)\n-0E3DB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE3DB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3E2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3E30   Length              0005 (5)\n-0E3E32   Flags               01 (1) 'Modification'\n-0E3E33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E3E37 PAYLOAD\n-\n-0E50AD DATA DESCRIPTOR       08074B50 (134695760)\n-0E50B1 CRC                   6E031E40 (1845698112)\n-0E50B5 Compressed Size       00001276 (4726)\n-0E50B9 Uncompressed Size     00001276 (4726)\n-\n-0E50BD LOCAL HEADER #388     04034B50 (67324752)\n-0E50C1 Extract Zip Spec      14 (20) '2.0'\n-0E50C2 Extract OS            00 (0) 'MS-DOS'\n-0E50C3 General Purpose Flag  0000 (0)\n-0E50C5 Compression Method    0000 (0) 'Stored'\n-0E50C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E50CB CRC                   00000000 (0)\n-0E50CF Compressed Size       00000000 (0)\n-0E50D3 Uncompressed Size     00000000 (0)\n-0E50D7 Filename Length       0064 (100)\n-0E50D9 Extra Length          0009 (9)\n-0E50DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE50DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E513F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5141   Length              0005 (5)\n-0E5143   Flags               01 (1) 'Modification'\n-0E5144   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E5148 LOCAL HEADER #389     04034B50 (67324752)\n-0E514C Extract Zip Spec      14 (20) '2.0'\n-0E514D Extract OS            00 (0) 'MS-DOS'\n-0E514E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E5150 Compression Method    0000 (0) 'Stored'\n-0E5152 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5156 CRC                   00000000 (0)\n-0E515A Compressed Size       00000000 (0)\n-0E515E Uncompressed Size     00000000 (0)\n-0E5162 Filename Length       007A (122)\n-0E5164 Extra Length          0009 (9)\n-0E5166 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5166: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E51E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E51E2   Length              0005 (5)\n-0E51E4   Flags               01 (1) 'Modification'\n-0E51E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E51E9 PAYLOAD\n-\n-0E5DC7 DATA DESCRIPTOR       08074B50 (134695760)\n-0E5DCB CRC                   5987930A (1502057226)\n-0E5DCF Compressed Size       00000BDE (3038)\n-0E5DD3 Uncompressed Size     00000BDE (3038)\n-\n-0E5DD7 LOCAL HEADER #390     04034B50 (67324752)\n-0E5DDB Extract Zip Spec      14 (20) '2.0'\n-0E5DDC Extract OS            00 (0) 'MS-DOS'\n-0E5DDD General Purpose Flag  0000 (0)\n-0E5DDF Compression Method    0000 (0) 'Stored'\n-0E5DE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5DE5 CRC                   00000000 (0)\n-0E5DE9 Compressed Size       00000000 (0)\n-0E5DED Uncompressed Size     00000000 (0)\n-0E5DF1 Filename Length       0065 (101)\n-0E5DF3 Extra Length          0009 (9)\n-0E5DF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5DF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E5E5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5E5C   Length              0005 (5)\n-0E5E5E   Flags               01 (1) 'Modification'\n-0E5E5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E5E63 LOCAL HEADER #391     04034B50 (67324752)\n-0E5E67 Extract Zip Spec      14 (20) '2.0'\n-0E5E68 Extract OS            00 (0) 'MS-DOS'\n-0E5E69 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E5E6B Compression Method    0000 (0) 'Stored'\n-0E5E6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5E71 CRC                   00000000 (0)\n-0E5E75 Compressed Size       00000000 (0)\n-0E5E79 Uncompressed Size     00000000 (0)\n-0E5E7D Filename Length       007B (123)\n-0E5E7F Extra Length          0009 (9)\n-0E5E81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5E81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E5EFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5EFE   Length              0005 (5)\n-0E5F00   Flags               01 (1) 'Modification'\n-0E5F01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E5F05 PAYLOAD\n-\n-0E67D4 DATA DESCRIPTOR       08074B50 (134695760)\n-0E67D8 CRC                   CA93F7B9 (3398694841)\n-0E67DC Compressed Size       000008CF (2255)\n-0E67E0 Uncompressed Size     000008CF (2255)\n-\n-0E67E4 LOCAL HEADER #392     04034B50 (67324752)\n-0E67E8 Extract Zip Spec      14 (20) '2.0'\n-0E67E9 Extract OS            00 (0) 'MS-DOS'\n-0E67EA General Purpose Flag  0000 (0)\n-0E67EC Compression Method    0000 (0) 'Stored'\n-0E67EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E67F2 CRC                   00000000 (0)\n-0E67F6 Compressed Size       00000000 (0)\n-0E67FA Uncompressed Size     00000000 (0)\n-0E67FE Filename Length       0063 (99)\n-0E6800 Extra Length          0009 (9)\n-0E6802 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6802: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6865 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6867   Length              0005 (5)\n-0E6869   Flags               01 (1) 'Modification'\n-0E686A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E686E LOCAL HEADER #393     04034B50 (67324752)\n-0E6872 Extract Zip Spec      14 (20) '2.0'\n-0E6873 Extract OS            00 (0) 'MS-DOS'\n-0E6874 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E6876 Compression Method    0000 (0) 'Stored'\n-0E6878 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E687C CRC                   00000000 (0)\n-0E6880 Compressed Size       00000000 (0)\n-0E6884 Uncompressed Size     00000000 (0)\n-0E6888 Filename Length       0079 (121)\n-0E688A Extra Length          0009 (9)\n-0E688C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE688C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E6905 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E6907   Length              0005 (5)\n-0E6909   Flags               01 (1) 'Modification'\n-0E690A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E690E PAYLOAD\n-\n-0E75B7 DATA DESCRIPTOR       08074B50 (134695760)\n-0E75BB CRC                   673E5975 (1732139381)\n-0E75BF Compressed Size       00000CA9 (3241)\n-0E75C3 Uncompressed Size     00000CA9 (3241)\n-\n-0E75C7 LOCAL HEADER #394     04034B50 (67324752)\n-0E75CB Extract Zip Spec      14 (20) '2.0'\n-0E75CC Extract OS            00 (0) 'MS-DOS'\n-0E75CD General Purpose Flag  0000 (0)\n-0E75CF Compression Method    0000 (0) 'Stored'\n-0E75D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E75D5 CRC                   00000000 (0)\n-0E75D9 Compressed Size       00000000 (0)\n-0E75DD Uncompressed Size     00000000 (0)\n-0E75E1 Filename Length       0061 (97)\n-0E75E3 Extra Length          0009 (9)\n-0E75E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE75E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E7646 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E7648   Length              0005 (5)\n-0E764A   Flags               01 (1) 'Modification'\n-0E764B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E764F LOCAL HEADER #395     04034B50 (67324752)\n-0E7653 Extract Zip Spec      14 (20) '2.0'\n-0E7654 Extract OS            00 (0) 'MS-DOS'\n-0E7655 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E7657 Compression Method    0000 (0) 'Stored'\n-0E7659 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E765D CRC                   00000000 (0)\n-0E7661 Compressed Size       00000000 (0)\n-0E7665 Uncompressed Size     00000000 (0)\n-0E7669 Filename Length       0077 (119)\n-0E766B Extra Length          0009 (9)\n-0E766D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE766D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E76E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E76E6   Length              0005 (5)\n-0E76E8   Flags               01 (1) 'Modification'\n-0E76E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E76ED PAYLOAD\n-\n-0EC729 DATA DESCRIPTOR       08074B50 (134695760)\n-0EC72D CRC                   33033645 (855848517)\n-0EC731 Compressed Size       0000503C (20540)\n-0EC735 Uncompressed Size     0000503C (20540)\n-\n-0EC739 LOCAL HEADER #396     04034B50 (67324752)\n-0EC73D Extract Zip Spec      14 (20) '2.0'\n-0EC73E Extract OS            00 (0) 'MS-DOS'\n-0EC73F General Purpose Flag  0000 (0)\n-0EC741 Compression Method    0000 (0) 'Stored'\n-0EC743 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC747 CRC                   00000000 (0)\n-0EC74B Compressed Size       00000000 (0)\n-0EC74F Uncompressed Size     00000000 (0)\n-0EC753 Filename Length       0064 (100)\n-0EC755 Extra Length          0009 (9)\n-0EC757 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC757: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC7BD   Length              0005 (5)\n-0EC7BF   Flags               01 (1) 'Modification'\n-0EC7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EC7C4 LOCAL HEADER #397     04034B50 (67324752)\n-0EC7C8 Extract Zip Spec      14 (20) '2.0'\n-0EC7C9 Extract OS            00 (0) 'MS-DOS'\n-0EC7CA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EC7CC Compression Method    0000 (0) 'Stored'\n-0EC7CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC7D2 CRC                   00000000 (0)\n-0EC7D6 Compressed Size       00000000 (0)\n-0EC7DA Uncompressed Size     00000000 (0)\n-0EC7DE Filename Length       007A (122)\n-0EC7E0 Extra Length          0009 (9)\n-0EC7E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC7E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC85C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC85E   Length              0005 (5)\n-0EC860   Flags               01 (1) 'Modification'\n-0EC861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EC865 PAYLOAD\n-\n-0ED073 DATA DESCRIPTOR       08074B50 (134695760)\n-0ED077 CRC                   F5037A64 (4110645860)\n-0ED07B Compressed Size       0000080E (2062)\n-0ED07F Uncompressed Size     0000080E (2062)\n-\n-0ED083 LOCAL HEADER #398     04034B50 (67324752)\n-0ED087 Extract Zip Spec      14 (20) '2.0'\n-0ED088 Extract OS            00 (0) 'MS-DOS'\n-0ED089 General Purpose Flag  0000 (0)\n-0ED08B Compression Method    0000 (0) 'Stored'\n-0ED08D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ED091 CRC                   00000000 (0)\n-0ED095 Compressed Size       00000000 (0)\n-0ED099 Uncompressed Size     00000000 (0)\n-0ED09D Filename Length       005A (90)\n-0ED09F Extra Length          0009 (9)\n-0ED0A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xED0A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ED0FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ED0FD   Length              0005 (5)\n-0ED0FF   Flags               01 (1) 'Modification'\n-0ED100   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ED104 LOCAL HEADER #399     04034B50 (67324752)\n-0ED108 Extract Zip Spec      14 (20) '2.0'\n-0ED109 Extract OS            00 (0) 'MS-DOS'\n-0ED10A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0ED10C Compression Method    0000 (0) 'Stored'\n-0ED10E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ED112 CRC                   00000000 (0)\n-0ED116 Compressed Size       00000000 (0)\n-0ED11A Uncompressed Size     00000000 (0)\n-0ED11E Filename Length       0070 (112)\n-0ED120 Extra Length          0009 (9)\n-0ED122 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xED122: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ED192 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ED194   Length              0005 (5)\n-0ED196   Flags               01 (1) 'Modification'\n-0ED197   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0ED19B PAYLOAD\n-\n-0EEC20 DATA DESCRIPTOR       08074B50 (134695760)\n-0EEC24 CRC                   DB187B38 (3675814712)\n-0EEC28 Compressed Size       00001A85 (6789)\n-0EEC2C Uncompressed Size     00001A85 (6789)\n-\n-0EEC30 LOCAL HEADER #400     04034B50 (67324752)\n-0EEC34 Extract Zip Spec      14 (20) '2.0'\n-0EEC35 Extract OS            00 (0) 'MS-DOS'\n-0EEC36 General Purpose Flag  0000 (0)\n-0EEC38 Compression Method    0000 (0) 'Stored'\n-0EEC3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EEC3E CRC                   00000000 (0)\n-0EEC42 Compressed Size       00000000 (0)\n-0EEC46 Uncompressed Size     00000000 (0)\n-0EEC4A Filename Length       005B (91)\n-0EEC4C Extra Length          0009 (9)\n-0EEC4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEEC4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EECA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EECAB   Length              0005 (5)\n-0EECAD   Flags               01 (1) 'Modification'\n-0EECAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EECB2 LOCAL HEADER #401     04034B50 (67324752)\n-0EECB6 Extract Zip Spec      14 (20) '2.0'\n-0EECB7 Extract OS            00 (0) 'MS-DOS'\n-0EECB8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EECBA Compression Method    0000 (0) 'Stored'\n-0EECBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EECC0 CRC                   00000000 (0)\n-0EECC4 Compressed Size       00000000 (0)\n-0EECC8 Uncompressed Size     00000000 (0)\n-0EECCC Filename Length       0071 (113)\n-0EECCE Extra Length          0009 (9)\n-0EECD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEECD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EED41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EED43   Length              0005 (5)\n-0EED45   Flags               01 (1) 'Modification'\n-0EED46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EED4A PAYLOAD\n-\n-0F07B8 DATA DESCRIPTOR       08074B50 (134695760)\n-0F07BC CRC                   CD183667 (3440916071)\n-0F07C0 Compressed Size       00001A6E (6766)\n-0F07C4 Uncompressed Size     00001A6E (6766)\n-\n-0F07C8 LOCAL HEADER #402     04034B50 (67324752)\n-0F07CC Extract Zip Spec      14 (20) '2.0'\n-0F07CD Extract OS            00 (0) 'MS-DOS'\n-0F07CE General Purpose Flag  0000 (0)\n-0F07D0 Compression Method    0000 (0) 'Stored'\n-0F07D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F07D6 CRC                   00000000 (0)\n-0F07DA Compressed Size       00000000 (0)\n-0F07DE Uncompressed Size     00000000 (0)\n-0F07E2 Filename Length       005B (91)\n-0F07E4 Extra Length          0009 (9)\n-0F07E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF07E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F0841 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F0843   Length              0005 (5)\n-0F0845   Flags               01 (1) 'Modification'\n-0F0846   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F084A LOCAL HEADER #403     04034B50 (67324752)\n-0F084E Extract Zip Spec      14 (20) '2.0'\n-0F084F Extract OS            00 (0) 'MS-DOS'\n-0F0850 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F0852 Compression Method    0000 (0) 'Stored'\n-0F0854 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F0858 CRC                   00000000 (0)\n-0F085C Compressed Size       00000000 (0)\n-0F0860 Uncompressed Size     00000000 (0)\n-0F0864 Filename Length       0071 (113)\n-0F0866 Extra Length          0009 (9)\n-0F0868 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF0868: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F08D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F08DB   Length              0005 (5)\n-0F08DD   Flags               01 (1) 'Modification'\n-0F08DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F08E2 PAYLOAD\n-\n-0F2374 DATA DESCRIPTOR       08074B50 (134695760)\n-0F2378 CRC                   0C7DD276 (209572470)\n-0F237C Compressed Size       00001A92 (6802)\n-0F2380 Uncompressed Size     00001A92 (6802)\n-\n-0F2384 LOCAL HEADER #404     04034B50 (67324752)\n-0F2388 Extract Zip Spec      14 (20) '2.0'\n-0F2389 Extract OS            00 (0) 'MS-DOS'\n-0F238A General Purpose Flag  0000 (0)\n-0F238C Compression Method    0000 (0) 'Stored'\n-0F238E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F2392 CRC                   00000000 (0)\n-0F2396 Compressed Size       00000000 (0)\n-0F239A Uncompressed Size     00000000 (0)\n-0F239E Filename Length       005C (92)\n-0F23A0 Extra Length          0009 (9)\n-0F23A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF23A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F23FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F2400   Length              0005 (5)\n-0F2402   Flags               01 (1) 'Modification'\n-0F2403   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F2407 LOCAL HEADER #405     04034B50 (67324752)\n-0F240B Extract Zip Spec      14 (20) '2.0'\n-0F240C Extract OS            00 (0) 'MS-DOS'\n-0F240D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F240F Compression Method    0000 (0) 'Stored'\n-0F2411 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F2415 CRC                   00000000 (0)\n-0F2419 Compressed Size       00000000 (0)\n-0F241D Uncompressed Size     00000000 (0)\n-0F2421 Filename Length       0072 (114)\n-0F2423 Extra Length          0009 (9)\n-0F2425 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF2425: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F2497 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F2499   Length              0005 (5)\n-0F249B   Flags               01 (1) 'Modification'\n-0F249C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F24A0 PAYLOAD\n-\n-0F3BD3 DATA DESCRIPTOR       08074B50 (134695760)\n-0F3BD7 CRC                   60EA12C2 (1625952962)\n-0F3BDB Compressed Size       00001733 (5939)\n-0F3BDF Uncompressed Size     00001733 (5939)\n-\n-0F3BE3 LOCAL HEADER #406     04034B50 (67324752)\n-0F3BE7 Extract Zip Spec      14 (20) '2.0'\n-0F3BE8 Extract OS            00 (0) 'MS-DOS'\n-0F3BE9 General Purpose Flag  0000 (0)\n-0F3BEB Compression Method    0000 (0) 'Stored'\n-0F3BED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3BF1 CRC                   00000000 (0)\n-0F3BF5 Compressed Size       00000000 (0)\n-0F3BF9 Uncompressed Size     00000000 (0)\n-0F3BFD Filename Length       005F (95)\n-0F3BFF Extra Length          0009 (9)\n-0F3C01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF3C01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3C60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3C62   Length              0005 (5)\n-0F3C64   Flags               01 (1) 'Modification'\n-0F3C65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F3C69 LOCAL HEADER #407     04034B50 (67324752)\n-0F3C6D Extract Zip Spec      14 (20) '2.0'\n-0F3C6E Extract OS            00 (0) 'MS-DOS'\n-0F3C6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F3C71 Compression Method    0000 (0) 'Stored'\n-0F3C73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3C77 CRC                   00000000 (0)\n-0F3C7B Compressed Size       00000000 (0)\n-0F3C7F Uncompressed Size     00000000 (0)\n-0F3C83 Filename Length       0075 (117)\n-0F3C85 Extra Length          0009 (9)\n-0F3C87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF3C87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3CFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3CFE   Length              0005 (5)\n-0F3D00   Flags               01 (1) 'Modification'\n-0F3D01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F3D05 PAYLOAD\n-\n-0F5382 DATA DESCRIPTOR       08074B50 (134695760)\n-0F5386 CRC                   4BB1EABD (1269951165)\n-0F538A Compressed Size       0000167D (5757)\n-0F538E Uncompressed Size     0000167D (5757)\n-\n-0F5392 LOCAL HEADER #408     04034B50 (67324752)\n-0F5396 Extract Zip Spec      14 (20) '2.0'\n-0F5397 Extract OS            00 (0) 'MS-DOS'\n-0F5398 General Purpose Flag  0000 (0)\n-0F539A Compression Method    0000 (0) 'Stored'\n-0F539C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F53A0 CRC                   00000000 (0)\n-0F53A4 Compressed Size       00000000 (0)\n-0F53A8 Uncompressed Size     00000000 (0)\n-0F53AC Filename Length       005F (95)\n-0F53AE Extra Length          0009 (9)\n-0F53B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF53B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F540F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5411   Length              0005 (5)\n-0F5413   Flags               01 (1) 'Modification'\n-0F5414   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F5418 LOCAL HEADER #409     04034B50 (67324752)\n-0F541C Extract Zip Spec      14 (20) '2.0'\n-0F541D Extract OS            00 (0) 'MS-DOS'\n-0F541E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F5420 Compression Method    0000 (0) 'Stored'\n-0F5422 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5426 CRC                   00000000 (0)\n-0F542A Compressed Size       00000000 (0)\n-0F542E Uncompressed Size     00000000 (0)\n-0F5432 Filename Length       0075 (117)\n-0F5434 Extra Length          0009 (9)\n-0F5436 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5436: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F54AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F54AD   Length              0005 (5)\n-0F54AF   Flags               01 (1) 'Modification'\n-0F54B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F54B4 PAYLOAD\n-\n-0F873E DATA DESCRIPTOR       08074B50 (134695760)\n-0F8742 CRC                   A18A8EB9 (2710212281)\n-0F8746 Compressed Size       0000328A (12938)\n-0F874A Uncompressed Size     0000328A (12938)\n-\n-0F874E LOCAL HEADER #410     04034B50 (67324752)\n-0F8752 Extract Zip Spec      14 (20) '2.0'\n-0F8753 Extract OS            00 (0) 'MS-DOS'\n-0F8754 General Purpose Flag  0000 (0)\n-0F8756 Compression Method    0000 (0) 'Stored'\n-0F8758 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F875C CRC                   00000000 (0)\n-0F8760 Compressed Size       00000000 (0)\n-0F8764 Uncompressed Size     00000000 (0)\n-0F8768 Filename Length       005E (94)\n-0F876A Extra Length          0009 (9)\n-0F876C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF876C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F87CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F87CC   Length              0005 (5)\n-0F87CE   Flags               01 (1) 'Modification'\n-0F87CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F87D3 LOCAL HEADER #411     04034B50 (67324752)\n-0F87D7 Extract Zip Spec      14 (20) '2.0'\n-0F87D8 Extract OS            00 (0) 'MS-DOS'\n-0F87D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F87DB Compression Method    0000 (0) 'Stored'\n-0F87DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F87E1 CRC                   00000000 (0)\n-0F87E5 Compressed Size       00000000 (0)\n-0F87E9 Uncompressed Size     00000000 (0)\n-0F87ED Filename Length       0074 (116)\n-0F87EF Extra Length          0009 (9)\n-0F87F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF87F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F8865 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F8867   Length              0005 (5)\n-0F8869   Flags               01 (1) 'Modification'\n-0F886A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F886E PAYLOAD\n-\n-0FC0E7 DATA DESCRIPTOR       08074B50 (134695760)\n-0FC0EB CRC                   B7B762D6 (3082248918)\n-0FC0EF Compressed Size       00003879 (14457)\n-0FC0F3 Uncompressed Size     00003879 (14457)\n-\n-0FC0F7 LOCAL HEADER #412     04034B50 (67324752)\n-0FC0FB Extract Zip Spec      14 (20) '2.0'\n-0FC0FC Extract OS            00 (0) 'MS-DOS'\n-0FC0FD General Purpose Flag  0000 (0)\n-0FC0FF Compression Method    0000 (0) 'Stored'\n-0FC101 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FC105 CRC                   00000000 (0)\n-0FC109 Compressed Size       00000000 (0)\n-0FC10D Uncompressed Size     00000000 (0)\n-0FC111 Filename Length       0062 (98)\n-0FC113 Extra Length          0009 (9)\n-0FC115 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFC115: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FC177 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FC179   Length              0005 (5)\n-0FC17B   Flags               01 (1) 'Modification'\n-0FC17C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FC180 LOCAL HEADER #413     04034B50 (67324752)\n-0FC184 Extract Zip Spec      14 (20) '2.0'\n-0FC185 Extract OS            00 (0) 'MS-DOS'\n-0FC186 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FC188 Compression Method    0000 (0) 'Stored'\n-0FC18A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FC18E CRC                   00000000 (0)\n-0FC192 Compressed Size       00000000 (0)\n-0FC196 Uncompressed Size     00000000 (0)\n-0FC19A Filename Length       0078 (120)\n-0FC19C Extra Length          0009 (9)\n-0FC19E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFC19E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FC216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FC218   Length              0005 (5)\n-0FC21A   Flags               01 (1) 'Modification'\n-0FC21B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FC21F PAYLOAD\n-\n-0FE36F DATA DESCRIPTOR       08074B50 (134695760)\n-0FE373 CRC                   A2B9D29A (2730087066)\n-0FE377 Compressed Size       00002150 (8528)\n-0FE37B Uncompressed Size     00002150 (8528)\n-\n-0FE37F LOCAL HEADER #414     04034B50 (67324752)\n-0FE383 Extract Zip Spec      14 (20) '2.0'\n-0FE384 Extract OS            00 (0) 'MS-DOS'\n-0FE385 General Purpose Flag  0000 (0)\n-0FE387 Compression Method    0000 (0) 'Stored'\n-0FE389 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE38D CRC                   00000000 (0)\n-0FE391 Compressed Size       00000000 (0)\n-0FE395 Uncompressed Size     00000000 (0)\n-0FE399 Filename Length       005B (91)\n-0FE39B Extra Length          0009 (9)\n-0FE39D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE39D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE3F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE3FA   Length              0005 (5)\n-0FE3FC   Flags               01 (1) 'Modification'\n-0FE3FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FE401 LOCAL HEADER #415     04034B50 (67324752)\n-0FE405 Extract Zip Spec      14 (20) '2.0'\n-0FE406 Extract OS            00 (0) 'MS-DOS'\n-0FE407 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FE409 Compression Method    0000 (0) 'Stored'\n-0FE40B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE40F CRC                   00000000 (0)\n-0FE413 Compressed Size       00000000 (0)\n-0FE417 Uncompressed Size     00000000 (0)\n-0FE41B Filename Length       0071 (113)\n-0FE41D Extra Length          0009 (9)\n-0FE41F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE41F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE490 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE492   Length              0005 (5)\n-0FE494   Flags               01 (1) 'Modification'\n-0FE495   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FE499 PAYLOAD\n-\n-0FF675 DATA DESCRIPTOR       08074B50 (134695760)\n-0FF679 CRC                   C4FC7EA2 (3304881826)\n-0FF67D Compressed Size       000011DC (4572)\n-0FF681 Uncompressed Size     000011DC (4572)\n-\n-0FF685 LOCAL HEADER #416     04034B50 (67324752)\n-0FF689 Extract Zip Spec      14 (20) '2.0'\n-0FF68A Extract OS            00 (0) 'MS-DOS'\n-0FF68B General Purpose Flag  0000 (0)\n-0FF68D Compression Method    0000 (0) 'Stored'\n-0FF68F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF693 CRC                   00000000 (0)\n-0FF697 Compressed Size       00000000 (0)\n-0FF69B Uncompressed Size     00000000 (0)\n-0FF69F Filename Length       005E (94)\n-0FF6A1 Extra Length          0009 (9)\n-0FF6A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF6A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF703   Length              0005 (5)\n-0FF705   Flags               01 (1) 'Modification'\n-0FF706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FF70A LOCAL HEADER #417     04034B50 (67324752)\n-0FF70E Extract Zip Spec      14 (20) '2.0'\n-0FF70F Extract OS            00 (0) 'MS-DOS'\n-0FF710 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FF712 Compression Method    0000 (0) 'Stored'\n-0FF714 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF718 CRC                   00000000 (0)\n-0FF71C Compressed Size       00000000 (0)\n-0FF720 Uncompressed Size     00000000 (0)\n-0FF724 Filename Length       0074 (116)\n-0FF726 Extra Length          0009 (9)\n-0FF728 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF728: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF79C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF79E   Length              0005 (5)\n-0FF7A0   Flags               01 (1) 'Modification'\n-0FF7A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FF7A5 PAYLOAD\n-\n-106AA0 DATA DESCRIPTOR       08074B50 (134695760)\n-106AA4 CRC                   EE30A8D8 (3996166360)\n-106AA8 Compressed Size       000072FB (29435)\n-106AAC Uncompressed Size     000072FB (29435)\n-\n-106AB0 LOCAL HEADER #418     04034B50 (67324752)\n-106AB4 Extract Zip Spec      14 (20) '2.0'\n-106AB5 Extract OS            00 (0) 'MS-DOS'\n-106AB6 General Purpose Flag  0000 (0)\n-106AB8 Compression Method    0000 (0) 'Stored'\n-106ABA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106ABE CRC                   00000000 (0)\n-106AC2 Compressed Size       00000000 (0)\n-106AC6 Uncompressed Size     00000000 (0)\n-106ACA Filename Length       0063 (99)\n-106ACC Extra Length          0009 (9)\n-106ACE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106ACE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106B31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106B33   Length              0005 (5)\n-106B35   Flags               01 (1) 'Modification'\n-106B36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-106B3A LOCAL HEADER #419     04034B50 (67324752)\n-106B3E Extract Zip Spec      14 (20) '2.0'\n-106B3F Extract OS            00 (0) 'MS-DOS'\n-106B40 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-106B42 Compression Method    0000 (0) 'Stored'\n-106B44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106B48 CRC                   00000000 (0)\n-106B4C Compressed Size       00000000 (0)\n-106B50 Uncompressed Size     00000000 (0)\n-106B54 Filename Length       0079 (121)\n-106B56 Extra Length          0009 (9)\n-106B58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106B58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106BD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106BD3   Length              0005 (5)\n-106BD5   Flags               01 (1) 'Modification'\n-106BD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-106BDA PAYLOAD\n-\n-107390 DATA DESCRIPTOR       08074B50 (134695760)\n-107394 CRC                   CA474DE0 (3393670624)\n-107398 Compressed Size       000007B6 (1974)\n-10739C Uncompressed Size     000007B6 (1974)\n-\n-1073A0 LOCAL HEADER #420     04034B50 (67324752)\n-1073A4 Extract Zip Spec      14 (20) '2.0'\n-1073A5 Extract OS            00 (0) 'MS-DOS'\n-1073A6 General Purpose Flag  0000 (0)\n-1073A8 Compression Method    0000 (0) 'Stored'\n-1073AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1073AE CRC                   00000000 (0)\n-1073B2 Compressed Size       00000000 (0)\n-1073B6 Uncompressed Size     00000000 (0)\n-1073BA Filename Length       005F (95)\n-1073BC Extra Length          0009 (9)\n-1073BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1073BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10741D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10741F   Length              0005 (5)\n-107421   Flags               01 (1) 'Modification'\n-107422   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107426 LOCAL HEADER #421     04034B50 (67324752)\n-10742A Extract Zip Spec      14 (20) '2.0'\n-10742B Extract OS            00 (0) 'MS-DOS'\n-10742C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10742E Compression Method    0000 (0) 'Stored'\n-107430 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107434 CRC                   00000000 (0)\n-107438 Compressed Size       00000000 (0)\n-10743C Uncompressed Size     00000000 (0)\n-107440 Filename Length       0075 (117)\n-107442 Extra Length          0009 (9)\n-107444 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x107444: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1074B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1074BB   Length              0005 (5)\n-1074BD   Flags               01 (1) 'Modification'\n-1074BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1074C2 PAYLOAD\n-\n-10868D DATA DESCRIPTOR       08074B50 (134695760)\n-108691 CRC                   A19F99D4 (2711591380)\n-108695 Compressed Size       000011CB (4555)\n-108699 Uncompressed Size     000011CB (4555)\n-\n-10869D LOCAL HEADER #422     04034B50 (67324752)\n-1086A1 Extract Zip Spec      14 (20) '2.0'\n-1086A2 Extract OS            00 (0) 'MS-DOS'\n-1086A3 General Purpose Flag  0000 (0)\n-1086A5 Compression Method    0000 (0) 'Stored'\n-1086A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1086AB CRC                   00000000 (0)\n-1086AF Compressed Size       00000000 (0)\n-1086B3 Uncompressed Size     00000000 (0)\n-1086B7 Filename Length       005B (91)\n-1086B9 Extra Length          0009 (9)\n-1086BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1086BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-108716 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108718   Length              0005 (5)\n-10871A   Flags               01 (1) 'Modification'\n-10871B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10871F LOCAL HEADER #423     04034B50 (67324752)\n-108723 Extract Zip Spec      14 (20) '2.0'\n-108724 Extract OS            00 (0) 'MS-DOS'\n-108725 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-108727 Compression Method    0000 (0) 'Stored'\n-108729 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10872D CRC                   00000000 (0)\n-108731 Compressed Size       00000000 (0)\n-108735 Uncompressed Size     00000000 (0)\n-108739 Filename Length       0071 (113)\n-10873B Extra Length          0009 (9)\n-10873D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10873D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1087AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1087B0   Length              0005 (5)\n-1087B2   Flags               01 (1) 'Modification'\n-1087B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1087B7 PAYLOAD\n-\n-10B006 DATA DESCRIPTOR       08074B50 (134695760)\n-10B00A CRC                   7573E84B (1970530379)\n-10B00E Compressed Size       0000284F (10319)\n-10B012 Uncompressed Size     0000284F (10319)\n-\n-10B016 LOCAL HEADER #424     04034B50 (67324752)\n-10B01A Extract Zip Spec      14 (20) '2.0'\n-10B01B Extract OS            00 (0) 'MS-DOS'\n-10B01C General Purpose Flag  0000 (0)\n-10B01E Compression Method    0000 (0) 'Stored'\n-10B020 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10B024 CRC                   00000000 (0)\n-10B028 Compressed Size       00000000 (0)\n-10B02C Uncompressed Size     00000000 (0)\n-10B030 Filename Length       005F (95)\n-10B032 Extra Length          0009 (9)\n-10B034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10B034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10B093 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10B095   Length              0005 (5)\n-10B097   Flags               01 (1) 'Modification'\n-10B098   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10B09C LOCAL HEADER #425     04034B50 (67324752)\n-10B0A0 Extract Zip Spec      14 (20) '2.0'\n-10B0A1 Extract OS            00 (0) 'MS-DOS'\n-10B0A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10B0A4 Compression Method    0000 (0) 'Stored'\n-10B0A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10B0AA CRC                   00000000 (0)\n-10B0AE Compressed Size       00000000 (0)\n-10B0B2 Uncompressed Size     00000000 (0)\n-10B0B6 Filename Length       0075 (117)\n-10B0B8 Extra Length          0009 (9)\n-10B0BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10B0BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10B12F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10B131   Length              0005 (5)\n-10B133   Flags               01 (1) 'Modification'\n-10B134   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10B138 PAYLOAD\n-\n-10D8AF DATA DESCRIPTOR       08074B50 (134695760)\n-10D8B3 CRC                   131CB9D8 (320649688)\n-10D8B7 Compressed Size       00002777 (10103)\n-10D8BB Uncompressed Size     00002777 (10103)\n-\n-10D8BF LOCAL HEADER #426     04034B50 (67324752)\n-10D8C3 Extract Zip Spec      14 (20) '2.0'\n-10D8C4 Extract OS            00 (0) 'MS-DOS'\n-10D8C5 General Purpose Flag  0000 (0)\n-10D8C7 Compression Method    0000 (0) 'Stored'\n-10D8C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10D8CD CRC                   00000000 (0)\n-10D8D1 Compressed Size       00000000 (0)\n-10D8D5 Uncompressed Size     00000000 (0)\n-10D8D9 Filename Length       005E (94)\n-10D8DB Extra Length          0009 (9)\n-10D8DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10D8DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10D93B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10D93D   Length              0005 (5)\n-10D93F   Flags               01 (1) 'Modification'\n-10D940   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10D944 LOCAL HEADER #427     04034B50 (67324752)\n-10D948 Extract Zip Spec      14 (20) '2.0'\n-10D949 Extract OS            00 (0) 'MS-DOS'\n-10D94A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10D94C Compression Method    0000 (0) 'Stored'\n-10D94E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10D952 CRC                   00000000 (0)\n-10D956 Compressed Size       00000000 (0)\n-10D95A Uncompressed Size     00000000 (0)\n-10D95E Filename Length       0074 (116)\n-10D960 Extra Length          0009 (9)\n-10D962 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10D962: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10D9D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10D9D8   Length              0005 (5)\n-10D9DA   Flags               01 (1) 'Modification'\n-10D9DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10D9DF PAYLOAD\n-\n-10EAEC DATA DESCRIPTOR       08074B50 (134695760)\n-10EAF0 CRC                   95FAB1DA (2516234714)\n-10EAF4 Compressed Size       0000110D (4365)\n-10EAF8 Uncompressed Size     0000110D (4365)\n-\n-10EAFC LOCAL HEADER #428     04034B50 (67324752)\n-10EB00 Extract Zip Spec      14 (20) '2.0'\n-10EB01 Extract OS            00 (0) 'MS-DOS'\n-10EB02 General Purpose Flag  0000 (0)\n-10EB04 Compression Method    0000 (0) 'Stored'\n-10EB06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10EB0A CRC                   00000000 (0)\n-10EB0E Compressed Size       00000000 (0)\n-10EB12 Uncompressed Size     00000000 (0)\n-10EB16 Filename Length       0061 (97)\n-10EB18 Extra Length          0009 (9)\n-10EB1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10EB1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10EB7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10EB7D   Length              0005 (5)\n-10EB7F   Flags               01 (1) 'Modification'\n-10EB80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10EB84 LOCAL HEADER #429     04034B50 (67324752)\n-10EB88 Extract Zip Spec      14 (20) '2.0'\n-10EB89 Extract OS            00 (0) 'MS-DOS'\n-10EB8A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10EB8C Compression Method    0000 (0) 'Stored'\n-10EB8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10EB92 CRC                   00000000 (0)\n-10EB96 Compressed Size       00000000 (0)\n-10EB9A Uncompressed Size     00000000 (0)\n-10EB9E Filename Length       0077 (119)\n-10EBA0 Extra Length          0009 (9)\n-10EBA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10EBA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10EC19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10EC1B   Length              0005 (5)\n-10EC1D   Flags               01 (1) 'Modification'\n-10EC1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10EC22 PAYLOAD\n-\n-1105F8 DATA DESCRIPTOR       08074B50 (134695760)\n-1105FC CRC                   B1E82858 (2984781912)\n-110600 Compressed Size       000019D6 (6614)\n-110604 Uncompressed Size     000019D6 (6614)\n-\n-110608 LOCAL HEADER #430     04034B50 (67324752)\n-11060C Extract Zip Spec      14 (20) '2.0'\n-11060D Extract OS            00 (0) 'MS-DOS'\n-11060E General Purpose Flag  0000 (0)\n-110610 Compression Method    0000 (0) 'Stored'\n-110612 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-110616 CRC                   00000000 (0)\n-11061A Compressed Size       00000000 (0)\n-11061E Uncompressed Size     00000000 (0)\n-110622 Filename Length       005E (94)\n-110624 Extra Length          0009 (9)\n-110626 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x110626: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-110684 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-110686   Length              0005 (5)\n-110688   Flags               01 (1) 'Modification'\n-110689   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11068D LOCAL HEADER #431     04034B50 (67324752)\n-110691 Extract Zip Spec      14 (20) '2.0'\n-110692 Extract OS            00 (0) 'MS-DOS'\n-110693 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-110695 Compression Method    0000 (0) 'Stored'\n-110697 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11069B CRC                   00000000 (0)\n-11069F Compressed Size       00000000 (0)\n-1106A3 Uncompressed Size     00000000 (0)\n-1106A7 Filename Length       0074 (116)\n-1106A9 Extra Length          0009 (9)\n-1106AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1106AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11071F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-110721   Length              0005 (5)\n-110723   Flags               01 (1) 'Modification'\n-110724   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-110728 PAYLOAD\n-\n-1116A6 DATA DESCRIPTOR       08074B50 (134695760)\n-1116AA CRC                   EA13965E (3927152222)\n-1116AE Compressed Size       00000F7E (3966)\n-1116B2 Uncompressed Size     00000F7E (3966)\n-\n-1116B6 LOCAL HEADER #432     04034B50 (67324752)\n-1116BA Extract Zip Spec      14 (20) '2.0'\n-1116BB Extract OS            00 (0) 'MS-DOS'\n-1116BC General Purpose Flag  0000 (0)\n-1116BE Compression Method    0000 (0) 'Stored'\n-1116C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1116C4 CRC                   00000000 (0)\n-1116C8 Compressed Size       00000000 (0)\n-1116CC Uncompressed Size     00000000 (0)\n-1116D0 Filename Length       0057 (87)\n-1116D2 Extra Length          0009 (9)\n-1116D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1116D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11172B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11172D   Length              0005 (5)\n-11172F   Flags               01 (1) 'Modification'\n-111730   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-111734 LOCAL HEADER #433     04034B50 (67324752)\n-111738 Extract Zip Spec      14 (20) '2.0'\n-111739 Extract OS            00 (0) 'MS-DOS'\n-11173A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11173C Compression Method    0000 (0) 'Stored'\n-11173E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-111742 CRC                   00000000 (0)\n-111746 Compressed Size       00000000 (0)\n-11174A Uncompressed Size     00000000 (0)\n-11174E Filename Length       006D (109)\n-111750 Extra Length          0009 (9)\n-111752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x111752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1117BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1117C1   Length              0005 (5)\n-1117C3   Flags               01 (1) 'Modification'\n-1117C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1117C8 PAYLOAD\n-\n-11449E DATA DESCRIPTOR       08074B50 (134695760)\n-1144A2 CRC                   C8903588 (3364894088)\n-1144A6 Compressed Size       00002CD6 (11478)\n-1144AA Uncompressed Size     00002CD6 (11478)\n-\n-1144AE LOCAL HEADER #434     04034B50 (67324752)\n-1144B2 Extract Zip Spec      14 (20) '2.0'\n-1144B3 Extract OS            00 (0) 'MS-DOS'\n-1144B4 General Purpose Flag  0000 (0)\n-1144B6 Compression Method    0000 (0) 'Stored'\n-1144B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1144BC CRC                   00000000 (0)\n-1144C0 Compressed Size       00000000 (0)\n-1144C4 Uncompressed Size     00000000 (0)\n-1144C8 Filename Length       0068 (104)\n-1144CA Extra Length          0009 (9)\n-1144CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1144CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-114534 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-114536   Length              0005 (5)\n-114538   Flags               01 (1) 'Modification'\n-114539   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11453D LOCAL HEADER #435     04034B50 (67324752)\n-114541 Extract Zip Spec      14 (20) '2.0'\n-114542 Extract OS            00 (0) 'MS-DOS'\n-114543 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-114545 Compression Method    0000 (0) 'Stored'\n-114547 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11454B CRC                   00000000 (0)\n-11454F Compressed Size       00000000 (0)\n-114553 Uncompressed Size     00000000 (0)\n-114557 Filename Length       007E (126)\n-114559 Extra Length          0009 (9)\n-11455B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11455B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1145D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1145DB   Length              0005 (5)\n-1145DD   Flags               01 (1) 'Modification'\n-1145DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1145E2 PAYLOAD\n-\n-115011 DATA DESCRIPTOR       08074B50 (134695760)\n-115015 CRC                   D19560D0 (3516227792)\n-115019 Compressed Size       00000A2F (2607)\n-11501D Uncompressed Size     00000A2F (2607)\n-\n-115021 LOCAL HEADER #436     04034B50 (67324752)\n-115025 Extract Zip Spec      14 (20) '2.0'\n-115026 Extract OS            00 (0) 'MS-DOS'\n-115027 General Purpose Flag  0000 (0)\n-115029 Compression Method    0000 (0) 'Stored'\n-11502B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11502F CRC                   00000000 (0)\n-115033 Compressed Size       00000000 (0)\n-115037 Uncompressed Size     00000000 (0)\n-11503B Filename Length       0032 (50)\n-11503D Extra Length          0009 (9)\n-11503F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11503F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-115071 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-115073   Length              0005 (5)\n-115075   Flags               01 (1) 'Modification'\n-115076   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11507A LOCAL HEADER #437     04034B50 (67324752)\n-11507E Extract Zip Spec      14 (20) '2.0'\n-11507F Extract OS            00 (0) 'MS-DOS'\n-115080 General Purpose Flag  0000 (0)\n-115082 Compression Method    0000 (0) 'Stored'\n-115084 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-115088 CRC                   00000000 (0)\n-11508C Compressed Size       00000000 (0)\n-115090 Uncompressed Size     00000000 (0)\n-115094 Filename Length       0039 (57)\n-115096 Extra Length          0009 (9)\n-115098 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x115098: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1150D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1150D3   Length              0005 (5)\n-1150D5   Flags               01 (1) 'Modification'\n-1150D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1150DA LOCAL HEADER #438     04034B50 (67324752)\n-1150DE Extract Zip Spec      14 (20) '2.0'\n-1150DF Extract OS            00 (0) 'MS-DOS'\n-1150E0 General Purpose Flag  0000 (0)\n-1150E2 Compression Method    0000 (0) 'Stored'\n-1150E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1150E8 CRC                   00000000 (0)\n-1150EC Compressed Size       00000000 (0)\n-1150F0 Uncompressed Size     00000000 (0)\n-1150F4 Filename Length       006F (111)\n-1150F6 Extra Length          0009 (9)\n-1150F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1150F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-115167 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-115169   Length              0005 (5)\n-11516B   Flags               01 (1) 'Modification'\n-11516C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-115170 LOCAL HEADER #439     04034B50 (67324752)\n-115174 Extract Zip Spec      14 (20) '2.0'\n-115175 Extract OS            00 (0) 'MS-DOS'\n-115176 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-115178 Compression Method    0000 (0) 'Stored'\n-11517A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11517E CRC                   00000000 (0)\n-115182 Compressed Size       00000000 (0)\n-115186 Uncompressed Size     00000000 (0)\n-11518A Filename Length       0085 (133)\n-11518C Extra Length          0009 (9)\n-11518E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0CE279 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE27B   Length              0005 (5)\n+0CE27D   Flags               01 (1) 'Modification'\n+0CE27E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE282 PAYLOAD\n+\n+0CF92C DATA DESCRIPTOR       08074B50 (134695760)\n+0CF930 CRC                   3DE98548 (1038714184)\n+0CF934 Compressed Size       000016AA (5802)\n+0CF938 Uncompressed Size     000016AA (5802)\n+\n+0CF93C LOCAL HEADER #328     04034B50 (67324752)\n+0CF940 Extract Zip Spec      14 (20) '2.0'\n+0CF941 Extract OS            00 (0) 'MS-DOS'\n+0CF942 General Purpose Flag  0000 (0)\n+0CF944 Compression Method    0000 (0) 'Stored'\n+0CF946 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF94A CRC                   00000000 (0)\n+0CF94E Compressed Size       00000000 (0)\n+0CF952 Uncompressed Size     00000000 (0)\n+0CF956 Filename Length       0024 (36)\n+0CF958 Extra Length          0009 (9)\n+0CF95A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF95A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF97E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF980   Length              0005 (5)\n+0CF982   Flags               01 (1) 'Modification'\n+0CF983   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CF987 LOCAL HEADER #329     04034B50 (67324752)\n+0CF98B Extract Zip Spec      14 (20) '2.0'\n+0CF98C Extract OS            00 (0) 'MS-DOS'\n+0CF98D General Purpose Flag  0000 (0)\n+0CF98F Compression Method    0000 (0) 'Stored'\n+0CF991 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF995 CRC                   00000000 (0)\n+0CF999 Compressed Size       00000000 (0)\n+0CF99D Uncompressed Size     00000000 (0)\n+0CF9A1 Filename Length       002B (43)\n+0CF9A3 Extra Length          0009 (9)\n+0CF9A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF9A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF9D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF9D2   Length              0005 (5)\n+0CF9D4   Flags               01 (1) 'Modification'\n+0CF9D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CF9D9 LOCAL HEADER #330     04034B50 (67324752)\n+0CF9DD Extract Zip Spec      14 (20) '2.0'\n+0CF9DE Extract OS            00 (0) 'MS-DOS'\n+0CF9DF General Purpose Flag  0000 (0)\n+0CF9E1 Compression Method    0000 (0) 'Stored'\n+0CF9E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF9E7 CRC                   00000000 (0)\n+0CF9EB Compressed Size       00000000 (0)\n+0CF9EF Uncompressed Size     00000000 (0)\n+0CF9F3 Filename Length       0056 (86)\n+0CF9F5 Extra Length          0009 (9)\n+0CF9F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF9F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CFA4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CFA4F   Length              0005 (5)\n+0CFA51   Flags               01 (1) 'Modification'\n+0CFA52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CFA56 LOCAL HEADER #331     04034B50 (67324752)\n+0CFA5A Extract Zip Spec      14 (20) '2.0'\n+0CFA5B Extract OS            00 (0) 'MS-DOS'\n+0CFA5C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CFA5E Compression Method    0000 (0) 'Stored'\n+0CFA60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CFA64 CRC                   00000000 (0)\n+0CFA68 Compressed Size       00000000 (0)\n+0CFA6C Uncompressed Size     00000000 (0)\n+0CFA70 Filename Length       006C (108)\n+0CFA72 Extra Length          0009 (9)\n+0CFA74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCFA74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CFAE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CFAE2   Length              0005 (5)\n+0CFAE4   Flags               01 (1) 'Modification'\n+0CFAE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CFAE9 PAYLOAD\n+\n+0D107E DATA DESCRIPTOR       08074B50 (134695760)\n+0D1082 CRC                   F32265E7 (4079117799)\n+0D1086 Compressed Size       00001595 (5525)\n+0D108A Uncompressed Size     00001595 (5525)\n+\n+0D108E LOCAL HEADER #332     04034B50 (67324752)\n+0D1092 Extract Zip Spec      14 (20) '2.0'\n+0D1093 Extract OS            00 (0) 'MS-DOS'\n+0D1094 General Purpose Flag  0000 (0)\n+0D1096 Compression Method    0000 (0) 'Stored'\n+0D1098 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D109C CRC                   00000000 (0)\n+0D10A0 Compressed Size       00000000 (0)\n+0D10A4 Uncompressed Size     00000000 (0)\n+0D10A8 Filename Length       0055 (85)\n+0D10AA Extra Length          0009 (9)\n+0D10AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD10AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1101 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1103   Length              0005 (5)\n+0D1105   Flags               01 (1) 'Modification'\n+0D1106   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D110A LOCAL HEADER #333     04034B50 (67324752)\n+0D110E Extract Zip Spec      14 (20) '2.0'\n+0D110F Extract OS            00 (0) 'MS-DOS'\n+0D1110 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D1112 Compression Method    0000 (0) 'Stored'\n+0D1114 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D1118 CRC                   00000000 (0)\n+0D111C Compressed Size       00000000 (0)\n+0D1120 Uncompressed Size     00000000 (0)\n+0D1124 Filename Length       006B (107)\n+0D1126 Extra Length          0009 (9)\n+0D1128 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1128: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1193 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1195   Length              0005 (5)\n+0D1197   Flags               01 (1) 'Modification'\n+0D1198   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D119C PAYLOAD\n+\n+0D1C97 DATA DESCRIPTOR       08074B50 (134695760)\n+0D1C9B CRC                   62A57B9F (1655012255)\n+0D1C9F Compressed Size       00000AFB (2811)\n+0D1CA3 Uncompressed Size     00000AFB (2811)\n+\n+0D1CA7 LOCAL HEADER #334     04034B50 (67324752)\n+0D1CAB Extract Zip Spec      14 (20) '2.0'\n+0D1CAC Extract OS            00 (0) 'MS-DOS'\n+0D1CAD General Purpose Flag  0000 (0)\n+0D1CAF Compression Method    0000 (0) 'Stored'\n+0D1CB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D1CB5 CRC                   00000000 (0)\n+0D1CB9 Compressed Size       00000000 (0)\n+0D1CBD Uncompressed Size     00000000 (0)\n+0D1CC1 Filename Length       0023 (35)\n+0D1CC3 Extra Length          0009 (9)\n+0D1CC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1CC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1CE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1CEA   Length              0005 (5)\n+0D1CEC   Flags               01 (1) 'Modification'\n+0D1CED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D1CF1 LOCAL HEADER #335     04034B50 (67324752)\n+0D1CF5 Extract Zip Spec      14 (20) '2.0'\n+0D1CF6 Extract OS            00 (0) 'MS-DOS'\n+0D1CF7 General Purpose Flag  0000 (0)\n+0D1CF9 Compression Method    0000 (0) 'Stored'\n+0D1CFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D1CFF CRC                   00000000 (0)\n+0D1D03 Compressed Size       00000000 (0)\n+0D1D07 Uncompressed Size     00000000 (0)\n+0D1D0B Filename Length       002A (42)\n+0D1D0D Extra Length          0009 (9)\n+0D1D0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1D0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1D39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1D3B   Length              0005 (5)\n+0D1D3D   Flags               01 (1) 'Modification'\n+0D1D3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D1D42 LOCAL HEADER #336     04034B50 (67324752)\n+0D1D46 Extract Zip Spec      14 (20) '2.0'\n+0D1D47 Extract OS            00 (0) 'MS-DOS'\n+0D1D48 General Purpose Flag  0000 (0)\n+0D1D4A Compression Method    0000 (0) 'Stored'\n+0D1D4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D1D50 CRC                   00000000 (0)\n+0D1D54 Compressed Size       00000000 (0)\n+0D1D58 Uncompressed Size     00000000 (0)\n+0D1D5C Filename Length       0052 (82)\n+0D1D5E Extra Length          0009 (9)\n+0D1D60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1D60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1DB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1DB4   Length              0005 (5)\n+0D1DB6   Flags               01 (1) 'Modification'\n+0D1DB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D1DBB LOCAL HEADER #337     04034B50 (67324752)\n+0D1DBF Extract Zip Spec      14 (20) '2.0'\n+0D1DC0 Extract OS            00 (0) 'MS-DOS'\n+0D1DC1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D1DC3 Compression Method    0000 (0) 'Stored'\n+0D1DC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D1DC9 CRC                   00000000 (0)\n+0D1DCD Compressed Size       00000000 (0)\n+0D1DD1 Uncompressed Size     00000000 (0)\n+0D1DD5 Filename Length       0068 (104)\n+0D1DD7 Extra Length          0009 (9)\n+0D1DD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1DD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1E41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1E43   Length              0005 (5)\n+0D1E45   Flags               01 (1) 'Modification'\n+0D1E46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D1E4A PAYLOAD\n+\n+0D2B42 DATA DESCRIPTOR       08074B50 (134695760)\n+0D2B46 CRC                   63C353AF (1673745327)\n+0D2B4A Compressed Size       00000CF8 (3320)\n+0D2B4E Uncompressed Size     00000CF8 (3320)\n+\n+0D2B52 LOCAL HEADER #338     04034B50 (67324752)\n+0D2B56 Extract Zip Spec      14 (20) '2.0'\n+0D2B57 Extract OS            00 (0) 'MS-DOS'\n+0D2B58 General Purpose Flag  0000 (0)\n+0D2B5A Compression Method    0000 (0) 'Stored'\n+0D2B5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2B60 CRC                   00000000 (0)\n+0D2B64 Compressed Size       00000000 (0)\n+0D2B68 Uncompressed Size     00000000 (0)\n+0D2B6C Filename Length       0059 (89)\n+0D2B6E Extra Length          0009 (9)\n+0D2B70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2B70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2BC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2BCB   Length              0005 (5)\n+0D2BCD   Flags               01 (1) 'Modification'\n+0D2BCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D2BD2 LOCAL HEADER #339     04034B50 (67324752)\n+0D2BD6 Extract Zip Spec      14 (20) '2.0'\n+0D2BD7 Extract OS            00 (0) 'MS-DOS'\n+0D2BD8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D2BDA Compression Method    0000 (0) 'Stored'\n+0D2BDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2BE0 CRC                   00000000 (0)\n+0D2BE4 Compressed Size       00000000 (0)\n+0D2BE8 Uncompressed Size     00000000 (0)\n+0D2BEC Filename Length       006F (111)\n+0D2BEE Extra Length          0009 (9)\n+0D2BF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2BF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2C5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2C61   Length              0005 (5)\n+0D2C63   Flags               01 (1) 'Modification'\n+0D2C64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D2C68 PAYLOAD\n+\n+0D338B DATA DESCRIPTOR       08074B50 (134695760)\n+0D338F CRC                   C64481A5 (3326378405)\n+0D3393 Compressed Size       00000723 (1827)\n+0D3397 Uncompressed Size     00000723 (1827)\n+\n+0D339B LOCAL HEADER #340     04034B50 (67324752)\n+0D339F Extract Zip Spec      14 (20) '2.0'\n+0D33A0 Extract OS            00 (0) 'MS-DOS'\n+0D33A1 General Purpose Flag  0000 (0)\n+0D33A3 Compression Method    0000 (0) 'Stored'\n+0D33A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D33A9 CRC                   00000000 (0)\n+0D33AD Compressed Size       00000000 (0)\n+0D33B1 Uncompressed Size     00000000 (0)\n+0D33B5 Filename Length       0057 (87)\n+0D33B7 Extra Length          0009 (9)\n+0D33B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD33B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D3410 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D3412   Length              0005 (5)\n+0D3414   Flags               01 (1) 'Modification'\n+0D3415   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D3419 LOCAL HEADER #341     04034B50 (67324752)\n+0D341D Extract Zip Spec      14 (20) '2.0'\n+0D341E Extract OS            00 (0) 'MS-DOS'\n+0D341F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D3421 Compression Method    0000 (0) 'Stored'\n+0D3423 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3427 CRC                   00000000 (0)\n+0D342B Compressed Size       00000000 (0)\n+0D342F Uncompressed Size     00000000 (0)\n+0D3433 Filename Length       006D (109)\n+0D3435 Extra Length          0009 (9)\n+0D3437 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3437: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D34A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D34A6   Length              0005 (5)\n+0D34A8   Flags               01 (1) 'Modification'\n+0D34A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D34AD PAYLOAD\n+\n+0D3B8F DATA DESCRIPTOR       08074B50 (134695760)\n+0D3B93 CRC                   39649106 (962892038)\n+0D3B97 Compressed Size       000006E2 (1762)\n+0D3B9B Uncompressed Size     000006E2 (1762)\n+\n+0D3B9F LOCAL HEADER #342     04034B50 (67324752)\n+0D3BA3 Extract Zip Spec      14 (20) '2.0'\n+0D3BA4 Extract OS            00 (0) 'MS-DOS'\n+0D3BA5 General Purpose Flag  0000 (0)\n+0D3BA7 Compression Method    0000 (0) 'Stored'\n+0D3BA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3BAD CRC                   00000000 (0)\n+0D3BB1 Compressed Size       00000000 (0)\n+0D3BB5 Uncompressed Size     00000000 (0)\n+0D3BB9 Filename Length       0052 (82)\n+0D3BBB Extra Length          0009 (9)\n+0D3BBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3BBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D3C0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D3C11   Length              0005 (5)\n+0D3C13   Flags               01 (1) 'Modification'\n+0D3C14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D3C18 LOCAL HEADER #343     04034B50 (67324752)\n+0D3C1C Extract Zip Spec      14 (20) '2.0'\n+0D3C1D Extract OS            00 (0) 'MS-DOS'\n+0D3C1E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D3C20 Compression Method    0000 (0) 'Stored'\n+0D3C22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3C26 CRC                   00000000 (0)\n+0D3C2A Compressed Size       00000000 (0)\n+0D3C2E Uncompressed Size     00000000 (0)\n+0D3C32 Filename Length       0068 (104)\n+0D3C34 Extra Length          0009 (9)\n+0D3C36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3C36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D3C9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D3CA0   Length              0005 (5)\n+0D3CA2   Flags               01 (1) 'Modification'\n+0D3CA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D3CA7 PAYLOAD\n+\n+0D4429 DATA DESCRIPTOR       08074B50 (134695760)\n+0D442D CRC                   8DC8B44C (2378740812)\n+0D4431 Compressed Size       00000782 (1922)\n+0D4435 Uncompressed Size     00000782 (1922)\n+\n+0D4439 LOCAL HEADER #344     04034B50 (67324752)\n+0D443D Extract Zip Spec      14 (20) '2.0'\n+0D443E Extract OS            00 (0) 'MS-DOS'\n+0D443F General Purpose Flag  0000 (0)\n+0D4441 Compression Method    0000 (0) 'Stored'\n+0D4443 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D4447 CRC                   00000000 (0)\n+0D444B Compressed Size       00000000 (0)\n+0D444F Uncompressed Size     00000000 (0)\n+0D4453 Filename Length       0023 (35)\n+0D4455 Extra Length          0009 (9)\n+0D4457 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD4457: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D447A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D447C   Length              0005 (5)\n+0D447E   Flags               01 (1) 'Modification'\n+0D447F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D4483 LOCAL HEADER #345     04034B50 (67324752)\n+0D4487 Extract Zip Spec      14 (20) '2.0'\n+0D4488 Extract OS            00 (0) 'MS-DOS'\n+0D4489 General Purpose Flag  0000 (0)\n+0D448B Compression Method    0000 (0) 'Stored'\n+0D448D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D4491 CRC                   00000000 (0)\n+0D4495 Compressed Size       00000000 (0)\n+0D4499 Uncompressed Size     00000000 (0)\n+0D449D Filename Length       002A (42)\n+0D449F Extra Length          0009 (9)\n+0D44A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD44A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D44CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D44CD   Length              0005 (5)\n+0D44CF   Flags               01 (1) 'Modification'\n+0D44D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D44D4 LOCAL HEADER #346     04034B50 (67324752)\n+0D44D8 Extract Zip Spec      14 (20) '2.0'\n+0D44D9 Extract OS            00 (0) 'MS-DOS'\n+0D44DA General Purpose Flag  0000 (0)\n+0D44DC Compression Method    0000 (0) 'Stored'\n+0D44DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D44E2 CRC                   00000000 (0)\n+0D44E6 Compressed Size       00000000 (0)\n+0D44EA Uncompressed Size     00000000 (0)\n+0D44EE Filename Length       0052 (82)\n+0D44F0 Extra Length          0009 (9)\n+0D44F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD44F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D4544 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D4546   Length              0005 (5)\n+0D4548   Flags               01 (1) 'Modification'\n+0D4549   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D454D LOCAL HEADER #347     04034B50 (67324752)\n+0D4551 Extract Zip Spec      14 (20) '2.0'\n+0D4552 Extract OS            00 (0) 'MS-DOS'\n+0D4553 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D4555 Compression Method    0000 (0) 'Stored'\n+0D4557 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D455B CRC                   00000000 (0)\n+0D455F Compressed Size       00000000 (0)\n+0D4563 Uncompressed Size     00000000 (0)\n+0D4567 Filename Length       0068 (104)\n+0D4569 Extra Length          0009 (9)\n+0D456B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD456B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D45D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D45D5   Length              0005 (5)\n+0D45D7   Flags               01 (1) 'Modification'\n+0D45D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D45DC PAYLOAD\n+\n+0D4EF0 DATA DESCRIPTOR       08074B50 (134695760)\n+0D4EF4 CRC                   605D4301 (1616724737)\n+0D4EF8 Compressed Size       00000914 (2324)\n+0D4EFC Uncompressed Size     00000914 (2324)\n+\n+0D4F00 LOCAL HEADER #348     04034B50 (67324752)\n+0D4F04 Extract Zip Spec      14 (20) '2.0'\n+0D4F05 Extract OS            00 (0) 'MS-DOS'\n+0D4F06 General Purpose Flag  0000 (0)\n+0D4F08 Compression Method    0000 (0) 'Stored'\n+0D4F0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D4F0E CRC                   00000000 (0)\n+0D4F12 Compressed Size       00000000 (0)\n+0D4F16 Uncompressed Size     00000000 (0)\n+0D4F1A Filename Length       005F (95)\n+0D4F1C Extra Length          0009 (9)\n+0D4F1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD4F1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D4F7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D4F7F   Length              0005 (5)\n+0D4F81   Flags               01 (1) 'Modification'\n+0D4F82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D4F86 LOCAL HEADER #349     04034B50 (67324752)\n+0D4F8A Extract Zip Spec      14 (20) '2.0'\n+0D4F8B Extract OS            00 (0) 'MS-DOS'\n+0D4F8C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D4F8E Compression Method    0000 (0) 'Stored'\n+0D4F90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D4F94 CRC                   00000000 (0)\n+0D4F98 Compressed Size       00000000 (0)\n+0D4F9C Uncompressed Size     00000000 (0)\n+0D4FA0 Filename Length       0075 (117)\n+0D4FA2 Extra Length          0009 (9)\n+0D4FA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD4FA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D5019 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D501B   Length              0005 (5)\n+0D501D   Flags               01 (1) 'Modification'\n+0D501E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D5022 PAYLOAD\n+\n+0D57C7 DATA DESCRIPTOR       08074B50 (134695760)\n+0D57CB CRC                   A64E298E (2790140302)\n+0D57CF Compressed Size       000007A5 (1957)\n+0D57D3 Uncompressed Size     000007A5 (1957)\n+\n+0D57D7 LOCAL HEADER #350     04034B50 (67324752)\n+0D57DB Extract Zip Spec      14 (20) '2.0'\n+0D57DC Extract OS            00 (0) 'MS-DOS'\n+0D57DD General Purpose Flag  0000 (0)\n+0D57DF Compression Method    0000 (0) 'Stored'\n+0D57E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D57E5 CRC                   00000000 (0)\n+0D57E9 Compressed Size       00000000 (0)\n+0D57ED Uncompressed Size     00000000 (0)\n+0D57F1 Filename Length       0058 (88)\n+0D57F3 Extra Length          0009 (9)\n+0D57F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD57F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D584D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D584F   Length              0005 (5)\n+0D5851   Flags               01 (1) 'Modification'\n+0D5852   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D5856 LOCAL HEADER #351     04034B50 (67324752)\n+0D585A Extract Zip Spec      14 (20) '2.0'\n+0D585B Extract OS            00 (0) 'MS-DOS'\n+0D585C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D585E Compression Method    0000 (0) 'Stored'\n+0D5860 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D5864 CRC                   00000000 (0)\n+0D5868 Compressed Size       00000000 (0)\n+0D586C Uncompressed Size     00000000 (0)\n+0D5870 Filename Length       006E (110)\n+0D5872 Extra Length          0009 (9)\n+0D5874 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD5874: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D58E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D58E4   Length              0005 (5)\n+0D58E6   Flags               01 (1) 'Modification'\n+0D58E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D58EB PAYLOAD\n+\n+0D682E DATA DESCRIPTOR       08074B50 (134695760)\n+0D6832 CRC                   937D5C9D (2474466461)\n+0D6836 Compressed Size       00000F43 (3907)\n+0D683A Uncompressed Size     00000F43 (3907)\n+\n+0D683E LOCAL HEADER #352     04034B50 (67324752)\n+0D6842 Extract Zip Spec      14 (20) '2.0'\n+0D6843 Extract OS            00 (0) 'MS-DOS'\n+0D6844 General Purpose Flag  0000 (0)\n+0D6846 Compression Method    0000 (0) 'Stored'\n+0D6848 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D684C CRC                   00000000 (0)\n+0D6850 Compressed Size       00000000 (0)\n+0D6854 Uncompressed Size     00000000 (0)\n+0D6858 Filename Length       0025 (37)\n+0D685A Extra Length          0009 (9)\n+0D685C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD685C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6881 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6883   Length              0005 (5)\n+0D6885   Flags               01 (1) 'Modification'\n+0D6886   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D688A LOCAL HEADER #353     04034B50 (67324752)\n+0D688E Extract Zip Spec      14 (20) '2.0'\n+0D688F Extract OS            00 (0) 'MS-DOS'\n+0D6890 General Purpose Flag  0000 (0)\n+0D6892 Compression Method    0000 (0) 'Stored'\n+0D6894 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6898 CRC                   00000000 (0)\n+0D689C Compressed Size       00000000 (0)\n+0D68A0 Uncompressed Size     00000000 (0)\n+0D68A4 Filename Length       002C (44)\n+0D68A6 Extra Length          0009 (9)\n+0D68A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD68A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D68D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D68D6   Length              0005 (5)\n+0D68D8   Flags               01 (1) 'Modification'\n+0D68D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D68DD LOCAL HEADER #354     04034B50 (67324752)\n+0D68E1 Extract Zip Spec      14 (20) '2.0'\n+0D68E2 Extract OS            00 (0) 'MS-DOS'\n+0D68E3 General Purpose Flag  0000 (0)\n+0D68E5 Compression Method    0000 (0) 'Stored'\n+0D68E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D68EB CRC                   00000000 (0)\n+0D68EF Compressed Size       00000000 (0)\n+0D68F3 Uncompressed Size     00000000 (0)\n+0D68F7 Filename Length       005C (92)\n+0D68F9 Extra Length          0009 (9)\n+0D68FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD68FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6959   Length              0005 (5)\n+0D695B   Flags               01 (1) 'Modification'\n+0D695C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D6960 LOCAL HEADER #355     04034B50 (67324752)\n+0D6964 Extract Zip Spec      14 (20) '2.0'\n+0D6965 Extract OS            00 (0) 'MS-DOS'\n+0D6966 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D6968 Compression Method    0000 (0) 'Stored'\n+0D696A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D696E CRC                   00000000 (0)\n+0D6972 Compressed Size       00000000 (0)\n+0D6976 Uncompressed Size     00000000 (0)\n+0D697A Filename Length       0072 (114)\n+0D697C Extra Length          0009 (9)\n+0D697E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD697E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D69F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D69F2   Length              0005 (5)\n+0D69F4   Flags               01 (1) 'Modification'\n+0D69F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D69F9 PAYLOAD\n+\n+0D7893 DATA DESCRIPTOR       08074B50 (134695760)\n+0D7897 CRC                   335CA1CD (861708749)\n+0D789B Compressed Size       00000E9A (3738)\n+0D789F Uncompressed Size     00000E9A (3738)\n+\n+0D78A3 LOCAL HEADER #356     04034B50 (67324752)\n+0D78A7 Extract Zip Spec      14 (20) '2.0'\n+0D78A8 Extract OS            00 (0) 'MS-DOS'\n+0D78A9 General Purpose Flag  0000 (0)\n+0D78AB Compression Method    0000 (0) 'Stored'\n+0D78AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D78B1 CRC                   00000000 (0)\n+0D78B5 Compressed Size       00000000 (0)\n+0D78B9 Uncompressed Size     00000000 (0)\n+0D78BD Filename Length       0068 (104)\n+0D78BF Extra Length          0009 (9)\n+0D78C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD78C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D7929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D792B   Length              0005 (5)\n+0D792D   Flags               01 (1) 'Modification'\n+0D792E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D7932 LOCAL HEADER #357     04034B50 (67324752)\n+0D7936 Extract Zip Spec      14 (20) '2.0'\n+0D7937 Extract OS            00 (0) 'MS-DOS'\n+0D7938 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D793A Compression Method    0000 (0) 'Stored'\n+0D793C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D7940 CRC                   00000000 (0)\n+0D7944 Compressed Size       00000000 (0)\n+0D7948 Uncompressed Size     00000000 (0)\n+0D794C Filename Length       007E (126)\n+0D794E Extra Length          0009 (9)\n+0D7950 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD7950: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D79CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D79D0   Length              0005 (5)\n+0D79D2   Flags               01 (1) 'Modification'\n+0D79D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D79D7 PAYLOAD\n+\n+0D8A30 DATA DESCRIPTOR       08074B50 (134695760)\n+0D8A34 CRC                   3EE7FDDD (1055391197)\n+0D8A38 Compressed Size       00001059 (4185)\n+0D8A3C Uncompressed Size     00001059 (4185)\n+\n+0D8A40 LOCAL HEADER #358     04034B50 (67324752)\n+0D8A44 Extract Zip Spec      14 (20) '2.0'\n+0D8A45 Extract OS            00 (0) 'MS-DOS'\n+0D8A46 General Purpose Flag  0000 (0)\n+0D8A48 Compression Method    0000 (0) 'Stored'\n+0D8A4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8A4E CRC                   00000000 (0)\n+0D8A52 Compressed Size       00000000 (0)\n+0D8A56 Uncompressed Size     00000000 (0)\n+0D8A5A Filename Length       0025 (37)\n+0D8A5C Extra Length          0009 (9)\n+0D8A5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8A5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8A83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8A85   Length              0005 (5)\n+0D8A87   Flags               01 (1) 'Modification'\n+0D8A88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8A8C LOCAL HEADER #359     04034B50 (67324752)\n+0D8A90 Extract Zip Spec      14 (20) '2.0'\n+0D8A91 Extract OS            00 (0) 'MS-DOS'\n+0D8A92 General Purpose Flag  0000 (0)\n+0D8A94 Compression Method    0000 (0) 'Stored'\n+0D8A96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8A9A CRC                   00000000 (0)\n+0D8A9E Compressed Size       00000000 (0)\n+0D8AA2 Uncompressed Size     00000000 (0)\n+0D8AA6 Filename Length       002C (44)\n+0D8AA8 Extra Length          0009 (9)\n+0D8AAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8AAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8AD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8AD8   Length              0005 (5)\n+0D8ADA   Flags               01 (1) 'Modification'\n+0D8ADB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8ADF LOCAL HEADER #360     04034B50 (67324752)\n+0D8AE3 Extract Zip Spec      14 (20) '2.0'\n+0D8AE4 Extract OS            00 (0) 'MS-DOS'\n+0D8AE5 General Purpose Flag  0000 (0)\n+0D8AE7 Compression Method    0000 (0) 'Stored'\n+0D8AE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8AED CRC                   00000000 (0)\n+0D8AF1 Compressed Size       00000000 (0)\n+0D8AF5 Uncompressed Size     00000000 (0)\n+0D8AF9 Filename Length       005A (90)\n+0D8AFB Extra Length          0009 (9)\n+0D8AFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8AFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8B57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8B59   Length              0005 (5)\n+0D8B5B   Flags               01 (1) 'Modification'\n+0D8B5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D8B60 LOCAL HEADER #361     04034B50 (67324752)\n+0D8B64 Extract Zip Spec      14 (20) '2.0'\n+0D8B65 Extract OS            00 (0) 'MS-DOS'\n+0D8B66 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D8B68 Compression Method    0000 (0) 'Stored'\n+0D8B6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D8B6E CRC                   00000000 (0)\n+0D8B72 Compressed Size       00000000 (0)\n+0D8B76 Uncompressed Size     00000000 (0)\n+0D8B7A Filename Length       0070 (112)\n+0D8B7C Extra Length          0009 (9)\n+0D8B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD8B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8BEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8BF0   Length              0005 (5)\n+0D8BF2   Flags               01 (1) 'Modification'\n+0D8BF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D8BF7 PAYLOAD\n+\n+0DA3BE DATA DESCRIPTOR       08074B50 (134695760)\n+0DA3C2 CRC                   0944969F (155489951)\n+0DA3C6 Compressed Size       000017C7 (6087)\n+0DA3CA Uncompressed Size     000017C7 (6087)\n+\n+0DA3CE LOCAL HEADER #362     04034B50 (67324752)\n+0DA3D2 Extract Zip Spec      14 (20) '2.0'\n+0DA3D3 Extract OS            00 (0) 'MS-DOS'\n+0DA3D4 General Purpose Flag  0000 (0)\n+0DA3D6 Compression Method    0000 (0) 'Stored'\n+0DA3D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA3DC CRC                   00000000 (0)\n+0DA3E0 Compressed Size       00000000 (0)\n+0DA3E4 Uncompressed Size     00000000 (0)\n+0DA3E8 Filename Length       0027 (39)\n+0DA3EA Extra Length          0009 (9)\n+0DA3EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA3EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA413 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA415   Length              0005 (5)\n+0DA417   Flags               01 (1) 'Modification'\n+0DA418   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DA41C LOCAL HEADER #363     04034B50 (67324752)\n+0DA420 Extract Zip Spec      14 (20) '2.0'\n+0DA421 Extract OS            00 (0) 'MS-DOS'\n+0DA422 General Purpose Flag  0000 (0)\n+0DA424 Compression Method    0000 (0) 'Stored'\n+0DA426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA42A CRC                   00000000 (0)\n+0DA42E Compressed Size       00000000 (0)\n+0DA432 Uncompressed Size     00000000 (0)\n+0DA436 Filename Length       002E (46)\n+0DA438 Extra Length          0009 (9)\n+0DA43A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA43A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA468 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA46A   Length              0005 (5)\n+0DA46C   Flags               01 (1) 'Modification'\n+0DA46D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DA471 LOCAL HEADER #364     04034B50 (67324752)\n+0DA475 Extract Zip Spec      14 (20) '2.0'\n+0DA476 Extract OS            00 (0) 'MS-DOS'\n+0DA477 General Purpose Flag  0000 (0)\n+0DA479 Compression Method    0000 (0) 'Stored'\n+0DA47B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA47F CRC                   00000000 (0)\n+0DA483 Compressed Size       00000000 (0)\n+0DA487 Uncompressed Size     00000000 (0)\n+0DA48B Filename Length       0067 (103)\n+0DA48D Extra Length          0009 (9)\n+0DA48F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA48F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA4F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA4F8   Length              0005 (5)\n+0DA4FA   Flags               01 (1) 'Modification'\n+0DA4FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DA4FF LOCAL HEADER #365     04034B50 (67324752)\n+0DA503 Extract Zip Spec      14 (20) '2.0'\n+0DA504 Extract OS            00 (0) 'MS-DOS'\n+0DA505 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DA507 Compression Method    0000 (0) 'Stored'\n+0DA509 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA50D CRC                   00000000 (0)\n+0DA511 Compressed Size       00000000 (0)\n+0DA515 Uncompressed Size     00000000 (0)\n+0DA519 Filename Length       007D (125)\n+0DA51B Extra Length          0009 (9)\n+0DA51D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA51D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA59A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA59C   Length              0005 (5)\n+0DA59E   Flags               01 (1) 'Modification'\n+0DA59F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DA5A3 PAYLOAD\n+\n+0DB1FE DATA DESCRIPTOR       08074B50 (134695760)\n+0DB202 CRC                   67FA3A91 (1744452241)\n+0DB206 Compressed Size       00000C5B (3163)\n+0DB20A Uncompressed Size     00000C5B (3163)\n+\n+0DB20E LOCAL HEADER #366     04034B50 (67324752)\n+0DB212 Extract Zip Spec      14 (20) '2.0'\n+0DB213 Extract OS            00 (0) 'MS-DOS'\n+0DB214 General Purpose Flag  0000 (0)\n+0DB216 Compression Method    0000 (0) 'Stored'\n+0DB218 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DB21C CRC                   00000000 (0)\n+0DB220 Compressed Size       00000000 (0)\n+0DB224 Uncompressed Size     00000000 (0)\n+0DB228 Filename Length       0067 (103)\n+0DB22A Extra Length          0009 (9)\n+0DB22C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDB22C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DB293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DB295   Length              0005 (5)\n+0DB297   Flags               01 (1) 'Modification'\n+0DB298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DB29C LOCAL HEADER #367     04034B50 (67324752)\n+0DB2A0 Extract Zip Spec      14 (20) '2.0'\n+0DB2A1 Extract OS            00 (0) 'MS-DOS'\n+0DB2A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DB2A4 Compression Method    0000 (0) 'Stored'\n+0DB2A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DB2AA CRC                   00000000 (0)\n+0DB2AE Compressed Size       00000000 (0)\n+0DB2B2 Uncompressed Size     00000000 (0)\n+0DB2B6 Filename Length       007D (125)\n+0DB2B8 Extra Length          0009 (9)\n+0DB2BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDB2BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DB337 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DB339   Length              0005 (5)\n+0DB33B   Flags               01 (1) 'Modification'\n+0DB33C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DB340 PAYLOAD\n+\n+0DBB00 DATA DESCRIPTOR       08074B50 (134695760)\n+0DBB04 CRC                   63513D5C (1666268508)\n+0DBB08 Compressed Size       000007C0 (1984)\n+0DBB0C Uncompressed Size     000007C0 (1984)\n+\n+0DBB10 LOCAL HEADER #368     04034B50 (67324752)\n+0DBB14 Extract Zip Spec      14 (20) '2.0'\n+0DBB15 Extract OS            00 (0) 'MS-DOS'\n+0DBB16 General Purpose Flag  0000 (0)\n+0DBB18 Compression Method    0000 (0) 'Stored'\n+0DBB1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBB1E CRC                   00000000 (0)\n+0DBB22 Compressed Size       00000000 (0)\n+0DBB26 Uncompressed Size     00000000 (0)\n+0DBB2A Filename Length       005E (94)\n+0DBB2C Extra Length          0009 (9)\n+0DBB2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDBB2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DBB8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBB8E   Length              0005 (5)\n+0DBB90   Flags               01 (1) 'Modification'\n+0DBB91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DBB95 LOCAL HEADER #369     04034B50 (67324752)\n+0DBB99 Extract Zip Spec      14 (20) '2.0'\n+0DBB9A Extract OS            00 (0) 'MS-DOS'\n+0DBB9B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DBB9D Compression Method    0000 (0) 'Stored'\n+0DBB9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBBA3 CRC                   00000000 (0)\n+0DBBA7 Compressed Size       00000000 (0)\n+0DBBAB Uncompressed Size     00000000 (0)\n+0DBBAF Filename Length       0074 (116)\n+0DBBB1 Extra Length          0009 (9)\n+0DBBB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDBBB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DBC27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBC29   Length              0005 (5)\n+0DBC2B   Flags               01 (1) 'Modification'\n+0DBC2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DBC30 PAYLOAD\n+\n+0DCB0A DATA DESCRIPTOR       08074B50 (134695760)\n+0DCB0E CRC                   99929518 (2576520472)\n+0DCB12 Compressed Size       00000EDA (3802)\n+0DCB16 Uncompressed Size     00000EDA (3802)\n+\n+0DCB1A LOCAL HEADER #370     04034B50 (67324752)\n+0DCB1E Extract Zip Spec      14 (20) '2.0'\n+0DCB1F Extract OS            00 (0) 'MS-DOS'\n+0DCB20 General Purpose Flag  0000 (0)\n+0DCB22 Compression Method    0000 (0) 'Stored'\n+0DCB24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DCB28 CRC                   00000000 (0)\n+0DCB2C Compressed Size       00000000 (0)\n+0DCB30 Uncompressed Size     00000000 (0)\n+0DCB34 Filename Length       005C (92)\n+0DCB36 Extra Length          0009 (9)\n+0DCB38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDCB38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DCB94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DCB96   Length              0005 (5)\n+0DCB98   Flags               01 (1) 'Modification'\n+0DCB99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DCB9D LOCAL HEADER #371     04034B50 (67324752)\n+0DCBA1 Extract Zip Spec      14 (20) '2.0'\n+0DCBA2 Extract OS            00 (0) 'MS-DOS'\n+0DCBA3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DCBA5 Compression Method    0000 (0) 'Stored'\n+0DCBA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DCBAB CRC                   00000000 (0)\n+0DCBAF Compressed Size       00000000 (0)\n+0DCBB3 Uncompressed Size     00000000 (0)\n+0DCBB7 Filename Length       0072 (114)\n+0DCBB9 Extra Length          0009 (9)\n+0DCBBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDCBBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DCC2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DCC2F   Length              0005 (5)\n+0DCC31   Flags               01 (1) 'Modification'\n+0DCC32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DCC36 PAYLOAD\n+\n+0DD52E DATA DESCRIPTOR       08074B50 (134695760)\n+0DD532 CRC                   E6BF62E0 (3871302368)\n+0DD536 Compressed Size       000008F8 (2296)\n+0DD53A Uncompressed Size     000008F8 (2296)\n+\n+0DD53E LOCAL HEADER #372     04034B50 (67324752)\n+0DD542 Extract Zip Spec      14 (20) '2.0'\n+0DD543 Extract OS            00 (0) 'MS-DOS'\n+0DD544 General Purpose Flag  0000 (0)\n+0DD546 Compression Method    0000 (0) 'Stored'\n+0DD548 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DD54C CRC                   00000000 (0)\n+0DD550 Compressed Size       00000000 (0)\n+0DD554 Uncompressed Size     00000000 (0)\n+0DD558 Filename Length       0061 (97)\n+0DD55A Extra Length          0009 (9)\n+0DD55C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDD55C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DD5BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD5BF   Length              0005 (5)\n+0DD5C1   Flags               01 (1) 'Modification'\n+0DD5C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DD5C6 LOCAL HEADER #373     04034B50 (67324752)\n+0DD5CA Extract Zip Spec      14 (20) '2.0'\n+0DD5CB Extract OS            00 (0) 'MS-DOS'\n+0DD5CC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DD5CE Compression Method    0000 (0) 'Stored'\n+0DD5D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DD5D4 CRC                   00000000 (0)\n+0DD5D8 Compressed Size       00000000 (0)\n+0DD5DC Uncompressed Size     00000000 (0)\n+0DD5E0 Filename Length       0077 (119)\n+0DD5E2 Extra Length          0009 (9)\n+0DD5E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDD5E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DD65B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD65D   Length              0005 (5)\n+0DD65F   Flags               01 (1) 'Modification'\n+0DD660   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DD664 PAYLOAD\n+\n+0DDBF8 DATA DESCRIPTOR       08074B50 (134695760)\n+0DDBFC CRC                   01130591 (18023825)\n+0DDC00 Compressed Size       00000594 (1428)\n+0DDC04 Uncompressed Size     00000594 (1428)\n+\n+0DDC08 LOCAL HEADER #374     04034B50 (67324752)\n+0DDC0C Extract Zip Spec      14 (20) '2.0'\n+0DDC0D Extract OS            00 (0) 'MS-DOS'\n+0DDC0E General Purpose Flag  0000 (0)\n+0DDC10 Compression Method    0000 (0) 'Stored'\n+0DDC12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DDC16 CRC                   00000000 (0)\n+0DDC1A Compressed Size       00000000 (0)\n+0DDC1E Uncompressed Size     00000000 (0)\n+0DDC22 Filename Length       0063 (99)\n+0DDC24 Extra Length          0009 (9)\n+0DDC26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDDC26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DDC89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DDC8B   Length              0005 (5)\n+0DDC8D   Flags               01 (1) 'Modification'\n+0DDC8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DDC92 LOCAL HEADER #375     04034B50 (67324752)\n+0DDC96 Extract Zip Spec      14 (20) '2.0'\n+0DDC97 Extract OS            00 (0) 'MS-DOS'\n+0DDC98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DDC9A Compression Method    0000 (0) 'Stored'\n+0DDC9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DDCA0 CRC                   00000000 (0)\n+0DDCA4 Compressed Size       00000000 (0)\n+0DDCA8 Uncompressed Size     00000000 (0)\n+0DDCAC Filename Length       0079 (121)\n+0DDCAE Extra Length          0009 (9)\n+0DDCB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDDCB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DDD29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DDD2B   Length              0005 (5)\n+0DDD2D   Flags               01 (1) 'Modification'\n+0DDD2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DDD32 PAYLOAD\n+\n+0DE563 DATA DESCRIPTOR       08074B50 (134695760)\n+0DE567 CRC                   F05E2331 (4032701233)\n+0DE56B Compressed Size       00000831 (2097)\n+0DE56F Uncompressed Size     00000831 (2097)\n+\n+0DE573 LOCAL HEADER #376     04034B50 (67324752)\n+0DE577 Extract Zip Spec      14 (20) '2.0'\n+0DE578 Extract OS            00 (0) 'MS-DOS'\n+0DE579 General Purpose Flag  0000 (0)\n+0DE57B Compression Method    0000 (0) 'Stored'\n+0DE57D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE581 CRC                   00000000 (0)\n+0DE585 Compressed Size       00000000 (0)\n+0DE589 Uncompressed Size     00000000 (0)\n+0DE58D Filename Length       0061 (97)\n+0DE58F Extra Length          0009 (9)\n+0DE591 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE591: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE5F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE5F4   Length              0005 (5)\n+0DE5F6   Flags               01 (1) 'Modification'\n+0DE5F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DE5FB LOCAL HEADER #377     04034B50 (67324752)\n+0DE5FF Extract Zip Spec      14 (20) '2.0'\n+0DE600 Extract OS            00 (0) 'MS-DOS'\n+0DE601 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DE603 Compression Method    0000 (0) 'Stored'\n+0DE605 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE609 CRC                   00000000 (0)\n+0DE60D Compressed Size       00000000 (0)\n+0DE611 Uncompressed Size     00000000 (0)\n+0DE615 Filename Length       0077 (119)\n+0DE617 Extra Length          0009 (9)\n+0DE619 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE619: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE690 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE692   Length              0005 (5)\n+0DE694   Flags               01 (1) 'Modification'\n+0DE695   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DE699 PAYLOAD\n+\n+0DFC69 DATA DESCRIPTOR       08074B50 (134695760)\n+0DFC6D CRC                   80ED3BA4 (2163030948)\n+0DFC71 Compressed Size       000015D0 (5584)\n+0DFC75 Uncompressed Size     000015D0 (5584)\n+\n+0DFC79 LOCAL HEADER #378     04034B50 (67324752)\n+0DFC7D Extract Zip Spec      14 (20) '2.0'\n+0DFC7E Extract OS            00 (0) 'MS-DOS'\n+0DFC7F General Purpose Flag  0000 (0)\n+0DFC81 Compression Method    0000 (0) 'Stored'\n+0DFC83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DFC87 CRC                   00000000 (0)\n+0DFC8B Compressed Size       00000000 (0)\n+0DFC8F Uncompressed Size     00000000 (0)\n+0DFC93 Filename Length       0067 (103)\n+0DFC95 Extra Length          0009 (9)\n+0DFC97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDFC97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DFCFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DFD00   Length              0005 (5)\n+0DFD02   Flags               01 (1) 'Modification'\n+0DFD03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DFD07 LOCAL HEADER #379     04034B50 (67324752)\n+0DFD0B Extract Zip Spec      14 (20) '2.0'\n+0DFD0C Extract OS            00 (0) 'MS-DOS'\n+0DFD0D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DFD0F Compression Method    0000 (0) 'Stored'\n+0DFD11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DFD15 CRC                   00000000 (0)\n+0DFD19 Compressed Size       00000000 (0)\n+0DFD1D Uncompressed Size     00000000 (0)\n+0DFD21 Filename Length       007D (125)\n+0DFD23 Extra Length          0009 (9)\n+0DFD25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDFD25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DFDA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DFDA4   Length              0005 (5)\n+0DFDA6   Flags               01 (1) 'Modification'\n+0DFDA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DFDAB PAYLOAD\n+\n+0E1D5D DATA DESCRIPTOR       08074B50 (134695760)\n+0E1D61 CRC                   BEB620A1 (3199606945)\n+0E1D65 Compressed Size       00001FB2 (8114)\n+0E1D69 Uncompressed Size     00001FB2 (8114)\n+\n+0E1D6D LOCAL HEADER #380     04034B50 (67324752)\n+0E1D71 Extract Zip Spec      14 (20) '2.0'\n+0E1D72 Extract OS            00 (0) 'MS-DOS'\n+0E1D73 General Purpose Flag  0000 (0)\n+0E1D75 Compression Method    0000 (0) 'Stored'\n+0E1D77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1D7B CRC                   00000000 (0)\n+0E1D7F Compressed Size       00000000 (0)\n+0E1D83 Uncompressed Size     00000000 (0)\n+0E1D87 Filename Length       005E (94)\n+0E1D89 Extra Length          0009 (9)\n+0E1D8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE1D8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E1DE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1DEB   Length              0005 (5)\n+0E1DED   Flags               01 (1) 'Modification'\n+0E1DEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E1DF2 LOCAL HEADER #381     04034B50 (67324752)\n+0E1DF6 Extract Zip Spec      14 (20) '2.0'\n+0E1DF7 Extract OS            00 (0) 'MS-DOS'\n+0E1DF8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E1DFA Compression Method    0000 (0) 'Stored'\n+0E1DFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1E00 CRC                   00000000 (0)\n+0E1E04 Compressed Size       00000000 (0)\n+0E1E08 Uncompressed Size     00000000 (0)\n+0E1E0C Filename Length       0074 (116)\n+0E1E0E Extra Length          0009 (9)\n+0E1E10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE1E10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E1E84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1E86   Length              0005 (5)\n+0E1E88   Flags               01 (1) 'Modification'\n+0E1E89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E1E8D PAYLOAD\n+\n+0E3187 DATA DESCRIPTOR       08074B50 (134695760)\n+0E318B CRC                   61A0CE5A (1637928538)\n+0E318F Compressed Size       000012FA (4858)\n+0E3193 Uncompressed Size     000012FA (4858)\n+\n+0E3197 LOCAL HEADER #382     04034B50 (67324752)\n+0E319B Extract Zip Spec      14 (20) '2.0'\n+0E319C Extract OS            00 (0) 'MS-DOS'\n+0E319D General Purpose Flag  0000 (0)\n+0E319F Compression Method    0000 (0) 'Stored'\n+0E31A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E31A5 CRC                   00000000 (0)\n+0E31A9 Compressed Size       00000000 (0)\n+0E31AD Uncompressed Size     00000000 (0)\n+0E31B1 Filename Length       0061 (97)\n+0E31B3 Extra Length          0009 (9)\n+0E31B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE31B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E3216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E3218   Length              0005 (5)\n+0E321A   Flags               01 (1) 'Modification'\n+0E321B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E321F LOCAL HEADER #383     04034B50 (67324752)\n+0E3223 Extract Zip Spec      14 (20) '2.0'\n+0E3224 Extract OS            00 (0) 'MS-DOS'\n+0E3225 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E3227 Compression Method    0000 (0) 'Stored'\n+0E3229 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E322D CRC                   00000000 (0)\n+0E3231 Compressed Size       00000000 (0)\n+0E3235 Uncompressed Size     00000000 (0)\n+0E3239 Filename Length       0077 (119)\n+0E323B Extra Length          0009 (9)\n+0E323D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE323D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E32B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E32B6   Length              0005 (5)\n+0E32B8   Flags               01 (1) 'Modification'\n+0E32B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E32BD PAYLOAD\n+\n+0E45D2 DATA DESCRIPTOR       08074B50 (134695760)\n+0E45D6 CRC                   624BE63E (1649141310)\n+0E45DA Compressed Size       00001315 (4885)\n+0E45DE Uncompressed Size     00001315 (4885)\n+\n+0E45E2 LOCAL HEADER #384     04034B50 (67324752)\n+0E45E6 Extract Zip Spec      14 (20) '2.0'\n+0E45E7 Extract OS            00 (0) 'MS-DOS'\n+0E45E8 General Purpose Flag  0000 (0)\n+0E45EA Compression Method    0000 (0) 'Stored'\n+0E45EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E45F0 CRC                   00000000 (0)\n+0E45F4 Compressed Size       00000000 (0)\n+0E45F8 Uncompressed Size     00000000 (0)\n+0E45FC Filename Length       005D (93)\n+0E45FE Extra Length          0009 (9)\n+0E4600 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4600: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E465D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E465F   Length              0005 (5)\n+0E4661   Flags               01 (1) 'Modification'\n+0E4662   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E4666 LOCAL HEADER #385     04034B50 (67324752)\n+0E466A Extract Zip Spec      14 (20) '2.0'\n+0E466B Extract OS            00 (0) 'MS-DOS'\n+0E466C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E466E Compression Method    0000 (0) 'Stored'\n+0E4670 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4674 CRC                   00000000 (0)\n+0E4678 Compressed Size       00000000 (0)\n+0E467C Uncompressed Size     00000000 (0)\n+0E4680 Filename Length       0073 (115)\n+0E4682 Extra Length          0009 (9)\n+0E4684 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4684: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E46F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E46F9   Length              0005 (5)\n+0E46FB   Flags               01 (1) 'Modification'\n+0E46FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E4700 PAYLOAD\n+\n+0E6EE4 DATA DESCRIPTOR       08074B50 (134695760)\n+0E6EE8 CRC                   F4A07CA3 (4104158371)\n+0E6EEC Compressed Size       000027E4 (10212)\n+0E6EF0 Uncompressed Size     000027E4 (10212)\n+\n+0E6EF4 LOCAL HEADER #386     04034B50 (67324752)\n+0E6EF8 Extract Zip Spec      14 (20) '2.0'\n+0E6EF9 Extract OS            00 (0) 'MS-DOS'\n+0E6EFA General Purpose Flag  0000 (0)\n+0E6EFC Compression Method    0000 (0) 'Stored'\n+0E6EFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6F02 CRC                   00000000 (0)\n+0E6F06 Compressed Size       00000000 (0)\n+0E6F0A Uncompressed Size     00000000 (0)\n+0E6F0E Filename Length       0065 (101)\n+0E6F10 Extra Length          0009 (9)\n+0E6F12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6F12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6F77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6F79   Length              0005 (5)\n+0E6F7B   Flags               01 (1) 'Modification'\n+0E6F7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E6F80 LOCAL HEADER #387     04034B50 (67324752)\n+0E6F84 Extract Zip Spec      14 (20) '2.0'\n+0E6F85 Extract OS            00 (0) 'MS-DOS'\n+0E6F86 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E6F88 Compression Method    0000 (0) 'Stored'\n+0E6F8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6F8E CRC                   00000000 (0)\n+0E6F92 Compressed Size       00000000 (0)\n+0E6F96 Uncompressed Size     00000000 (0)\n+0E6F9A Filename Length       007B (123)\n+0E6F9C Extra Length          0009 (9)\n+0E6F9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6F9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E7019 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E701B   Length              0005 (5)\n+0E701D   Flags               01 (1) 'Modification'\n+0E701E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E7022 PAYLOAD\n+\n+0E8298 DATA DESCRIPTOR       08074B50 (134695760)\n+0E829C CRC                   6E031E40 (1845698112)\n+0E82A0 Compressed Size       00001276 (4726)\n+0E82A4 Uncompressed Size     00001276 (4726)\n+\n+0E82A8 LOCAL HEADER #388     04034B50 (67324752)\n+0E82AC Extract Zip Spec      14 (20) '2.0'\n+0E82AD Extract OS            00 (0) 'MS-DOS'\n+0E82AE General Purpose Flag  0000 (0)\n+0E82B0 Compression Method    0000 (0) 'Stored'\n+0E82B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E82B6 CRC                   00000000 (0)\n+0E82BA Compressed Size       00000000 (0)\n+0E82BE Uncompressed Size     00000000 (0)\n+0E82C2 Filename Length       0064 (100)\n+0E82C4 Extra Length          0009 (9)\n+0E82C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE82C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E832A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E832C   Length              0005 (5)\n+0E832E   Flags               01 (1) 'Modification'\n+0E832F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E8333 LOCAL HEADER #389     04034B50 (67324752)\n+0E8337 Extract Zip Spec      14 (20) '2.0'\n+0E8338 Extract OS            00 (0) 'MS-DOS'\n+0E8339 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E833B Compression Method    0000 (0) 'Stored'\n+0E833D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8341 CRC                   00000000 (0)\n+0E8345 Compressed Size       00000000 (0)\n+0E8349 Uncompressed Size     00000000 (0)\n+0E834D Filename Length       007A (122)\n+0E834F Extra Length          0009 (9)\n+0E8351 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8351: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E83CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E83CD   Length              0005 (5)\n+0E83CF   Flags               01 (1) 'Modification'\n+0E83D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E83D4 PAYLOAD\n+\n+0E8FB2 DATA DESCRIPTOR       08074B50 (134695760)\n+0E8FB6 CRC                   5987930A (1502057226)\n+0E8FBA Compressed Size       00000BDE (3038)\n+0E8FBE Uncompressed Size     00000BDE (3038)\n+\n+0E8FC2 LOCAL HEADER #390     04034B50 (67324752)\n+0E8FC6 Extract Zip Spec      14 (20) '2.0'\n+0E8FC7 Extract OS            00 (0) 'MS-DOS'\n+0E8FC8 General Purpose Flag  0000 (0)\n+0E8FCA Compression Method    0000 (0) 'Stored'\n+0E8FCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8FD0 CRC                   00000000 (0)\n+0E8FD4 Compressed Size       00000000 (0)\n+0E8FD8 Uncompressed Size     00000000 (0)\n+0E8FDC Filename Length       0065 (101)\n+0E8FDE Extra Length          0009 (9)\n+0E8FE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8FE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E9045 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E9047   Length              0005 (5)\n+0E9049   Flags               01 (1) 'Modification'\n+0E904A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E904E LOCAL HEADER #391     04034B50 (67324752)\n+0E9052 Extract Zip Spec      14 (20) '2.0'\n+0E9053 Extract OS            00 (0) 'MS-DOS'\n+0E9054 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E9056 Compression Method    0000 (0) 'Stored'\n+0E9058 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E905C CRC                   00000000 (0)\n+0E9060 Compressed Size       00000000 (0)\n+0E9064 Uncompressed Size     00000000 (0)\n+0E9068 Filename Length       007B (123)\n+0E906A Extra Length          0009 (9)\n+0E906C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE906C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E90E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E90E9   Length              0005 (5)\n+0E90EB   Flags               01 (1) 'Modification'\n+0E90EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E90F0 PAYLOAD\n+\n+0E99BF DATA DESCRIPTOR       08074B50 (134695760)\n+0E99C3 CRC                   CA93F7B9 (3398694841)\n+0E99C7 Compressed Size       000008CF (2255)\n+0E99CB Uncompressed Size     000008CF (2255)\n+\n+0E99CF LOCAL HEADER #392     04034B50 (67324752)\n+0E99D3 Extract Zip Spec      14 (20) '2.0'\n+0E99D4 Extract OS            00 (0) 'MS-DOS'\n+0E99D5 General Purpose Flag  0000 (0)\n+0E99D7 Compression Method    0000 (0) 'Stored'\n+0E99D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E99DD CRC                   00000000 (0)\n+0E99E1 Compressed Size       00000000 (0)\n+0E99E5 Uncompressed Size     00000000 (0)\n+0E99E9 Filename Length       0063 (99)\n+0E99EB Extra Length          0009 (9)\n+0E99ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE99ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E9A50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E9A52   Length              0005 (5)\n+0E9A54   Flags               01 (1) 'Modification'\n+0E9A55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E9A59 LOCAL HEADER #393     04034B50 (67324752)\n+0E9A5D Extract Zip Spec      14 (20) '2.0'\n+0E9A5E Extract OS            00 (0) 'MS-DOS'\n+0E9A5F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E9A61 Compression Method    0000 (0) 'Stored'\n+0E9A63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E9A67 CRC                   00000000 (0)\n+0E9A6B Compressed Size       00000000 (0)\n+0E9A6F Uncompressed Size     00000000 (0)\n+0E9A73 Filename Length       0079 (121)\n+0E9A75 Extra Length          0009 (9)\n+0E9A77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE9A77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E9AF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E9AF2   Length              0005 (5)\n+0E9AF4   Flags               01 (1) 'Modification'\n+0E9AF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E9AF9 PAYLOAD\n+\n+0EA7A2 DATA DESCRIPTOR       08074B50 (134695760)\n+0EA7A6 CRC                   673E5975 (1732139381)\n+0EA7AA Compressed Size       00000CA9 (3241)\n+0EA7AE Uncompressed Size     00000CA9 (3241)\n+\n+0EA7B2 LOCAL HEADER #394     04034B50 (67324752)\n+0EA7B6 Extract Zip Spec      14 (20) '2.0'\n+0EA7B7 Extract OS            00 (0) 'MS-DOS'\n+0EA7B8 General Purpose Flag  0000 (0)\n+0EA7BA Compression Method    0000 (0) 'Stored'\n+0EA7BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA7C0 CRC                   00000000 (0)\n+0EA7C4 Compressed Size       00000000 (0)\n+0EA7C8 Uncompressed Size     00000000 (0)\n+0EA7CC Filename Length       0061 (97)\n+0EA7CE Extra Length          0009 (9)\n+0EA7D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA7D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA831 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA833   Length              0005 (5)\n+0EA835   Flags               01 (1) 'Modification'\n+0EA836   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EA83A LOCAL HEADER #395     04034B50 (67324752)\n+0EA83E Extract Zip Spec      14 (20) '2.0'\n+0EA83F Extract OS            00 (0) 'MS-DOS'\n+0EA840 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EA842 Compression Method    0000 (0) 'Stored'\n+0EA844 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EA848 CRC                   00000000 (0)\n+0EA84C Compressed Size       00000000 (0)\n+0EA850 Uncompressed Size     00000000 (0)\n+0EA854 Filename Length       0077 (119)\n+0EA856 Extra Length          0009 (9)\n+0EA858 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEA858: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EA8CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EA8D1   Length              0005 (5)\n+0EA8D3   Flags               01 (1) 'Modification'\n+0EA8D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EA8D8 PAYLOAD\n+\n+0EF914 DATA DESCRIPTOR       08074B50 (134695760)\n+0EF918 CRC                   33033645 (855848517)\n+0EF91C Compressed Size       0000503C (20540)\n+0EF920 Uncompressed Size     0000503C (20540)\n+\n+0EF924 LOCAL HEADER #396     04034B50 (67324752)\n+0EF928 Extract Zip Spec      14 (20) '2.0'\n+0EF929 Extract OS            00 (0) 'MS-DOS'\n+0EF92A General Purpose Flag  0000 (0)\n+0EF92C Compression Method    0000 (0) 'Stored'\n+0EF92E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EF932 CRC                   00000000 (0)\n+0EF936 Compressed Size       00000000 (0)\n+0EF93A Uncompressed Size     00000000 (0)\n+0EF93E Filename Length       0064 (100)\n+0EF940 Extra Length          0009 (9)\n+0EF942 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEF942: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EF9A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EF9A8   Length              0005 (5)\n+0EF9AA   Flags               01 (1) 'Modification'\n+0EF9AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EF9AF LOCAL HEADER #397     04034B50 (67324752)\n+0EF9B3 Extract Zip Spec      14 (20) '2.0'\n+0EF9B4 Extract OS            00 (0) 'MS-DOS'\n+0EF9B5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EF9B7 Compression Method    0000 (0) 'Stored'\n+0EF9B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EF9BD CRC                   00000000 (0)\n+0EF9C1 Compressed Size       00000000 (0)\n+0EF9C5 Uncompressed Size     00000000 (0)\n+0EF9C9 Filename Length       007A (122)\n+0EF9CB Extra Length          0009 (9)\n+0EF9CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEF9CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EFA47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EFA49   Length              0005 (5)\n+0EFA4B   Flags               01 (1) 'Modification'\n+0EFA4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EFA50 PAYLOAD\n+\n+0F025E DATA DESCRIPTOR       08074B50 (134695760)\n+0F0262 CRC                   F5037A64 (4110645860)\n+0F0266 Compressed Size       0000080E (2062)\n+0F026A Uncompressed Size     0000080E (2062)\n+\n+0F026E LOCAL HEADER #398     04034B50 (67324752)\n+0F0272 Extract Zip Spec      14 (20) '2.0'\n+0F0273 Extract OS            00 (0) 'MS-DOS'\n+0F0274 General Purpose Flag  0000 (0)\n+0F0276 Compression Method    0000 (0) 'Stored'\n+0F0278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F027C CRC                   00000000 (0)\n+0F0280 Compressed Size       00000000 (0)\n+0F0284 Uncompressed Size     00000000 (0)\n+0F0288 Filename Length       005A (90)\n+0F028A Extra Length          0009 (9)\n+0F028C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF028C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F02E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F02E8   Length              0005 (5)\n+0F02EA   Flags               01 (1) 'Modification'\n+0F02EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F02EF LOCAL HEADER #399     04034B50 (67324752)\n+0F02F3 Extract Zip Spec      14 (20) '2.0'\n+0F02F4 Extract OS            00 (0) 'MS-DOS'\n+0F02F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F02F7 Compression Method    0000 (0) 'Stored'\n+0F02F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F02FD CRC                   00000000 (0)\n+0F0301 Compressed Size       00000000 (0)\n+0F0305 Uncompressed Size     00000000 (0)\n+0F0309 Filename Length       0070 (112)\n+0F030B Extra Length          0009 (9)\n+0F030D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF030D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F037D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F037F   Length              0005 (5)\n+0F0381   Flags               01 (1) 'Modification'\n+0F0382   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F0386 PAYLOAD\n+\n+0F1E0B DATA DESCRIPTOR       08074B50 (134695760)\n+0F1E0F CRC                   DB187B38 (3675814712)\n+0F1E13 Compressed Size       00001A85 (6789)\n+0F1E17 Uncompressed Size     00001A85 (6789)\n+\n+0F1E1B LOCAL HEADER #400     04034B50 (67324752)\n+0F1E1F Extract Zip Spec      14 (20) '2.0'\n+0F1E20 Extract OS            00 (0) 'MS-DOS'\n+0F1E21 General Purpose Flag  0000 (0)\n+0F1E23 Compression Method    0000 (0) 'Stored'\n+0F1E25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F1E29 CRC                   00000000 (0)\n+0F1E2D Compressed Size       00000000 (0)\n+0F1E31 Uncompressed Size     00000000 (0)\n+0F1E35 Filename Length       005B (91)\n+0F1E37 Extra Length          0009 (9)\n+0F1E39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF1E39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F1E94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F1E96   Length              0005 (5)\n+0F1E98   Flags               01 (1) 'Modification'\n+0F1E99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F1E9D LOCAL HEADER #401     04034B50 (67324752)\n+0F1EA1 Extract Zip Spec      14 (20) '2.0'\n+0F1EA2 Extract OS            00 (0) 'MS-DOS'\n+0F1EA3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F1EA5 Compression Method    0000 (0) 'Stored'\n+0F1EA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F1EAB CRC                   00000000 (0)\n+0F1EAF Compressed Size       00000000 (0)\n+0F1EB3 Uncompressed Size     00000000 (0)\n+0F1EB7 Filename Length       0071 (113)\n+0F1EB9 Extra Length          0009 (9)\n+0F1EBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF1EBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F1F2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F1F2E   Length              0005 (5)\n+0F1F30   Flags               01 (1) 'Modification'\n+0F1F31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F1F35 PAYLOAD\n+\n+0F39A3 DATA DESCRIPTOR       08074B50 (134695760)\n+0F39A7 CRC                   CD183667 (3440916071)\n+0F39AB Compressed Size       00001A6E (6766)\n+0F39AF Uncompressed Size     00001A6E (6766)\n+\n+0F39B3 LOCAL HEADER #402     04034B50 (67324752)\n+0F39B7 Extract Zip Spec      14 (20) '2.0'\n+0F39B8 Extract OS            00 (0) 'MS-DOS'\n+0F39B9 General Purpose Flag  0000 (0)\n+0F39BB Compression Method    0000 (0) 'Stored'\n+0F39BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F39C1 CRC                   00000000 (0)\n+0F39C5 Compressed Size       00000000 (0)\n+0F39C9 Uncompressed Size     00000000 (0)\n+0F39CD Filename Length       005B (91)\n+0F39CF Extra Length          0009 (9)\n+0F39D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF39D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3A2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3A2E   Length              0005 (5)\n+0F3A30   Flags               01 (1) 'Modification'\n+0F3A31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F3A35 LOCAL HEADER #403     04034B50 (67324752)\n+0F3A39 Extract Zip Spec      14 (20) '2.0'\n+0F3A3A Extract OS            00 (0) 'MS-DOS'\n+0F3A3B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F3A3D Compression Method    0000 (0) 'Stored'\n+0F3A3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F3A43 CRC                   00000000 (0)\n+0F3A47 Compressed Size       00000000 (0)\n+0F3A4B Uncompressed Size     00000000 (0)\n+0F3A4F Filename Length       0071 (113)\n+0F3A51 Extra Length          0009 (9)\n+0F3A53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF3A53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3AC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3AC6   Length              0005 (5)\n+0F3AC8   Flags               01 (1) 'Modification'\n+0F3AC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F3ACD PAYLOAD\n+\n+0F555F DATA DESCRIPTOR       08074B50 (134695760)\n+0F5563 CRC                   0C7DD276 (209572470)\n+0F5567 Compressed Size       00001A92 (6802)\n+0F556B Uncompressed Size     00001A92 (6802)\n+\n+0F556F LOCAL HEADER #404     04034B50 (67324752)\n+0F5573 Extract Zip Spec      14 (20) '2.0'\n+0F5574 Extract OS            00 (0) 'MS-DOS'\n+0F5575 General Purpose Flag  0000 (0)\n+0F5577 Compression Method    0000 (0) 'Stored'\n+0F5579 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F557D CRC                   00000000 (0)\n+0F5581 Compressed Size       00000000 (0)\n+0F5585 Uncompressed Size     00000000 (0)\n+0F5589 Filename Length       005C (92)\n+0F558B Extra Length          0009 (9)\n+0F558D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF558D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F55E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F55EB   Length              0005 (5)\n+0F55ED   Flags               01 (1) 'Modification'\n+0F55EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F55F2 LOCAL HEADER #405     04034B50 (67324752)\n+0F55F6 Extract Zip Spec      14 (20) '2.0'\n+0F55F7 Extract OS            00 (0) 'MS-DOS'\n+0F55F8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F55FA Compression Method    0000 (0) 'Stored'\n+0F55FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F5600 CRC                   00000000 (0)\n+0F5604 Compressed Size       00000000 (0)\n+0F5608 Uncompressed Size     00000000 (0)\n+0F560C Filename Length       0072 (114)\n+0F560E Extra Length          0009 (9)\n+0F5610 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF5610: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F5682 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F5684   Length              0005 (5)\n+0F5686   Flags               01 (1) 'Modification'\n+0F5687   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F568B PAYLOAD\n+\n+0F6DBE DATA DESCRIPTOR       08074B50 (134695760)\n+0F6DC2 CRC                   60EA12C2 (1625952962)\n+0F6DC6 Compressed Size       00001733 (5939)\n+0F6DCA Uncompressed Size     00001733 (5939)\n+\n+0F6DCE LOCAL HEADER #406     04034B50 (67324752)\n+0F6DD2 Extract Zip Spec      14 (20) '2.0'\n+0F6DD3 Extract OS            00 (0) 'MS-DOS'\n+0F6DD4 General Purpose Flag  0000 (0)\n+0F6DD6 Compression Method    0000 (0) 'Stored'\n+0F6DD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F6DDC CRC                   00000000 (0)\n+0F6DE0 Compressed Size       00000000 (0)\n+0F6DE4 Uncompressed Size     00000000 (0)\n+0F6DE8 Filename Length       005F (95)\n+0F6DEA Extra Length          0009 (9)\n+0F6DEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF6DEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F6E4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F6E4D   Length              0005 (5)\n+0F6E4F   Flags               01 (1) 'Modification'\n+0F6E50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F6E54 LOCAL HEADER #407     04034B50 (67324752)\n+0F6E58 Extract Zip Spec      14 (20) '2.0'\n+0F6E59 Extract OS            00 (0) 'MS-DOS'\n+0F6E5A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F6E5C Compression Method    0000 (0) 'Stored'\n+0F6E5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F6E62 CRC                   00000000 (0)\n+0F6E66 Compressed Size       00000000 (0)\n+0F6E6A Uncompressed Size     00000000 (0)\n+0F6E6E Filename Length       0075 (117)\n+0F6E70 Extra Length          0009 (9)\n+0F6E72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF6E72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F6EE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F6EE9   Length              0005 (5)\n+0F6EEB   Flags               01 (1) 'Modification'\n+0F6EEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F6EF0 PAYLOAD\n+\n+0F856D DATA DESCRIPTOR       08074B50 (134695760)\n+0F8571 CRC                   4BB1EABD (1269951165)\n+0F8575 Compressed Size       0000167D (5757)\n+0F8579 Uncompressed Size     0000167D (5757)\n+\n+0F857D LOCAL HEADER #408     04034B50 (67324752)\n+0F8581 Extract Zip Spec      14 (20) '2.0'\n+0F8582 Extract OS            00 (0) 'MS-DOS'\n+0F8583 General Purpose Flag  0000 (0)\n+0F8585 Compression Method    0000 (0) 'Stored'\n+0F8587 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F858B CRC                   00000000 (0)\n+0F858F Compressed Size       00000000 (0)\n+0F8593 Uncompressed Size     00000000 (0)\n+0F8597 Filename Length       005F (95)\n+0F8599 Extra Length          0009 (9)\n+0F859B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF859B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F85FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F85FC   Length              0005 (5)\n+0F85FE   Flags               01 (1) 'Modification'\n+0F85FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F8603 LOCAL HEADER #409     04034B50 (67324752)\n+0F8607 Extract Zip Spec      14 (20) '2.0'\n+0F8608 Extract OS            00 (0) 'MS-DOS'\n+0F8609 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F860B Compression Method    0000 (0) 'Stored'\n+0F860D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F8611 CRC                   00000000 (0)\n+0F8615 Compressed Size       00000000 (0)\n+0F8619 Uncompressed Size     00000000 (0)\n+0F861D Filename Length       0075 (117)\n+0F861F Extra Length          0009 (9)\n+0F8621 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF8621: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F8696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F8698   Length              0005 (5)\n+0F869A   Flags               01 (1) 'Modification'\n+0F869B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F869F PAYLOAD\n+\n+0FB929 DATA DESCRIPTOR       08074B50 (134695760)\n+0FB92D CRC                   A18A8EB9 (2710212281)\n+0FB931 Compressed Size       0000328A (12938)\n+0FB935 Uncompressed Size     0000328A (12938)\n+\n+0FB939 LOCAL HEADER #410     04034B50 (67324752)\n+0FB93D Extract Zip Spec      14 (20) '2.0'\n+0FB93E Extract OS            00 (0) 'MS-DOS'\n+0FB93F General Purpose Flag  0000 (0)\n+0FB941 Compression Method    0000 (0) 'Stored'\n+0FB943 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB947 CRC                   00000000 (0)\n+0FB94B Compressed Size       00000000 (0)\n+0FB94F Uncompressed Size     00000000 (0)\n+0FB953 Filename Length       005E (94)\n+0FB955 Extra Length          0009 (9)\n+0FB957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB9B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB9B7   Length              0005 (5)\n+0FB9B9   Flags               01 (1) 'Modification'\n+0FB9BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FB9BE LOCAL HEADER #411     04034B50 (67324752)\n+0FB9C2 Extract Zip Spec      14 (20) '2.0'\n+0FB9C3 Extract OS            00 (0) 'MS-DOS'\n+0FB9C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FB9C6 Compression Method    0000 (0) 'Stored'\n+0FB9C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB9CC CRC                   00000000 (0)\n+0FB9D0 Compressed Size       00000000 (0)\n+0FB9D4 Uncompressed Size     00000000 (0)\n+0FB9D8 Filename Length       0074 (116)\n+0FB9DA Extra Length          0009 (9)\n+0FB9DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB9DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FBA50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FBA52   Length              0005 (5)\n+0FBA54   Flags               01 (1) 'Modification'\n+0FBA55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FBA59 PAYLOAD\n+\n+0FF2D2 DATA DESCRIPTOR       08074B50 (134695760)\n+0FF2D6 CRC                   B7B762D6 (3082248918)\n+0FF2DA Compressed Size       00003879 (14457)\n+0FF2DE Uncompressed Size     00003879 (14457)\n+\n+0FF2E2 LOCAL HEADER #412     04034B50 (67324752)\n+0FF2E6 Extract Zip Spec      14 (20) '2.0'\n+0FF2E7 Extract OS            00 (0) 'MS-DOS'\n+0FF2E8 General Purpose Flag  0000 (0)\n+0FF2EA Compression Method    0000 (0) 'Stored'\n+0FF2EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF2F0 CRC                   00000000 (0)\n+0FF2F4 Compressed Size       00000000 (0)\n+0FF2F8 Uncompressed Size     00000000 (0)\n+0FF2FC Filename Length       0062 (98)\n+0FF2FE Extra Length          0009 (9)\n+0FF300 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF300: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF362 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF364   Length              0005 (5)\n+0FF366   Flags               01 (1) 'Modification'\n+0FF367   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FF36B LOCAL HEADER #413     04034B50 (67324752)\n+0FF36F Extract Zip Spec      14 (20) '2.0'\n+0FF370 Extract OS            00 (0) 'MS-DOS'\n+0FF371 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FF373 Compression Method    0000 (0) 'Stored'\n+0FF375 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF379 CRC                   00000000 (0)\n+0FF37D Compressed Size       00000000 (0)\n+0FF381 Uncompressed Size     00000000 (0)\n+0FF385 Filename Length       0078 (120)\n+0FF387 Extra Length          0009 (9)\n+0FF389 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF389: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF401 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF403   Length              0005 (5)\n+0FF405   Flags               01 (1) 'Modification'\n+0FF406   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FF40A PAYLOAD\n+\n+10155A DATA DESCRIPTOR       08074B50 (134695760)\n+10155E CRC                   A2B9D29A (2730087066)\n+101562 Compressed Size       00002150 (8528)\n+101566 Uncompressed Size     00002150 (8528)\n+\n+10156A LOCAL HEADER #414     04034B50 (67324752)\n+10156E Extract Zip Spec      14 (20) '2.0'\n+10156F Extract OS            00 (0) 'MS-DOS'\n+101570 General Purpose Flag  0000 (0)\n+101572 Compression Method    0000 (0) 'Stored'\n+101574 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+101578 CRC                   00000000 (0)\n+10157C Compressed Size       00000000 (0)\n+101580 Uncompressed Size     00000000 (0)\n+101584 Filename Length       005B (91)\n+101586 Extra Length          0009 (9)\n+101588 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x101588: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1015E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1015E5   Length              0005 (5)\n+1015E7   Flags               01 (1) 'Modification'\n+1015E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1015EC LOCAL HEADER #415     04034B50 (67324752)\n+1015F0 Extract Zip Spec      14 (20) '2.0'\n+1015F1 Extract OS            00 (0) 'MS-DOS'\n+1015F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1015F4 Compression Method    0000 (0) 'Stored'\n+1015F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1015FA CRC                   00000000 (0)\n+1015FE Compressed Size       00000000 (0)\n+101602 Uncompressed Size     00000000 (0)\n+101606 Filename Length       0071 (113)\n+101608 Extra Length          0009 (9)\n+10160A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10160A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10167B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10167D   Length              0005 (5)\n+10167F   Flags               01 (1) 'Modification'\n+101680   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+101684 PAYLOAD\n+\n+102860 DATA DESCRIPTOR       08074B50 (134695760)\n+102864 CRC                   C4FC7EA2 (3304881826)\n+102868 Compressed Size       000011DC (4572)\n+10286C Uncompressed Size     000011DC (4572)\n+\n+102870 LOCAL HEADER #416     04034B50 (67324752)\n+102874 Extract Zip Spec      14 (20) '2.0'\n+102875 Extract OS            00 (0) 'MS-DOS'\n+102876 General Purpose Flag  0000 (0)\n+102878 Compression Method    0000 (0) 'Stored'\n+10287A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10287E CRC                   00000000 (0)\n+102882 Compressed Size       00000000 (0)\n+102886 Uncompressed Size     00000000 (0)\n+10288A Filename Length       005E (94)\n+10288C Extra Length          0009 (9)\n+10288E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10288E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1028EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1028EE   Length              0005 (5)\n+1028F0   Flags               01 (1) 'Modification'\n+1028F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1028F5 LOCAL HEADER #417     04034B50 (67324752)\n+1028F9 Extract Zip Spec      14 (20) '2.0'\n+1028FA Extract OS            00 (0) 'MS-DOS'\n+1028FB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1028FD Compression Method    0000 (0) 'Stored'\n+1028FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+102903 CRC                   00000000 (0)\n+102907 Compressed Size       00000000 (0)\n+10290B Uncompressed Size     00000000 (0)\n+10290F Filename Length       0074 (116)\n+102911 Extra Length          0009 (9)\n+102913 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x102913: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+102987 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+102989   Length              0005 (5)\n+10298B   Flags               01 (1) 'Modification'\n+10298C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+102990 PAYLOAD\n+\n+109C8B DATA DESCRIPTOR       08074B50 (134695760)\n+109C8F CRC                   EE30A8D8 (3996166360)\n+109C93 Compressed Size       000072FB (29435)\n+109C97 Uncompressed Size     000072FB (29435)\n+\n+109C9B LOCAL HEADER #418     04034B50 (67324752)\n+109C9F Extract Zip Spec      14 (20) '2.0'\n+109CA0 Extract OS            00 (0) 'MS-DOS'\n+109CA1 General Purpose Flag  0000 (0)\n+109CA3 Compression Method    0000 (0) 'Stored'\n+109CA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109CA9 CRC                   00000000 (0)\n+109CAD Compressed Size       00000000 (0)\n+109CB1 Uncompressed Size     00000000 (0)\n+109CB5 Filename Length       0063 (99)\n+109CB7 Extra Length          0009 (9)\n+109CB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109CB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109D1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109D1E   Length              0005 (5)\n+109D20   Flags               01 (1) 'Modification'\n+109D21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+109D25 LOCAL HEADER #419     04034B50 (67324752)\n+109D29 Extract Zip Spec      14 (20) '2.0'\n+109D2A Extract OS            00 (0) 'MS-DOS'\n+109D2B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+109D2D Compression Method    0000 (0) 'Stored'\n+109D2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109D33 CRC                   00000000 (0)\n+109D37 Compressed Size       00000000 (0)\n+109D3B Uncompressed Size     00000000 (0)\n+109D3F Filename Length       0079 (121)\n+109D41 Extra Length          0009 (9)\n+109D43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109D43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109DBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109DBE   Length              0005 (5)\n+109DC0   Flags               01 (1) 'Modification'\n+109DC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+109DC5 PAYLOAD\n+\n+10A57B DATA DESCRIPTOR       08074B50 (134695760)\n+10A57F CRC                   CA474DE0 (3393670624)\n+10A583 Compressed Size       000007B6 (1974)\n+10A587 Uncompressed Size     000007B6 (1974)\n+\n+10A58B LOCAL HEADER #420     04034B50 (67324752)\n+10A58F Extract Zip Spec      14 (20) '2.0'\n+10A590 Extract OS            00 (0) 'MS-DOS'\n+10A591 General Purpose Flag  0000 (0)\n+10A593 Compression Method    0000 (0) 'Stored'\n+10A595 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10A599 CRC                   00000000 (0)\n+10A59D Compressed Size       00000000 (0)\n+10A5A1 Uncompressed Size     00000000 (0)\n+10A5A5 Filename Length       005F (95)\n+10A5A7 Extra Length          0009 (9)\n+10A5A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10A5A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10A608 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10A60A   Length              0005 (5)\n+10A60C   Flags               01 (1) 'Modification'\n+10A60D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10A611 LOCAL HEADER #421     04034B50 (67324752)\n+10A615 Extract Zip Spec      14 (20) '2.0'\n+10A616 Extract OS            00 (0) 'MS-DOS'\n+10A617 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10A619 Compression Method    0000 (0) 'Stored'\n+10A61B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10A61F CRC                   00000000 (0)\n+10A623 Compressed Size       00000000 (0)\n+10A627 Uncompressed Size     00000000 (0)\n+10A62B Filename Length       0075 (117)\n+10A62D Extra Length          0009 (9)\n+10A62F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10A62F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10A6A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10A6A6   Length              0005 (5)\n+10A6A8   Flags               01 (1) 'Modification'\n+10A6A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10A6AD PAYLOAD\n+\n+10B878 DATA DESCRIPTOR       08074B50 (134695760)\n+10B87C CRC                   A19F99D4 (2711591380)\n+10B880 Compressed Size       000011CB (4555)\n+10B884 Uncompressed Size     000011CB (4555)\n+\n+10B888 LOCAL HEADER #422     04034B50 (67324752)\n+10B88C Extract Zip Spec      14 (20) '2.0'\n+10B88D Extract OS            00 (0) 'MS-DOS'\n+10B88E General Purpose Flag  0000 (0)\n+10B890 Compression Method    0000 (0) 'Stored'\n+10B892 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10B896 CRC                   00000000 (0)\n+10B89A Compressed Size       00000000 (0)\n+10B89E Uncompressed Size     00000000 (0)\n+10B8A2 Filename Length       005B (91)\n+10B8A4 Extra Length          0009 (9)\n+10B8A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10B8A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10B901 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10B903   Length              0005 (5)\n+10B905   Flags               01 (1) 'Modification'\n+10B906   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10B90A LOCAL HEADER #423     04034B50 (67324752)\n+10B90E Extract Zip Spec      14 (20) '2.0'\n+10B90F Extract OS            00 (0) 'MS-DOS'\n+10B910 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10B912 Compression Method    0000 (0) 'Stored'\n+10B914 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10B918 CRC                   00000000 (0)\n+10B91C Compressed Size       00000000 (0)\n+10B920 Uncompressed Size     00000000 (0)\n+10B924 Filename Length       0071 (113)\n+10B926 Extra Length          0009 (9)\n+10B928 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10B928: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10B999 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10B99B   Length              0005 (5)\n+10B99D   Flags               01 (1) 'Modification'\n+10B99E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10B9A2 PAYLOAD\n+\n+10E1F1 DATA DESCRIPTOR       08074B50 (134695760)\n+10E1F5 CRC                   7573E84B (1970530379)\n+10E1F9 Compressed Size       0000284F (10319)\n+10E1FD Uncompressed Size     0000284F (10319)\n+\n+10E201 LOCAL HEADER #424     04034B50 (67324752)\n+10E205 Extract Zip Spec      14 (20) '2.0'\n+10E206 Extract OS            00 (0) 'MS-DOS'\n+10E207 General Purpose Flag  0000 (0)\n+10E209 Compression Method    0000 (0) 'Stored'\n+10E20B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10E20F CRC                   00000000 (0)\n+10E213 Compressed Size       00000000 (0)\n+10E217 Uncompressed Size     00000000 (0)\n+10E21B Filename Length       005F (95)\n+10E21D Extra Length          0009 (9)\n+10E21F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10E21F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10E27E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10E280   Length              0005 (5)\n+10E282   Flags               01 (1) 'Modification'\n+10E283   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10E287 LOCAL HEADER #425     04034B50 (67324752)\n+10E28B Extract Zip Spec      14 (20) '2.0'\n+10E28C Extract OS            00 (0) 'MS-DOS'\n+10E28D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10E28F Compression Method    0000 (0) 'Stored'\n+10E291 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10E295 CRC                   00000000 (0)\n+10E299 Compressed Size       00000000 (0)\n+10E29D Uncompressed Size     00000000 (0)\n+10E2A1 Filename Length       0075 (117)\n+10E2A3 Extra Length          0009 (9)\n+10E2A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10E2A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10E31A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10E31C   Length              0005 (5)\n+10E31E   Flags               01 (1) 'Modification'\n+10E31F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10E323 PAYLOAD\n+\n+110A9A DATA DESCRIPTOR       08074B50 (134695760)\n+110A9E CRC                   131CB9D8 (320649688)\n+110AA2 Compressed Size       00002777 (10103)\n+110AA6 Uncompressed Size     00002777 (10103)\n+\n+110AAA LOCAL HEADER #426     04034B50 (67324752)\n+110AAE Extract Zip Spec      14 (20) '2.0'\n+110AAF Extract OS            00 (0) 'MS-DOS'\n+110AB0 General Purpose Flag  0000 (0)\n+110AB2 Compression Method    0000 (0) 'Stored'\n+110AB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+110AB8 CRC                   00000000 (0)\n+110ABC Compressed Size       00000000 (0)\n+110AC0 Uncompressed Size     00000000 (0)\n+110AC4 Filename Length       005E (94)\n+110AC6 Extra Length          0009 (9)\n+110AC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x110AC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+110B26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+110B28   Length              0005 (5)\n+110B2A   Flags               01 (1) 'Modification'\n+110B2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+110B2F LOCAL HEADER #427     04034B50 (67324752)\n+110B33 Extract Zip Spec      14 (20) '2.0'\n+110B34 Extract OS            00 (0) 'MS-DOS'\n+110B35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+110B37 Compression Method    0000 (0) 'Stored'\n+110B39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+110B3D CRC                   00000000 (0)\n+110B41 Compressed Size       00000000 (0)\n+110B45 Uncompressed Size     00000000 (0)\n+110B49 Filename Length       0074 (116)\n+110B4B Extra Length          0009 (9)\n+110B4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x110B4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+110BC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+110BC3   Length              0005 (5)\n+110BC5   Flags               01 (1) 'Modification'\n+110BC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+110BCA PAYLOAD\n+\n+111CD7 DATA DESCRIPTOR       08074B50 (134695760)\n+111CDB CRC                   95FAB1DA (2516234714)\n+111CDF Compressed Size       0000110D (4365)\n+111CE3 Uncompressed Size     0000110D (4365)\n+\n+111CE7 LOCAL HEADER #428     04034B50 (67324752)\n+111CEB Extract Zip Spec      14 (20) '2.0'\n+111CEC Extract OS            00 (0) 'MS-DOS'\n+111CED General Purpose Flag  0000 (0)\n+111CEF Compression Method    0000 (0) 'Stored'\n+111CF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+111CF5 CRC                   00000000 (0)\n+111CF9 Compressed Size       00000000 (0)\n+111CFD Uncompressed Size     00000000 (0)\n+111D01 Filename Length       0061 (97)\n+111D03 Extra Length          0009 (9)\n+111D05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x111D05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+111D66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+111D68   Length              0005 (5)\n+111D6A   Flags               01 (1) 'Modification'\n+111D6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+111D6F LOCAL HEADER #429     04034B50 (67324752)\n+111D73 Extract Zip Spec      14 (20) '2.0'\n+111D74 Extract OS            00 (0) 'MS-DOS'\n+111D75 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+111D77 Compression Method    0000 (0) 'Stored'\n+111D79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+111D7D CRC                   00000000 (0)\n+111D81 Compressed Size       00000000 (0)\n+111D85 Uncompressed Size     00000000 (0)\n+111D89 Filename Length       0077 (119)\n+111D8B Extra Length          0009 (9)\n+111D8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x111D8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+111E04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+111E06   Length              0005 (5)\n+111E08   Flags               01 (1) 'Modification'\n+111E09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+111E0D PAYLOAD\n+\n+1137E3 DATA DESCRIPTOR       08074B50 (134695760)\n+1137E7 CRC                   B1E82858 (2984781912)\n+1137EB Compressed Size       000019D6 (6614)\n+1137EF Uncompressed Size     000019D6 (6614)\n+\n+1137F3 LOCAL HEADER #430     04034B50 (67324752)\n+1137F7 Extract Zip Spec      14 (20) '2.0'\n+1137F8 Extract OS            00 (0) 'MS-DOS'\n+1137F9 General Purpose Flag  0000 (0)\n+1137FB Compression Method    0000 (0) 'Stored'\n+1137FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+113801 CRC                   00000000 (0)\n+113805 Compressed Size       00000000 (0)\n+113809 Uncompressed Size     00000000 (0)\n+11380D Filename Length       005E (94)\n+11380F Extra Length          0009 (9)\n+113811 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x113811: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11386F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+113871   Length              0005 (5)\n+113873   Flags               01 (1) 'Modification'\n+113874   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+113878 LOCAL HEADER #431     04034B50 (67324752)\n+11387C Extract Zip Spec      14 (20) '2.0'\n+11387D Extract OS            00 (0) 'MS-DOS'\n+11387E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+113880 Compression Method    0000 (0) 'Stored'\n+113882 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+113886 CRC                   00000000 (0)\n+11388A Compressed Size       00000000 (0)\n+11388E Uncompressed Size     00000000 (0)\n+113892 Filename Length       0074 (116)\n+113894 Extra Length          0009 (9)\n+113896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x113896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11390A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11390C   Length              0005 (5)\n+11390E   Flags               01 (1) 'Modification'\n+11390F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+113913 PAYLOAD\n+\n+114891 DATA DESCRIPTOR       08074B50 (134695760)\n+114895 CRC                   EA13965E (3927152222)\n+114899 Compressed Size       00000F7E (3966)\n+11489D Uncompressed Size     00000F7E (3966)\n+\n+1148A1 LOCAL HEADER #432     04034B50 (67324752)\n+1148A5 Extract Zip Spec      14 (20) '2.0'\n+1148A6 Extract OS            00 (0) 'MS-DOS'\n+1148A7 General Purpose Flag  0000 (0)\n+1148A9 Compression Method    0000 (0) 'Stored'\n+1148AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1148AF CRC                   00000000 (0)\n+1148B3 Compressed Size       00000000 (0)\n+1148B7 Uncompressed Size     00000000 (0)\n+1148BB Filename Length       0057 (87)\n+1148BD Extra Length          0009 (9)\n+1148BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1148BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+114916 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+114918   Length              0005 (5)\n+11491A   Flags               01 (1) 'Modification'\n+11491B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11491F LOCAL HEADER #433     04034B50 (67324752)\n+114923 Extract Zip Spec      14 (20) '2.0'\n+114924 Extract OS            00 (0) 'MS-DOS'\n+114925 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+114927 Compression Method    0000 (0) 'Stored'\n+114929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11492D CRC                   00000000 (0)\n+114931 Compressed Size       00000000 (0)\n+114935 Uncompressed Size     00000000 (0)\n+114939 Filename Length       006D (109)\n+11493B Extra Length          0009 (9)\n+11493D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11493D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1149AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1149AC   Length              0005 (5)\n+1149AE   Flags               01 (1) 'Modification'\n+1149AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1149B3 PAYLOAD\n+\n+117689 DATA DESCRIPTOR       08074B50 (134695760)\n+11768D CRC                   C8903588 (3364894088)\n+117691 Compressed Size       00002CD6 (11478)\n+117695 Uncompressed Size     00002CD6 (11478)\n+\n+117699 LOCAL HEADER #434     04034B50 (67324752)\n+11769D Extract Zip Spec      14 (20) '2.0'\n+11769E Extract OS            00 (0) 'MS-DOS'\n+11769F General Purpose Flag  0000 (0)\n+1176A1 Compression Method    0000 (0) 'Stored'\n+1176A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1176A7 CRC                   00000000 (0)\n+1176AB Compressed Size       00000000 (0)\n+1176AF Uncompressed Size     00000000 (0)\n+1176B3 Filename Length       0068 (104)\n+1176B5 Extra Length          0009 (9)\n+1176B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1176B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11771F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+117721   Length              0005 (5)\n+117723   Flags               01 (1) 'Modification'\n+117724   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+117728 LOCAL HEADER #435     04034B50 (67324752)\n+11772C Extract Zip Spec      14 (20) '2.0'\n+11772D Extract OS            00 (0) 'MS-DOS'\n+11772E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+117730 Compression Method    0000 (0) 'Stored'\n+117732 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+117736 CRC                   00000000 (0)\n+11773A Compressed Size       00000000 (0)\n+11773E Uncompressed Size     00000000 (0)\n+117742 Filename Length       007E (126)\n+117744 Extra Length          0009 (9)\n+117746 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x117746: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1177C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1177C6   Length              0005 (5)\n+1177C8   Flags               01 (1) 'Modification'\n+1177C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1177CD PAYLOAD\n+\n+1181FC DATA DESCRIPTOR       08074B50 (134695760)\n+118200 CRC                   D19560D0 (3516227792)\n+118204 Compressed Size       00000A2F (2607)\n+118208 Uncompressed Size     00000A2F (2607)\n+\n+11820C LOCAL HEADER #436     04034B50 (67324752)\n+118210 Extract Zip Spec      14 (20) '2.0'\n+118211 Extract OS            00 (0) 'MS-DOS'\n+118212 General Purpose Flag  0000 (0)\n+118214 Compression Method    0000 (0) 'Stored'\n+118216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11821A CRC                   00000000 (0)\n+11821E Compressed Size       00000000 (0)\n+118222 Uncompressed Size     00000000 (0)\n+118226 Filename Length       0032 (50)\n+118228 Extra Length          0009 (9)\n+11822A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11822A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11825C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11825E   Length              0005 (5)\n+118260   Flags               01 (1) 'Modification'\n+118261   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+118265 LOCAL HEADER #437     04034B50 (67324752)\n+118269 Extract Zip Spec      14 (20) '2.0'\n+11826A Extract OS            00 (0) 'MS-DOS'\n+11826B General Purpose Flag  0000 (0)\n+11826D Compression Method    0000 (0) 'Stored'\n+11826F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+118273 CRC                   00000000 (0)\n+118277 Compressed Size       00000000 (0)\n+11827B Uncompressed Size     00000000 (0)\n+11827F Filename Length       0039 (57)\n+118281 Extra Length          0009 (9)\n+118283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x118283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1182BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1182BE   Length              0005 (5)\n+1182C0   Flags               01 (1) 'Modification'\n+1182C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1182C5 LOCAL HEADER #438     04034B50 (67324752)\n+1182C9 Extract Zip Spec      14 (20) '2.0'\n+1182CA Extract OS            00 (0) 'MS-DOS'\n+1182CB General Purpose Flag  0000 (0)\n+1182CD Compression Method    0000 (0) 'Stored'\n+1182CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1182D3 CRC                   00000000 (0)\n+1182D7 Compressed Size       00000000 (0)\n+1182DB Uncompressed Size     00000000 (0)\n+1182DF Filename Length       006F (111)\n+1182E1 Extra Length          0009 (9)\n+1182E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1182E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+118352 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+118354   Length              0005 (5)\n+118356   Flags               01 (1) 'Modification'\n+118357   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11835B LOCAL HEADER #439     04034B50 (67324752)\n+11835F Extract Zip Spec      14 (20) '2.0'\n+118360 Extract OS            00 (0) 'MS-DOS'\n+118361 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+118363 Compression Method    0000 (0) 'Stored'\n+118365 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+118369 CRC                   00000000 (0)\n+11836D Compressed Size       00000000 (0)\n+118371 Uncompressed Size     00000000 (0)\n+118375 Filename Length       0085 (133)\n+118377 Extra Length          0009 (9)\n+118379 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              X'\n #\n-# WARNING: Offset 0x11518E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x118379: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-115213 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-115215   Length              0005 (5)\n-115217   Flags               01 (1) 'Modification'\n-115218   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11521C PAYLOAD\n-\n-11A439 DATA DESCRIPTOR       08074B50 (134695760)\n-11A43D CRC                   A1414F13 (2705411859)\n-11A441 Compressed Size       0000521D (21021)\n-11A445 Uncompressed Size     0000521D (21021)\n-\n-11A449 LOCAL HEADER #440     04034B50 (67324752)\n-11A44D Extract Zip Spec      14 (20) '2.0'\n-11A44E Extract OS            00 (0) 'MS-DOS'\n-11A44F General Purpose Flag  0000 (0)\n-11A451 Compression Method    0000 (0) 'Stored'\n-11A453 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11A457 CRC                   00000000 (0)\n-11A45B Compressed Size       00000000 (0)\n-11A45F Uncompressed Size     00000000 (0)\n-11A463 Filename Length       002F (47)\n-11A465 Extra Length          0009 (9)\n-11A467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11A496 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11A498   Length              0005 (5)\n-11A49A   Flags               01 (1) 'Modification'\n-11A49B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11A49F LOCAL HEADER #441     04034B50 (67324752)\n-11A4A3 Extract Zip Spec      14 (20) '2.0'\n-11A4A4 Extract OS            00 (0) 'MS-DOS'\n-11A4A5 General Purpose Flag  0000 (0)\n-11A4A7 Compression Method    0000 (0) 'Stored'\n-11A4A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11A4AD CRC                   00000000 (0)\n-11A4B1 Compressed Size       00000000 (0)\n-11A4B5 Uncompressed Size     00000000 (0)\n-11A4B9 Filename Length       0036 (54)\n-11A4BB Extra Length          0009 (9)\n-11A4BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A4BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11A4F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11A4F5   Length              0005 (5)\n-11A4F7   Flags               01 (1) 'Modification'\n-11A4F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11A4FC LOCAL HEADER #442     04034B50 (67324752)\n-11A500 Extract Zip Spec      14 (20) '2.0'\n-11A501 Extract OS            00 (0) 'MS-DOS'\n-11A502 General Purpose Flag  0000 (0)\n-11A504 Compression Method    0000 (0) 'Stored'\n-11A506 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11A50A CRC                   00000000 (0)\n-11A50E Compressed Size       00000000 (0)\n-11A512 Uncompressed Size     00000000 (0)\n-11A516 Filename Length       006C (108)\n-11A518 Extra Length          0009 (9)\n-11A51A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A51A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11A586 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11A588   Length              0005 (5)\n-11A58A   Flags               01 (1) 'Modification'\n-11A58B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11A58F LOCAL HEADER #443     04034B50 (67324752)\n-11A593 Extract Zip Spec      14 (20) '2.0'\n-11A594 Extract OS            00 (0) 'MS-DOS'\n-11A595 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11A597 Compression Method    0000 (0) 'Stored'\n-11A599 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11A59D CRC                   00000000 (0)\n-11A5A1 Compressed Size       00000000 (0)\n-11A5A5 Uncompressed Size     00000000 (0)\n-11A5A9 Filename Length       0082 (130)\n-11A5AB Extra Length          0009 (9)\n-11A5AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A5AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11A62F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11A631   Length              0005 (5)\n-11A633   Flags               01 (1) 'Modification'\n-11A634   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11A638 PAYLOAD\n-\n-11F868 DATA DESCRIPTOR       08074B50 (134695760)\n-11F86C CRC                   CB05D09B (3406155931)\n-11F870 Compressed Size       00005230 (21040)\n-11F874 Uncompressed Size     00005230 (21040)\n-\n-11F878 LOCAL HEADER #444     04034B50 (67324752)\n-11F87C Extract Zip Spec      14 (20) '2.0'\n-11F87D Extract OS            00 (0) 'MS-DOS'\n-11F87E General Purpose Flag  0000 (0)\n-11F880 Compression Method    0000 (0) 'Stored'\n-11F882 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F886 CRC                   00000000 (0)\n-11F88A Compressed Size       00000000 (0)\n-11F88E Uncompressed Size     00000000 (0)\n-11F892 Filename Length       0033 (51)\n-11F894 Extra Length          0009 (9)\n-11F896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11F896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11F8C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11F8CB   Length              0005 (5)\n-11F8CD   Flags               01 (1) 'Modification'\n-11F8CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11F8D2 LOCAL HEADER #445     04034B50 (67324752)\n-11F8D6 Extract Zip Spec      14 (20) '2.0'\n-11F8D7 Extract OS            00 (0) 'MS-DOS'\n-11F8D8 General Purpose Flag  0000 (0)\n-11F8DA Compression Method    0000 (0) 'Stored'\n-11F8DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F8E0 CRC                   00000000 (0)\n-11F8E4 Compressed Size       00000000 (0)\n-11F8E8 Uncompressed Size     00000000 (0)\n-11F8EC Filename Length       003A (58)\n-11F8EE Extra Length          0009 (9)\n-11F8F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11F8F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11F92A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11F92C   Length              0005 (5)\n-11F92E   Flags               01 (1) 'Modification'\n-11F92F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11F933 LOCAL HEADER #446     04034B50 (67324752)\n-11F937 Extract Zip Spec      14 (20) '2.0'\n-11F938 Extract OS            00 (0) 'MS-DOS'\n-11F939 General Purpose Flag  0000 (0)\n-11F93B Compression Method    0000 (0) 'Stored'\n-11F93D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F941 CRC                   00000000 (0)\n-11F945 Compressed Size       00000000 (0)\n-11F949 Uncompressed Size     00000000 (0)\n-11F94D Filename Length       0070 (112)\n-11F94F Extra Length          0009 (9)\n-11F951 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11F951: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11F9C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11F9C3   Length              0005 (5)\n-11F9C5   Flags               01 (1) 'Modification'\n-11F9C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-11F9CA LOCAL HEADER #447     04034B50 (67324752)\n-11F9CE Extract Zip Spec      14 (20) '2.0'\n-11F9CF Extract OS            00 (0) 'MS-DOS'\n-11F9D0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-11F9D2 Compression Method    0000 (0) 'Stored'\n-11F9D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11F9D8 CRC                   00000000 (0)\n-11F9DC Compressed Size       00000000 (0)\n-11F9E0 Uncompressed Size     00000000 (0)\n-11F9E4 Filename Length       0086 (134)\n-11F9E6 Extra Length          0009 (9)\n-11F9E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1183FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+118400   Length              0005 (5)\n+118402   Flags               01 (1) 'Modification'\n+118403   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+118407 PAYLOAD\n+\n+11D624 DATA DESCRIPTOR       08074B50 (134695760)\n+11D628 CRC                   A1414F13 (2705411859)\n+11D62C Compressed Size       0000521D (21021)\n+11D630 Uncompressed Size     0000521D (21021)\n+\n+11D634 LOCAL HEADER #440     04034B50 (67324752)\n+11D638 Extract Zip Spec      14 (20) '2.0'\n+11D639 Extract OS            00 (0) 'MS-DOS'\n+11D63A General Purpose Flag  0000 (0)\n+11D63C Compression Method    0000 (0) 'Stored'\n+11D63E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11D642 CRC                   00000000 (0)\n+11D646 Compressed Size       00000000 (0)\n+11D64A Uncompressed Size     00000000 (0)\n+11D64E Filename Length       002F (47)\n+11D650 Extra Length          0009 (9)\n+11D652 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11D652: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11D681 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11D683   Length              0005 (5)\n+11D685   Flags               01 (1) 'Modification'\n+11D686   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11D68A LOCAL HEADER #441     04034B50 (67324752)\n+11D68E Extract Zip Spec      14 (20) '2.0'\n+11D68F Extract OS            00 (0) 'MS-DOS'\n+11D690 General Purpose Flag  0000 (0)\n+11D692 Compression Method    0000 (0) 'Stored'\n+11D694 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11D698 CRC                   00000000 (0)\n+11D69C Compressed Size       00000000 (0)\n+11D6A0 Uncompressed Size     00000000 (0)\n+11D6A4 Filename Length       0036 (54)\n+11D6A6 Extra Length          0009 (9)\n+11D6A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11D6A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11D6DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11D6E0   Length              0005 (5)\n+11D6E2   Flags               01 (1) 'Modification'\n+11D6E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11D6E7 LOCAL HEADER #442     04034B50 (67324752)\n+11D6EB Extract Zip Spec      14 (20) '2.0'\n+11D6EC Extract OS            00 (0) 'MS-DOS'\n+11D6ED General Purpose Flag  0000 (0)\n+11D6EF Compression Method    0000 (0) 'Stored'\n+11D6F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11D6F5 CRC                   00000000 (0)\n+11D6F9 Compressed Size       00000000 (0)\n+11D6FD Uncompressed Size     00000000 (0)\n+11D701 Filename Length       006C (108)\n+11D703 Extra Length          0009 (9)\n+11D705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11D705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11D771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11D773   Length              0005 (5)\n+11D775   Flags               01 (1) 'Modification'\n+11D776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+11D77A LOCAL HEADER #443     04034B50 (67324752)\n+11D77E Extract Zip Spec      14 (20) '2.0'\n+11D77F Extract OS            00 (0) 'MS-DOS'\n+11D780 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+11D782 Compression Method    0000 (0) 'Stored'\n+11D784 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11D788 CRC                   00000000 (0)\n+11D78C Compressed Size       00000000 (0)\n+11D790 Uncompressed Size     00000000 (0)\n+11D794 Filename Length       0082 (130)\n+11D796 Extra Length          0009 (9)\n+11D798 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11D798: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11D81A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11D81C   Length              0005 (5)\n+11D81E   Flags               01 (1) 'Modification'\n+11D81F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11D823 PAYLOAD\n+\n+122A53 DATA DESCRIPTOR       08074B50 (134695760)\n+122A57 CRC                   CB05D09B (3406155931)\n+122A5B Compressed Size       00005230 (21040)\n+122A5F Uncompressed Size     00005230 (21040)\n+\n+122A63 LOCAL HEADER #444     04034B50 (67324752)\n+122A67 Extract Zip Spec      14 (20) '2.0'\n+122A68 Extract OS            00 (0) 'MS-DOS'\n+122A69 General Purpose Flag  0000 (0)\n+122A6B Compression Method    0000 (0) 'Stored'\n+122A6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122A71 CRC                   00000000 (0)\n+122A75 Compressed Size       00000000 (0)\n+122A79 Uncompressed Size     00000000 (0)\n+122A7D Filename Length       0033 (51)\n+122A7F Extra Length          0009 (9)\n+122A81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x122A81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+122AB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122AB6   Length              0005 (5)\n+122AB8   Flags               01 (1) 'Modification'\n+122AB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+122ABD LOCAL HEADER #445     04034B50 (67324752)\n+122AC1 Extract Zip Spec      14 (20) '2.0'\n+122AC2 Extract OS            00 (0) 'MS-DOS'\n+122AC3 General Purpose Flag  0000 (0)\n+122AC5 Compression Method    0000 (0) 'Stored'\n+122AC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122ACB CRC                   00000000 (0)\n+122ACF Compressed Size       00000000 (0)\n+122AD3 Uncompressed Size     00000000 (0)\n+122AD7 Filename Length       003A (58)\n+122AD9 Extra Length          0009 (9)\n+122ADB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x122ADB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+122B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122B17   Length              0005 (5)\n+122B19   Flags               01 (1) 'Modification'\n+122B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+122B1E LOCAL HEADER #446     04034B50 (67324752)\n+122B22 Extract Zip Spec      14 (20) '2.0'\n+122B23 Extract OS            00 (0) 'MS-DOS'\n+122B24 General Purpose Flag  0000 (0)\n+122B26 Compression Method    0000 (0) 'Stored'\n+122B28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122B2C CRC                   00000000 (0)\n+122B30 Compressed Size       00000000 (0)\n+122B34 Uncompressed Size     00000000 (0)\n+122B38 Filename Length       0070 (112)\n+122B3A Extra Length          0009 (9)\n+122B3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x122B3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+122BAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122BAE   Length              0005 (5)\n+122BB0   Flags               01 (1) 'Modification'\n+122BB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+122BB5 LOCAL HEADER #447     04034B50 (67324752)\n+122BB9 Extract Zip Spec      14 (20) '2.0'\n+122BBA Extract OS            00 (0) 'MS-DOS'\n+122BBB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+122BBD Compression Method    0000 (0) 'Stored'\n+122BBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+122BC3 CRC                   00000000 (0)\n+122BC7 Compressed Size       00000000 (0)\n+122BCB Uncompressed Size     00000000 (0)\n+122BCF Filename Length       0086 (134)\n+122BD1 Extra Length          0009 (9)\n+122BD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x11F9E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x122BD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11FA6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11FA70   Length              0005 (5)\n-11FA72   Flags               01 (1) 'Modification'\n-11FA73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11FA77 PAYLOAD\n-\n-12037B DATA DESCRIPTOR       08074B50 (134695760)\n-12037F CRC                   17E2323C (400699964)\n-120383 Compressed Size       00000904 (2308)\n-120387 Uncompressed Size     00000904 (2308)\n-\n-12038B LOCAL HEADER #448     04034B50 (67324752)\n-12038F Extract Zip Spec      14 (20) '2.0'\n-120390 Extract OS            00 (0) 'MS-DOS'\n-120391 General Purpose Flag  0000 (0)\n-120393 Compression Method    0000 (0) 'Stored'\n-120395 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-120399 CRC                   00000000 (0)\n-12039D Compressed Size       00000000 (0)\n-1203A1 Uncompressed Size     00000000 (0)\n-1203A5 Filename Length       0030 (48)\n-1203A7 Extra Length          0009 (9)\n-1203A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1203A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1203D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1203DB   Length              0005 (5)\n-1203DD   Flags               01 (1) 'Modification'\n-1203DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1203E2 LOCAL HEADER #449     04034B50 (67324752)\n-1203E6 Extract Zip Spec      14 (20) '2.0'\n-1203E7 Extract OS            00 (0) 'MS-DOS'\n-1203E8 General Purpose Flag  0000 (0)\n-1203EA Compression Method    0000 (0) 'Stored'\n-1203EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1203F0 CRC                   00000000 (0)\n-1203F4 Compressed Size       00000000 (0)\n-1203F8 Uncompressed Size     00000000 (0)\n-1203FC Filename Length       0037 (55)\n-1203FE Extra Length          0009 (9)\n-120400 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x120400: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-120437 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-120439   Length              0005 (5)\n-12043B   Flags               01 (1) 'Modification'\n-12043C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-120440 LOCAL HEADER #450     04034B50 (67324752)\n-120444 Extract Zip Spec      14 (20) '2.0'\n-120445 Extract OS            00 (0) 'MS-DOS'\n-120446 General Purpose Flag  0000 (0)\n-120448 Compression Method    0000 (0) 'Stored'\n-12044A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12044E CRC                   00000000 (0)\n-120452 Compressed Size       00000000 (0)\n-120456 Uncompressed Size     00000000 (0)\n-12045A Filename Length       007B (123)\n-12045C Extra Length          0009 (9)\n-12045E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12045E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1204D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1204DB   Length              0005 (5)\n-1204DD   Flags               01 (1) 'Modification'\n-1204DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1204E2 LOCAL HEADER #451     04034B50 (67324752)\n-1204E6 Extract Zip Spec      14 (20) '2.0'\n-1204E7 Extract OS            00 (0) 'MS-DOS'\n-1204E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1204EA Compression Method    0000 (0) 'Stored'\n-1204EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1204F0 CRC                   00000000 (0)\n-1204F4 Compressed Size       00000000 (0)\n-1204F8 Uncompressed Size     00000000 (0)\n-1204FC Filename Length       0091 (145)\n-1204FE Extra Length          0009 (9)\n-120500 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+122C59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+122C5B   Length              0005 (5)\n+122C5D   Flags               01 (1) 'Modification'\n+122C5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+122C62 PAYLOAD\n+\n+123566 DATA DESCRIPTOR       08074B50 (134695760)\n+12356A CRC                   17E2323C (400699964)\n+12356E Compressed Size       00000904 (2308)\n+123572 Uncompressed Size     00000904 (2308)\n+\n+123576 LOCAL HEADER #448     04034B50 (67324752)\n+12357A Extract Zip Spec      14 (20) '2.0'\n+12357B Extract OS            00 (0) 'MS-DOS'\n+12357C General Purpose Flag  0000 (0)\n+12357E Compression Method    0000 (0) 'Stored'\n+123580 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+123584 CRC                   00000000 (0)\n+123588 Compressed Size       00000000 (0)\n+12358C Uncompressed Size     00000000 (0)\n+123590 Filename Length       0030 (48)\n+123592 Extra Length          0009 (9)\n+123594 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x123594: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1235C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1235C6   Length              0005 (5)\n+1235C8   Flags               01 (1) 'Modification'\n+1235C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1235CD LOCAL HEADER #449     04034B50 (67324752)\n+1235D1 Extract Zip Spec      14 (20) '2.0'\n+1235D2 Extract OS            00 (0) 'MS-DOS'\n+1235D3 General Purpose Flag  0000 (0)\n+1235D5 Compression Method    0000 (0) 'Stored'\n+1235D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1235DB CRC                   00000000 (0)\n+1235DF Compressed Size       00000000 (0)\n+1235E3 Uncompressed Size     00000000 (0)\n+1235E7 Filename Length       0037 (55)\n+1235E9 Extra Length          0009 (9)\n+1235EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1235EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+123622 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+123624   Length              0005 (5)\n+123626   Flags               01 (1) 'Modification'\n+123627   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+12362B LOCAL HEADER #450     04034B50 (67324752)\n+12362F Extract Zip Spec      14 (20) '2.0'\n+123630 Extract OS            00 (0) 'MS-DOS'\n+123631 General Purpose Flag  0000 (0)\n+123633 Compression Method    0000 (0) 'Stored'\n+123635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+123639 CRC                   00000000 (0)\n+12363D Compressed Size       00000000 (0)\n+123641 Uncompressed Size     00000000 (0)\n+123645 Filename Length       007B (123)\n+123647 Extra Length          0009 (9)\n+123649 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x123649: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1236C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1236C6   Length              0005 (5)\n+1236C8   Flags               01 (1) 'Modification'\n+1236C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1236CD LOCAL HEADER #451     04034B50 (67324752)\n+1236D1 Extract Zip Spec      14 (20) '2.0'\n+1236D2 Extract OS            00 (0) 'MS-DOS'\n+1236D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1236D5 Compression Method    0000 (0) 'Stored'\n+1236D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1236DB CRC                   00000000 (0)\n+1236DF Compressed Size       00000000 (0)\n+1236E3 Uncompressed Size     00000000 (0)\n+1236E7 Filename Length       0091 (145)\n+1236E9 Extra Length          0009 (9)\n+1236EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x120500: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1236EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-120591 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-120593   Length              0005 (5)\n-120595   Flags               01 (1) 'Modification'\n-120596   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12059A PAYLOAD\n-\n-1215D0 DATA DESCRIPTOR       08074B50 (134695760)\n-1215D4 CRC                   CC28EBBC (3425233852)\n-1215D8 Compressed Size       00001036 (4150)\n-1215DC Uncompressed Size     00001036 (4150)\n-\n-1215E0 LOCAL HEADER #452     04034B50 (67324752)\n-1215E4 Extract Zip Spec      14 (20) '2.0'\n-1215E5 Extract OS            00 (0) 'MS-DOS'\n-1215E6 General Purpose Flag  0000 (0)\n-1215E8 Compression Method    0000 (0) 'Stored'\n-1215EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1215EE CRC                   00000000 (0)\n-1215F2 Compressed Size       00000000 (0)\n-1215F6 Uncompressed Size     00000000 (0)\n-1215FA Filename Length       0031 (49)\n-1215FC Extra Length          0009 (9)\n-1215FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1215FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12162F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121631   Length              0005 (5)\n-121633   Flags               01 (1) 'Modification'\n-121634   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-121638 LOCAL HEADER #453     04034B50 (67324752)\n-12163C Extract Zip Spec      14 (20) '2.0'\n-12163D Extract OS            00 (0) 'MS-DOS'\n-12163E General Purpose Flag  0000 (0)\n-121640 Compression Method    0000 (0) 'Stored'\n-121642 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121646 CRC                   00000000 (0)\n-12164A Compressed Size       00000000 (0)\n-12164E Uncompressed Size     00000000 (0)\n-121652 Filename Length       0038 (56)\n-121654 Extra Length          0009 (9)\n-121656 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x121656: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12168E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121690   Length              0005 (5)\n-121692   Flags               01 (1) 'Modification'\n-121693   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-121697 LOCAL HEADER #454     04034B50 (67324752)\n-12169B Extract Zip Spec      14 (20) '2.0'\n-12169C Extract OS            00 (0) 'MS-DOS'\n-12169D General Purpose Flag  0000 (0)\n-12169F Compression Method    0000 (0) 'Stored'\n-1216A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1216A5 CRC                   00000000 (0)\n-1216A9 Compressed Size       00000000 (0)\n-1216AD Uncompressed Size     00000000 (0)\n-1216B1 Filename Length       006C (108)\n-1216B3 Extra Length          0009 (9)\n-1216B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1216B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-121721 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121723   Length              0005 (5)\n-121725   Flags               01 (1) 'Modification'\n-121726   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-12172A LOCAL HEADER #455     04034B50 (67324752)\n-12172E Extract Zip Spec      14 (20) '2.0'\n-12172F Extract OS            00 (0) 'MS-DOS'\n-121730 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-121732 Compression Method    0000 (0) 'Stored'\n-121734 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121738 CRC                   00000000 (0)\n-12173C Compressed Size       00000000 (0)\n-121740 Uncompressed Size     00000000 (0)\n-121744 Filename Length       0082 (130)\n-121746 Extra Length          0009 (9)\n-121748 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x121748: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1217CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1217CC   Length              0005 (5)\n-1217CE   Flags               01 (1) 'Modification'\n-1217CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1217D3 PAYLOAD\n-\n-1222A7 DATA DESCRIPTOR       08074B50 (134695760)\n-1222AB CRC                   3FC95820 (1070159904)\n-1222AF Compressed Size       00000AD4 (2772)\n-1222B3 Uncompressed Size     00000AD4 (2772)\n-\n-1222B7 LOCAL HEADER #456     04034B50 (67324752)\n-1222BB Extract Zip Spec      14 (20) '2.0'\n-1222BC Extract OS            00 (0) 'MS-DOS'\n-1222BD General Purpose Flag  0000 (0)\n-1222BF Compression Method    0000 (0) 'Stored'\n-1222C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1222C5 CRC                   00000000 (0)\n-1222C9 Compressed Size       00000000 (0)\n-1222CD Uncompressed Size     00000000 (0)\n-1222D1 Filename Length       0026 (38)\n-1222D3 Extra Length          0009 (9)\n-1222D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1222D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1222FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1222FD   Length              0005 (5)\n-1222FF   Flags               01 (1) 'Modification'\n-122300   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-122304 LOCAL HEADER #457     04034B50 (67324752)\n-122308 Extract Zip Spec      14 (20) '2.0'\n-122309 Extract OS            00 (0) 'MS-DOS'\n-12230A General Purpose Flag  0000 (0)\n-12230C Compression Method    0000 (0) 'Stored'\n-12230E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-122312 CRC                   00000000 (0)\n-122316 Compressed Size       00000000 (0)\n-12231A Uncompressed Size     00000000 (0)\n-12231E Filename Length       002D (45)\n-122320 Extra Length          0009 (9)\n-122322 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x122322: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12234F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-122351   Length              0005 (5)\n-122353   Flags               01 (1) 'Modification'\n-122354   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-122358 LOCAL HEADER #458     04034B50 (67324752)\n-12235C Extract Zip Spec      14 (20) '2.0'\n-12235D Extract OS            00 (0) 'MS-DOS'\n-12235E General Purpose Flag  0000 (0)\n-122360 Compression Method    0000 (0) 'Stored'\n-122362 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-122366 CRC                   00000000 (0)\n-12236A Compressed Size       00000000 (0)\n-12236E Uncompressed Size     00000000 (0)\n-122372 Filename Length       005B (91)\n-122374 Extra Length          0009 (9)\n-122376 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x122376: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1223D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1223D3   Length              0005 (5)\n-1223D5   Flags               01 (1) 'Modification'\n-1223D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1223DA LOCAL HEADER #459     04034B50 (67324752)\n-1223DE Extract Zip Spec      14 (20) '2.0'\n-1223DF Extract OS            00 (0) 'MS-DOS'\n-1223E0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1223E2 Compression Method    0000 (0) 'Stored'\n-1223E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1223E8 CRC                   00000000 (0)\n-1223EC Compressed Size       00000000 (0)\n-1223F0 Uncompressed Size     00000000 (0)\n-1223F4 Filename Length       0071 (113)\n-1223F6 Extra Length          0009 (9)\n-1223F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1223F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-122469 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12246B   Length              0005 (5)\n-12246D   Flags               01 (1) 'Modification'\n-12246E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-122472 PAYLOAD\n-\n-1231A1 DATA DESCRIPTOR       08074B50 (134695760)\n-1231A5 CRC                   41CBDE11 (1103879697)\n-1231A9 Compressed Size       00000D2F (3375)\n-1231AD Uncompressed Size     00000D2F (3375)\n-\n-1231B1 LOCAL HEADER #460     04034B50 (67324752)\n-1231B5 Extract Zip Spec      14 (20) '2.0'\n-1231B6 Extract OS            00 (0) 'MS-DOS'\n-1231B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1231B9 Compression Method    0000 (0) 'Stored'\n-1231BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1231BF CRC                   00000000 (0)\n-1231C3 Compressed Size       00000000 (0)\n-1231C7 Uncompressed Size     00000000 (0)\n-1231CB Filename Length       001A (26)\n-1231CD Extra Length          0009 (9)\n-1231CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1231CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1231E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1231EB   Length              0005 (5)\n-1231ED   Flags               01 (1) 'Modification'\n-1231EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1231F2 PAYLOAD\n-\n-5EC34E DATA DESCRIPTOR       08074B50 (134695760)\n-5EC352 CRC                   E80138A0 (3892394144)\n-5EC356 Compressed Size       004C915C (5017948)\n-5EC35A Uncompressed Size     004C915C (5017948)\n-\n-5EC35E CENTRAL HEADER #1     02014B50 (33639248)\n-5EC362 Created Zip Spec      14 (20) '2.0'\n-5EC363 Created OS            00 (0) 'MS-DOS'\n-5EC364 Extract Zip Spec      14 (20) '2.0'\n-5EC365 Extract OS            00 (0) 'MS-DOS'\n-5EC366 General Purpose Flag  0000 (0)\n-5EC368 Compression Method    0000 (0) 'Stored'\n-5EC36A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC36E CRC                   00000000 (0)\n-5EC372 Compressed Size       00000000 (0)\n-5EC376 Uncompressed Size     00000000 (0)\n-5EC37A Filename Length       0009 (9)\n-5EC37C Extra Length          0009 (9)\n-5EC37E Comment Length        0000 (0)\n-5EC380 Disk Start            0000 (0)\n-5EC382 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC384 Ext File Attributes   00000000 (0)\n-5EC388 Local Header Offset   00000000 (0)\n-5EC38C Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC38C: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC395 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC397   Length              0005 (5)\n-5EC399   Flags               01 (1) 'Modification'\n-5EC39A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC39E CENTRAL HEADER #2     02014B50 (33639248)\n-5EC3A2 Created Zip Spec      14 (20) '2.0'\n-5EC3A3 Created OS            00 (0) 'MS-DOS'\n-5EC3A4 Extract Zip Spec      14 (20) '2.0'\n-5EC3A5 Extract OS            00 (0) 'MS-DOS'\n-5EC3A6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC3A8 Compression Method    0000 (0) 'Stored'\n-5EC3AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC3AE CRC                   B1526E92 (2974969490)\n-5EC3B2 Compressed Size       00010EE9 (69353)\n-5EC3B6 Uncompressed Size     00010EE9 (69353)\n-5EC3BA Filename Length       0015 (21)\n-5EC3BC Extra Length          0009 (9)\n-5EC3BE Comment Length        0000 (0)\n-5EC3C0 Disk Start            0000 (0)\n-5EC3C2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC3C4 Ext File Attributes   00000000 (0)\n-5EC3C8 Local Header Offset   00000030 (48)\n-5EC3CC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC3CC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC3E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC3E3   Length              0005 (5)\n-5EC3E5   Flags               01 (1) 'Modification'\n-5EC3E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC3EA CENTRAL HEADER #3     02014B50 (33639248)\n-5EC3EE Created Zip Spec      14 (20) '2.0'\n-5EC3EF Created OS            00 (0) 'MS-DOS'\n-5EC3F0 Extract Zip Spec      14 (20) '2.0'\n-5EC3F1 Extract OS            00 (0) 'MS-DOS'\n-5EC3F2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC3F4 Compression Method    0000 (0) 'Stored'\n-5EC3F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC3FA CRC                   86E2B4B4 (2263004340)\n-5EC3FE Compressed Size       00002C5E (11358)\n-5EC402 Uncompressed Size     00002C5E (11358)\n-5EC406 Filename Length       0010 (16)\n-5EC408 Extra Length          0009 (9)\n-5EC40A Comment Length        0000 (0)\n-5EC40C Disk Start            0000 (0)\n-5EC40E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC410 Ext File Attributes   00000000 (0)\n-5EC414 Local Header Offset   00010F65 (69477)\n-5EC418 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC418: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC42A   Length              0005 (5)\n-5EC42C   Flags               01 (1) 'Modification'\n-5EC42D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC431 CENTRAL HEADER #4     02014B50 (33639248)\n-5EC435 Created Zip Spec      14 (20) '2.0'\n-5EC436 Created OS            00 (0) 'MS-DOS'\n-5EC437 Extract Zip Spec      14 (20) '2.0'\n-5EC438 Extract OS            00 (0) 'MS-DOS'\n-5EC439 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC43B Compression Method    0000 (0) 'Stored'\n-5EC43D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC441 CRC                   F4676394 (4100416404)\n-5EC445 Compressed Size       00000106 (262)\n-5EC449 Uncompressed Size     00000106 (262)\n-5EC44D Filename Length       0014 (20)\n-5EC44F Extra Length          0009 (9)\n-5EC451 Comment Length        0000 (0)\n-5EC453 Disk Start            0000 (0)\n-5EC455 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC457 Ext File Attributes   00000000 (0)\n-5EC45B Local Header Offset   00013C0A (80906)\n-5EC45F Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC45F: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC473 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC475   Length              0005 (5)\n-5EC477   Flags               01 (1) 'Modification'\n-5EC478   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC47C CENTRAL HEADER #5     02014B50 (33639248)\n-5EC480 Created Zip Spec      14 (20) '2.0'\n-5EC481 Created OS            00 (0) 'MS-DOS'\n-5EC482 Extract Zip Spec      14 (20) '2.0'\n-5EC483 Extract OS            00 (0) 'MS-DOS'\n-5EC484 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC486 Compression Method    0000 (0) 'Stored'\n-5EC488 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC48C CRC                   ADB3DE41 (2914246209)\n-5EC490 Compressed Size       000000A2 (162)\n-5EC494 Uncompressed Size     000000A2 (162)\n-5EC498 Filename Length       000F (15)\n-5EC49A Extra Length          0009 (9)\n-5EC49C Comment Length        0000 (0)\n-5EC49E Disk Start            0000 (0)\n-5EC4A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC4A2 Ext File Attributes   00000000 (0)\n-5EC4A6 Local Header Offset   00013D5B (81243)\n-5EC4AA Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC4AA: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC4B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC4BB   Length              0005 (5)\n-5EC4BD   Flags               01 (1) 'Modification'\n-5EC4BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC4C2 CENTRAL HEADER #6     02014B50 (33639248)\n-5EC4C6 Created Zip Spec      14 (20) '2.0'\n-5EC4C7 Created OS            00 (0) 'MS-DOS'\n-5EC4C8 Extract Zip Spec      14 (20) '2.0'\n-5EC4C9 Extract OS            00 (0) 'MS-DOS'\n-5EC4CA General Purpose Flag  0000 (0)\n-5EC4CC Compression Method    0000 (0) 'Stored'\n-5EC4CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC4D2 CRC                   00000000 (0)\n-5EC4D6 Compressed Size       00000000 (0)\n-5EC4DA Uncompressed Size     00000000 (0)\n-5EC4DE Filename Length       000F (15)\n-5EC4E0 Extra Length          0009 (9)\n-5EC4E2 Comment Length        0000 (0)\n-5EC4E4 Disk Start            0000 (0)\n-5EC4E6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC4E8 Ext File Attributes   00000000 (0)\n-5EC4EC Local Header Offset   00013E43 (81475)\n-5EC4F0 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC4F0: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC4FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC501   Length              0005 (5)\n-5EC503   Flags               01 (1) 'Modification'\n-5EC504   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC508 CENTRAL HEADER #7     02014B50 (33639248)\n-5EC50C Created Zip Spec      14 (20) '2.0'\n-5EC50D Created OS            00 (0) 'MS-DOS'\n-5EC50E Extract Zip Spec      14 (20) '2.0'\n-5EC50F Extract OS            00 (0) 'MS-DOS'\n-5EC510 General Purpose Flag  0000 (0)\n-5EC512 Compression Method    0000 (0) 'Stored'\n-5EC514 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC518 CRC                   00000000 (0)\n-5EC51C Compressed Size       00000000 (0)\n-5EC520 Uncompressed Size     00000000 (0)\n-5EC524 Filename Length       001F (31)\n-5EC526 Extra Length          0009 (9)\n-5EC528 Comment Length        0000 (0)\n-5EC52A Disk Start            0000 (0)\n-5EC52C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC52E Ext File Attributes   00000000 (0)\n-5EC532 Local Header Offset   00013E79 (81529)\n-5EC536 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC536: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC555 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC557   Length              0005 (5)\n-5EC559   Flags               01 (1) 'Modification'\n-5EC55A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC55E CENTRAL HEADER #8     02014B50 (33639248)\n-5EC562 Created Zip Spec      14 (20) '2.0'\n-5EC563 Created OS            00 (0) 'MS-DOS'\n-5EC564 Extract Zip Spec      14 (20) '2.0'\n-5EC565 Extract OS            00 (0) 'MS-DOS'\n-5EC566 General Purpose Flag  0000 (0)\n-5EC568 Compression Method    0000 (0) 'Stored'\n-5EC56A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC56E CRC                   00000000 (0)\n-5EC572 Compressed Size       00000000 (0)\n-5EC576 Uncompressed Size     00000000 (0)\n-5EC57A Filename Length       0035 (53)\n-5EC57C Extra Length          0009 (9)\n-5EC57E Comment Length        0000 (0)\n-5EC580 Disk Start            0000 (0)\n-5EC582 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC584 Ext File Attributes   00000000 (0)\n-5EC588 Local Header Offset   00013EBF (81599)\n-5EC58C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC58C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC5C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC5C3   Length              0005 (5)\n-5EC5C5   Flags               01 (1) 'Modification'\n-5EC5C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC5CA CENTRAL HEADER #9     02014B50 (33639248)\n-5EC5CE Created Zip Spec      14 (20) '2.0'\n-5EC5CF Created OS            00 (0) 'MS-DOS'\n-5EC5D0 Extract Zip Spec      14 (20) '2.0'\n-5EC5D1 Extract OS            00 (0) 'MS-DOS'\n-5EC5D2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC5D4 Compression Method    0000 (0) 'Stored'\n-5EC5D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC5DA CRC                   00000000 (0)\n-5EC5DE Compressed Size       00000000 (0)\n-5EC5E2 Uncompressed Size     00000000 (0)\n-5EC5E6 Filename Length       0043 (67)\n-5EC5E8 Extra Length          0009 (9)\n-5EC5EA Comment Length        0000 (0)\n-5EC5EC Disk Start            0000 (0)\n-5EC5EE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC5F0 Ext File Attributes   00000000 (0)\n-5EC5F4 Local Header Offset   00013F1B (81691)\n-5EC5F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC5F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC63B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC63D   Length              0005 (5)\n-5EC63F   Flags               01 (1) 'Modification'\n-5EC640   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC644 CENTRAL HEADER #10    02014B50 (33639248)\n-5EC648 Created Zip Spec      14 (20) '2.0'\n-5EC649 Created OS            00 (0) 'MS-DOS'\n-5EC64A Extract Zip Spec      14 (20) '2.0'\n-5EC64B Extract OS            00 (0) 'MS-DOS'\n-5EC64C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC64E Compression Method    0000 (0) 'Stored'\n-5EC650 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC654 CRC                   9A3E6BCB (2587782091)\n-5EC658 Compressed Size       00001B44 (6980)\n-5EC65C Uncompressed Size     00001B44 (6980)\n-5EC660 Filename Length       003C (60)\n-5EC662 Extra Length          0009 (9)\n-5EC664 Comment Length        0000 (0)\n-5EC666 Disk Start            0000 (0)\n-5EC668 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC66A Ext File Attributes   00000000 (0)\n-5EC66E Local Header Offset   00013F95 (81813)\n-5EC672 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC672: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC6AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC6B0   Length              0005 (5)\n-5EC6B2   Flags               01 (1) 'Modification'\n-5EC6B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC6B7 CENTRAL HEADER #11    02014B50 (33639248)\n-5EC6BB Created Zip Spec      14 (20) '2.0'\n-5EC6BC Created OS            00 (0) 'MS-DOS'\n-5EC6BD Extract Zip Spec      14 (20) '2.0'\n-5EC6BE Extract OS            00 (0) 'MS-DOS'\n-5EC6BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC6C1 Compression Method    0000 (0) 'Stored'\n-5EC6C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC6C7 CRC                   1DC40AAB (499387051)\n-5EC6CB Compressed Size       000004D7 (1239)\n-5EC6CF Uncompressed Size     000004D7 (1239)\n-5EC6D3 Filename Length       0010 (16)\n-5EC6D5 Extra Length          0009 (9)\n-5EC6D7 Comment Length        0000 (0)\n-5EC6D9 Disk Start            0000 (0)\n-5EC6DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC6DD Ext File Attributes   00000000 (0)\n-5EC6E1 Local Header Offset   00015B4C (88908)\n-5EC6E5 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC6E5: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC6F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC6F7   Length              0005 (5)\n-5EC6F9   Flags               01 (1) 'Modification'\n-5EC6FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC6FE CENTRAL HEADER #12    02014B50 (33639248)\n-5EC702 Created Zip Spec      14 (20) '2.0'\n-5EC703 Created OS            00 (0) 'MS-DOS'\n-5EC704 Extract Zip Spec      14 (20) '2.0'\n-5EC705 Extract OS            00 (0) 'MS-DOS'\n-5EC706 General Purpose Flag  0000 (0)\n-5EC708 Compression Method    0000 (0) 'Stored'\n-5EC70A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC70E CRC                   00000000 (0)\n-5EC712 Compressed Size       00000000 (0)\n-5EC716 Uncompressed Size     00000000 (0)\n-5EC71A Filename Length       0005 (5)\n-5EC71C Extra Length          0009 (9)\n-5EC71E Comment Length        0000 (0)\n-5EC720 Disk Start            0000 (0)\n-5EC722 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC724 Ext File Attributes   00000000 (0)\n-5EC728 Local Header Offset   0001606A (90218)\n-5EC72C Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x5EC72C: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-5EC731 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC733   Length              0005 (5)\n-5EC735   Flags               01 (1) 'Modification'\n-5EC736   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC73A CENTRAL HEADER #13    02014B50 (33639248)\n-5EC73E Created Zip Spec      14 (20) '2.0'\n-5EC73F Created OS            00 (0) 'MS-DOS'\n-5EC740 Extract Zip Spec      14 (20) '2.0'\n-5EC741 Extract OS            00 (0) 'MS-DOS'\n-5EC742 General Purpose Flag  0000 (0)\n-5EC744 Compression Method    0000 (0) 'Stored'\n-5EC746 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC74A CRC                   00000000 (0)\n-5EC74E Compressed Size       00000000 (0)\n-5EC752 Uncompressed Size     00000000 (0)\n-5EC756 Filename Length       0015 (21)\n-5EC758 Extra Length          0009 (9)\n-5EC75A Comment Length        0000 (0)\n-5EC75C Disk Start            0000 (0)\n-5EC75E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC760 Ext File Attributes   00000000 (0)\n-5EC764 Local Header Offset   00016096 (90262)\n-5EC768 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC768: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC77D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC77F   Length              0005 (5)\n-5EC781   Flags               01 (1) 'Modification'\n-5EC782   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC786 CENTRAL HEADER #14    02014B50 (33639248)\n-5EC78A Created Zip Spec      14 (20) '2.0'\n-5EC78B Created OS            00 (0) 'MS-DOS'\n-5EC78C Extract Zip Spec      14 (20) '2.0'\n-5EC78D Extract OS            00 (0) 'MS-DOS'\n-5EC78E General Purpose Flag  0000 (0)\n-5EC790 Compression Method    0000 (0) 'Stored'\n-5EC792 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC796 CRC                   00000000 (0)\n-5EC79A Compressed Size       00000000 (0)\n-5EC79E Uncompressed Size     00000000 (0)\n-5EC7A2 Filename Length       0027 (39)\n-5EC7A4 Extra Length          0009 (9)\n-5EC7A6 Comment Length        0000 (0)\n-5EC7A8 Disk Start            0000 (0)\n-5EC7AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC7AC Ext File Attributes   00000000 (0)\n-5EC7B0 Local Header Offset   000160D2 (90322)\n-5EC7B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC7B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC7DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC7DD   Length              0005 (5)\n-5EC7DF   Flags               01 (1) 'Modification'\n-5EC7E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC7E4 CENTRAL HEADER #15    02014B50 (33639248)\n-5EC7E8 Created Zip Spec      14 (20) '2.0'\n-5EC7E9 Created OS            00 (0) 'MS-DOS'\n-5EC7EA Extract Zip Spec      14 (20) '2.0'\n-5EC7EB Extract OS            00 (0) 'MS-DOS'\n-5EC7EC General Purpose Flag  0000 (0)\n-5EC7EE Compression Method    0000 (0) 'Stored'\n-5EC7F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC7F4 CRC                   00000000 (0)\n-5EC7F8 Compressed Size       00000000 (0)\n-5EC7FC Uncompressed Size     00000000 (0)\n-5EC800 Filename Length       002E (46)\n-5EC802 Extra Length          0009 (9)\n-5EC804 Comment Length        0000 (0)\n-5EC806 Disk Start            0000 (0)\n-5EC808 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC80A Ext File Attributes   00000000 (0)\n-5EC80E Local Header Offset   00016120 (90400)\n-5EC812 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC812: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC840 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC842   Length              0005 (5)\n-5EC844   Flags               01 (1) 'Modification'\n-5EC845   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC849 CENTRAL HEADER #16    02014B50 (33639248)\n-5EC84D Created Zip Spec      14 (20) '2.0'\n-5EC84E Created OS            00 (0) 'MS-DOS'\n-5EC84F Extract Zip Spec      14 (20) '2.0'\n-5EC850 Extract OS            00 (0) 'MS-DOS'\n-5EC851 General Purpose Flag  0000 (0)\n-5EC853 Compression Method    0000 (0) 'Stored'\n-5EC855 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC859 CRC                   00000000 (0)\n-5EC85D Compressed Size       00000000 (0)\n-5EC861 Uncompressed Size     00000000 (0)\n-5EC865 Filename Length       0065 (101)\n-5EC867 Extra Length          0009 (9)\n-5EC869 Comment Length        0000 (0)\n-5EC86B Disk Start            0000 (0)\n-5EC86D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC86F Ext File Attributes   00000000 (0)\n-5EC873 Local Header Offset   00016175 (90485)\n-5EC877 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC877: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC8DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC8DE   Length              0005 (5)\n-5EC8E0   Flags               01 (1) 'Modification'\n-5EC8E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC8E5 CENTRAL HEADER #17    02014B50 (33639248)\n-5EC8E9 Created Zip Spec      14 (20) '2.0'\n-5EC8EA Created OS            00 (0) 'MS-DOS'\n-5EC8EB Extract Zip Spec      14 (20) '2.0'\n-5EC8EC Extract OS            00 (0) 'MS-DOS'\n-5EC8ED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EC8EF Compression Method    0000 (0) 'Stored'\n-5EC8F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC8F5 CRC                   9CB4EC6B (2629102699)\n-5EC8F9 Compressed Size       00000AA2 (2722)\n-5EC8FD Uncompressed Size     00000AA2 (2722)\n-5EC901 Filename Length       007B (123)\n-5EC903 Extra Length          0009 (9)\n-5EC905 Comment Length        0000 (0)\n-5EC907 Disk Start            0000 (0)\n-5EC909 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC90B Ext File Attributes   00000000 (0)\n-5EC90F Local Header Offset   00016201 (90625)\n-5EC913 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC913: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC98E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC990   Length              0005 (5)\n-5EC992   Flags               01 (1) 'Modification'\n-5EC993   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC997 CENTRAL HEADER #18    02014B50 (33639248)\n-5EC99B Created Zip Spec      14 (20) '2.0'\n-5EC99C Created OS            00 (0) 'MS-DOS'\n-5EC99D Extract Zip Spec      14 (20) '2.0'\n-5EC99E Extract OS            00 (0) 'MS-DOS'\n-5EC99F General Purpose Flag  0000 (0)\n-5EC9A1 Compression Method    0000 (0) 'Stored'\n-5EC9A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EC9A7 CRC                   00000000 (0)\n-5EC9AB Compressed Size       00000000 (0)\n-5EC9AF Uncompressed Size     00000000 (0)\n-5EC9B3 Filename Length       0025 (37)\n-5EC9B5 Extra Length          0009 (9)\n-5EC9B7 Comment Length        0000 (0)\n-5EC9B9 Disk Start            0000 (0)\n-5EC9BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EC9BD Ext File Attributes   00000000 (0)\n-5EC9C1 Local Header Offset   00016D55 (93525)\n-5EC9C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC9C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EC9EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EC9EC   Length              0005 (5)\n-5EC9EE   Flags               01 (1) 'Modification'\n-5EC9EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EC9F3 CENTRAL HEADER #19    02014B50 (33639248)\n-5EC9F7 Created Zip Spec      14 (20) '2.0'\n-5EC9F8 Created OS            00 (0) 'MS-DOS'\n-5EC9F9 Extract Zip Spec      14 (20) '2.0'\n-5EC9FA Extract OS            00 (0) 'MS-DOS'\n-5EC9FB General Purpose Flag  0000 (0)\n-5EC9FD Compression Method    0000 (0) 'Stored'\n-5EC9FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECA03 CRC                   00000000 (0)\n-5ECA07 Compressed Size       00000000 (0)\n-5ECA0B Uncompressed Size     00000000 (0)\n-5ECA0F Filename Length       002C (44)\n-5ECA11 Extra Length          0009 (9)\n-5ECA13 Comment Length        0000 (0)\n-5ECA15 Disk Start            0000 (0)\n-5ECA17 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECA19 Ext File Attributes   00000000 (0)\n-5ECA1D Local Header Offset   00016DA1 (93601)\n-5ECA21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECA21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECA4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECA4F   Length              0005 (5)\n-5ECA51   Flags               01 (1) 'Modification'\n-5ECA52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECA56 CENTRAL HEADER #20    02014B50 (33639248)\n-5ECA5A Created Zip Spec      14 (20) '2.0'\n-5ECA5B Created OS            00 (0) 'MS-DOS'\n-5ECA5C Extract Zip Spec      14 (20) '2.0'\n-5ECA5D Extract OS            00 (0) 'MS-DOS'\n-5ECA5E General Purpose Flag  0000 (0)\n-5ECA60 Compression Method    0000 (0) 'Stored'\n-5ECA62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECA66 CRC                   00000000 (0)\n-5ECA6A Compressed Size       00000000 (0)\n-5ECA6E Uncompressed Size     00000000 (0)\n-5ECA72 Filename Length       0061 (97)\n-5ECA74 Extra Length          0009 (9)\n-5ECA76 Comment Length        0000 (0)\n-5ECA78 Disk Start            0000 (0)\n-5ECA7A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECA7C Ext File Attributes   00000000 (0)\n-5ECA80 Local Header Offset   00016DF4 (93684)\n-5ECA84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECA84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECAE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECAE7   Length              0005 (5)\n-5ECAE9   Flags               01 (1) 'Modification'\n-5ECAEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECAEE CENTRAL HEADER #21    02014B50 (33639248)\n-5ECAF2 Created Zip Spec      14 (20) '2.0'\n-5ECAF3 Created OS            00 (0) 'MS-DOS'\n-5ECAF4 Extract Zip Spec      14 (20) '2.0'\n-5ECAF5 Extract OS            00 (0) 'MS-DOS'\n-5ECAF6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ECAF8 Compression Method    0000 (0) 'Stored'\n-5ECAFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECAFE CRC                   1401A9F3 (335653363)\n-5ECB02 Compressed Size       00000945 (2373)\n-5ECB06 Uncompressed Size     00000945 (2373)\n-5ECB0A Filename Length       0077 (119)\n-5ECB0C Extra Length          0009 (9)\n-5ECB0E Comment Length        0000 (0)\n-5ECB10 Disk Start            0000 (0)\n-5ECB12 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECB14 Ext File Attributes   00000000 (0)\n-5ECB18 Local Header Offset   00016E7C (93820)\n-5ECB1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECB1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECB93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECB95   Length              0005 (5)\n-5ECB97   Flags               01 (1) 'Modification'\n-5ECB98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECB9C CENTRAL HEADER #22    02014B50 (33639248)\n-5ECBA0 Created Zip Spec      14 (20) '2.0'\n-5ECBA1 Created OS            00 (0) 'MS-DOS'\n-5ECBA2 Extract Zip Spec      14 (20) '2.0'\n-5ECBA3 Extract OS            00 (0) 'MS-DOS'\n-5ECBA4 General Purpose Flag  0000 (0)\n-5ECBA6 Compression Method    0000 (0) 'Stored'\n-5ECBA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECBAC CRC                   00000000 (0)\n-5ECBB0 Compressed Size       00000000 (0)\n-5ECBB4 Uncompressed Size     00000000 (0)\n-5ECBB8 Filename Length       0023 (35)\n-5ECBBA Extra Length          0009 (9)\n-5ECBBC Comment Length        0000 (0)\n-5ECBBE Disk Start            0000 (0)\n-5ECBC0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECBC2 Ext File Attributes   00000000 (0)\n-5ECBC6 Local Header Offset   0001786F (96367)\n-5ECBCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECBCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECBED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECBEF   Length              0005 (5)\n-5ECBF1   Flags               01 (1) 'Modification'\n-5ECBF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECBF6 CENTRAL HEADER #23    02014B50 (33639248)\n-5ECBFA Created Zip Spec      14 (20) '2.0'\n-5ECBFB Created OS            00 (0) 'MS-DOS'\n-5ECBFC Extract Zip Spec      14 (20) '2.0'\n-5ECBFD Extract OS            00 (0) 'MS-DOS'\n-5ECBFE General Purpose Flag  0000 (0)\n-5ECC00 Compression Method    0000 (0) 'Stored'\n-5ECC02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECC06 CRC                   00000000 (0)\n-5ECC0A Compressed Size       00000000 (0)\n-5ECC0E Uncompressed Size     00000000 (0)\n-5ECC12 Filename Length       002A (42)\n-5ECC14 Extra Length          0009 (9)\n-5ECC16 Comment Length        0000 (0)\n-5ECC18 Disk Start            0000 (0)\n-5ECC1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECC1C Ext File Attributes   00000000 (0)\n-5ECC20 Local Header Offset   000178B9 (96441)\n-5ECC24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECC24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECC4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECC50   Length              0005 (5)\n-5ECC52   Flags               01 (1) 'Modification'\n-5ECC53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECC57 CENTRAL HEADER #24    02014B50 (33639248)\n-5ECC5B Created Zip Spec      14 (20) '2.0'\n-5ECC5C Created OS            00 (0) 'MS-DOS'\n-5ECC5D Extract Zip Spec      14 (20) '2.0'\n-5ECC5E Extract OS            00 (0) 'MS-DOS'\n-5ECC5F General Purpose Flag  0000 (0)\n-5ECC61 Compression Method    0000 (0) 'Stored'\n-5ECC63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECC67 CRC                   00000000 (0)\n-5ECC6B Compressed Size       00000000 (0)\n-5ECC6F Uncompressed Size     00000000 (0)\n-5ECC73 Filename Length       0056 (86)\n-5ECC75 Extra Length          0009 (9)\n-5ECC77 Comment Length        0000 (0)\n-5ECC79 Disk Start            0000 (0)\n-5ECC7B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECC7D Ext File Attributes   00000000 (0)\n-5ECC81 Local Header Offset   0001790A (96522)\n-5ECC85 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECC85: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECCDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECCDD   Length              0005 (5)\n-5ECCDF   Flags               01 (1) 'Modification'\n-5ECCE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECCE4 CENTRAL HEADER #25    02014B50 (33639248)\n-5ECCE8 Created Zip Spec      14 (20) '2.0'\n-5ECCE9 Created OS            00 (0) 'MS-DOS'\n-5ECCEA Extract Zip Spec      14 (20) '2.0'\n-5ECCEB Extract OS            00 (0) 'MS-DOS'\n-5ECCEC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ECCEE Compression Method    0000 (0) 'Stored'\n-5ECCF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECCF4 CRC                   445AD7B2 (1146804146)\n-5ECCF8 Compressed Size       00000FBF (4031)\n-5ECCFC Uncompressed Size     00000FBF (4031)\n-5ECD00 Filename Length       006C (108)\n-5ECD02 Extra Length          0009 (9)\n-5ECD04 Comment Length        0000 (0)\n-5ECD06 Disk Start            0000 (0)\n-5ECD08 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECD0A Ext File Attributes   00000000 (0)\n-5ECD0E Local Header Offset   00017987 (96647)\n-5ECD12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECD12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECD7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECD80   Length              0005 (5)\n-5ECD82   Flags               01 (1) 'Modification'\n-5ECD83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECD87 CENTRAL HEADER #26    02014B50 (33639248)\n-5ECD8B Created Zip Spec      14 (20) '2.0'\n-5ECD8C Created OS            00 (0) 'MS-DOS'\n-5ECD8D Extract Zip Spec      14 (20) '2.0'\n-5ECD8E Extract OS            00 (0) 'MS-DOS'\n-5ECD8F General Purpose Flag  0000 (0)\n-5ECD91 Compression Method    0000 (0) 'Stored'\n-5ECD93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECD97 CRC                   00000000 (0)\n-5ECD9B Compressed Size       00000000 (0)\n-5ECD9F Uncompressed Size     00000000 (0)\n-5ECDA3 Filename Length       0056 (86)\n-5ECDA5 Extra Length          0009 (9)\n-5ECDA7 Comment Length        0000 (0)\n-5ECDA9 Disk Start            0000 (0)\n-5ECDAB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECDAD Ext File Attributes   00000000 (0)\n-5ECDB1 Local Header Offset   000189E9 (100841)\n-5ECDB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECDB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECE0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECE0D   Length              0005 (5)\n-5ECE0F   Flags               01 (1) 'Modification'\n-5ECE10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECE14 CENTRAL HEADER #27    02014B50 (33639248)\n-5ECE18 Created Zip Spec      14 (20) '2.0'\n-5ECE19 Created OS            00 (0) 'MS-DOS'\n-5ECE1A Extract Zip Spec      14 (20) '2.0'\n-5ECE1B Extract OS            00 (0) 'MS-DOS'\n-5ECE1C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ECE1E Compression Method    0000 (0) 'Stored'\n-5ECE20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECE24 CRC                   A2A96EA2 (2729012898)\n-5ECE28 Compressed Size       000016DE (5854)\n-5ECE2C Uncompressed Size     000016DE (5854)\n-5ECE30 Filename Length       006C (108)\n-5ECE32 Extra Length          0009 (9)\n-5ECE34 Comment Length        0000 (0)\n-5ECE36 Disk Start            0000 (0)\n-5ECE38 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECE3A Ext File Attributes   00000000 (0)\n-5ECE3E Local Header Offset   00018A66 (100966)\n-5ECE42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECE42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECEAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECEB0   Length              0005 (5)\n-5ECEB2   Flags               01 (1) 'Modification'\n-5ECEB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECEB7 CENTRAL HEADER #28    02014B50 (33639248)\n-5ECEBB Created Zip Spec      14 (20) '2.0'\n-5ECEBC Created OS            00 (0) 'MS-DOS'\n-5ECEBD Extract Zip Spec      14 (20) '2.0'\n-5ECEBE Extract OS            00 (0) 'MS-DOS'\n-5ECEBF General Purpose Flag  0000 (0)\n-5ECEC1 Compression Method    0000 (0) 'Stored'\n-5ECEC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECEC7 CRC                   00000000 (0)\n-5ECECB Compressed Size       00000000 (0)\n-5ECECF Uncompressed Size     00000000 (0)\n-5ECED3 Filename Length       002F (47)\n-5ECED5 Extra Length          0009 (9)\n-5ECED7 Comment Length        0000 (0)\n-5ECED9 Disk Start            0000 (0)\n-5ECEDB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECEDD Ext File Attributes   00000000 (0)\n-5ECEE1 Local Header Offset   0001A1E7 (106983)\n-5ECEE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECEE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECF14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECF16   Length              0005 (5)\n-5ECF18   Flags               01 (1) 'Modification'\n-5ECF19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECF1D CENTRAL HEADER #29    02014B50 (33639248)\n-5ECF21 Created Zip Spec      14 (20) '2.0'\n-5ECF22 Created OS            00 (0) 'MS-DOS'\n-5ECF23 Extract Zip Spec      14 (20) '2.0'\n-5ECF24 Extract OS            00 (0) 'MS-DOS'\n-5ECF25 General Purpose Flag  0000 (0)\n-5ECF27 Compression Method    0000 (0) 'Stored'\n-5ECF29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECF2D CRC                   00000000 (0)\n-5ECF31 Compressed Size       00000000 (0)\n-5ECF35 Uncompressed Size     00000000 (0)\n-5ECF39 Filename Length       0036 (54)\n-5ECF3B Extra Length          0009 (9)\n-5ECF3D Comment Length        0000 (0)\n-5ECF3F Disk Start            0000 (0)\n-5ECF41 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECF43 Ext File Attributes   00000000 (0)\n-5ECF47 Local Header Offset   0001A23D (107069)\n-5ECF4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECF4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ECF81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ECF83   Length              0005 (5)\n-5ECF85   Flags               01 (1) 'Modification'\n-5ECF86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ECF8A CENTRAL HEADER #30    02014B50 (33639248)\n-5ECF8E Created Zip Spec      14 (20) '2.0'\n-5ECF8F Created OS            00 (0) 'MS-DOS'\n-5ECF90 Extract Zip Spec      14 (20) '2.0'\n-5ECF91 Extract OS            00 (0) 'MS-DOS'\n-5ECF92 General Purpose Flag  0000 (0)\n-5ECF94 Compression Method    0000 (0) 'Stored'\n-5ECF96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ECF9A CRC                   00000000 (0)\n-5ECF9E Compressed Size       00000000 (0)\n-5ECFA2 Uncompressed Size     00000000 (0)\n-5ECFA6 Filename Length       0066 (102)\n-5ECFA8 Extra Length          0009 (9)\n-5ECFAA Comment Length        0000 (0)\n-5ECFAC Disk Start            0000 (0)\n-5ECFAE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ECFB0 Ext File Attributes   00000000 (0)\n-5ECFB4 Local Header Offset   0001A29A (107162)\n-5ECFB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ECFB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED01E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED020   Length              0005 (5)\n-5ED022   Flags               01 (1) 'Modification'\n-5ED023   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED027 CENTRAL HEADER #31    02014B50 (33639248)\n-5ED02B Created Zip Spec      14 (20) '2.0'\n-5ED02C Created OS            00 (0) 'MS-DOS'\n-5ED02D Extract Zip Spec      14 (20) '2.0'\n-5ED02E Extract OS            00 (0) 'MS-DOS'\n-5ED02F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED031 Compression Method    0000 (0) 'Stored'\n-5ED033 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED037 CRC                   7416DF2A (1947655978)\n-5ED03B Compressed Size       00001512 (5394)\n-5ED03F Uncompressed Size     00001512 (5394)\n-5ED043 Filename Length       007C (124)\n-5ED045 Extra Length          0009 (9)\n-5ED047 Comment Length        0000 (0)\n-5ED049 Disk Start            0000 (0)\n-5ED04B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED04D Ext File Attributes   00000000 (0)\n-5ED051 Local Header Offset   0001A327 (107303)\n-5ED055 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED055: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED0D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED0D3   Length              0005 (5)\n-5ED0D5   Flags               01 (1) 'Modification'\n-5ED0D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED0DA CENTRAL HEADER #32    02014B50 (33639248)\n-5ED0DE Created Zip Spec      14 (20) '2.0'\n-5ED0DF Created OS            00 (0) 'MS-DOS'\n-5ED0E0 Extract Zip Spec      14 (20) '2.0'\n-5ED0E1 Extract OS            00 (0) 'MS-DOS'\n-5ED0E2 General Purpose Flag  0000 (0)\n-5ED0E4 Compression Method    0000 (0) 'Stored'\n-5ED0E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED0EA CRC                   00000000 (0)\n-5ED0EE Compressed Size       00000000 (0)\n-5ED0F2 Uncompressed Size     00000000 (0)\n-5ED0F6 Filename Length       0022 (34)\n-5ED0F8 Extra Length          0009 (9)\n-5ED0FA Comment Length        0000 (0)\n-5ED0FC Disk Start            0000 (0)\n-5ED0FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED100 Ext File Attributes   00000000 (0)\n-5ED104 Local Header Offset   0001B8EC (112876)\n-5ED108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED12A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED12C   Length              0005 (5)\n-5ED12E   Flags               01 (1) 'Modification'\n-5ED12F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED133 CENTRAL HEADER #33    02014B50 (33639248)\n-5ED137 Created Zip Spec      14 (20) '2.0'\n-5ED138 Created OS            00 (0) 'MS-DOS'\n-5ED139 Extract Zip Spec      14 (20) '2.0'\n-5ED13A Extract OS            00 (0) 'MS-DOS'\n-5ED13B General Purpose Flag  0000 (0)\n-5ED13D Compression Method    0000 (0) 'Stored'\n-5ED13F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED143 CRC                   00000000 (0)\n-5ED147 Compressed Size       00000000 (0)\n-5ED14B Uncompressed Size     00000000 (0)\n-5ED14F Filename Length       0029 (41)\n-5ED151 Extra Length          0009 (9)\n-5ED153 Comment Length        0000 (0)\n-5ED155 Disk Start            0000 (0)\n-5ED157 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED159 Ext File Attributes   00000000 (0)\n-5ED15D Local Header Offset   0001B935 (112949)\n-5ED161 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED161: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED18A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED18C   Length              0005 (5)\n-5ED18E   Flags               01 (1) 'Modification'\n-5ED18F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED193 CENTRAL HEADER #34    02014B50 (33639248)\n-5ED197 Created Zip Spec      14 (20) '2.0'\n-5ED198 Created OS            00 (0) 'MS-DOS'\n-5ED199 Extract Zip Spec      14 (20) '2.0'\n-5ED19A Extract OS            00 (0) 'MS-DOS'\n-5ED19B General Purpose Flag  0000 (0)\n-5ED19D Compression Method    0000 (0) 'Stored'\n-5ED19F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED1A3 CRC                   00000000 (0)\n-5ED1A7 Compressed Size       00000000 (0)\n-5ED1AB Uncompressed Size     00000000 (0)\n-5ED1AF Filename Length       0063 (99)\n-5ED1B1 Extra Length          0009 (9)\n-5ED1B3 Comment Length        0000 (0)\n-5ED1B5 Disk Start            0000 (0)\n-5ED1B7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED1B9 Ext File Attributes   00000000 (0)\n-5ED1BD Local Header Offset   0001B985 (113029)\n-5ED1C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED1C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED224 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED226   Length              0005 (5)\n-5ED228   Flags               01 (1) 'Modification'\n-5ED229   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED22D CENTRAL HEADER #35    02014B50 (33639248)\n-5ED231 Created Zip Spec      14 (20) '2.0'\n-5ED232 Created OS            00 (0) 'MS-DOS'\n-5ED233 Extract Zip Spec      14 (20) '2.0'\n-5ED234 Extract OS            00 (0) 'MS-DOS'\n-5ED235 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED237 Compression Method    0000 (0) 'Stored'\n-5ED239 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED23D CRC                   826E1CC4 (2188254404)\n-5ED241 Compressed Size       00002F90 (12176)\n-5ED245 Uncompressed Size     00002F90 (12176)\n-5ED249 Filename Length       0079 (121)\n-5ED24B Extra Length          0009 (9)\n-5ED24D Comment Length        0000 (0)\n-5ED24F Disk Start            0000 (0)\n-5ED251 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED253 Ext File Attributes   00000000 (0)\n-5ED257 Local Header Offset   0001BA0F (113167)\n-5ED25B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED25B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED2D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED2D6   Length              0005 (5)\n-5ED2D8   Flags               01 (1) 'Modification'\n-5ED2D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED2DD CENTRAL HEADER #36    02014B50 (33639248)\n-5ED2E1 Created Zip Spec      14 (20) '2.0'\n-5ED2E2 Created OS            00 (0) 'MS-DOS'\n-5ED2E3 Extract Zip Spec      14 (20) '2.0'\n-5ED2E4 Extract OS            00 (0) 'MS-DOS'\n-5ED2E5 General Purpose Flag  0000 (0)\n-5ED2E7 Compression Method    0000 (0) 'Stored'\n-5ED2E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED2ED CRC                   00000000 (0)\n-5ED2F1 Compressed Size       00000000 (0)\n-5ED2F5 Uncompressed Size     00000000 (0)\n-5ED2F9 Filename Length       006C (108)\n-5ED2FB Extra Length          0009 (9)\n-5ED2FD Comment Length        0000 (0)\n-5ED2FF Disk Start            0000 (0)\n-5ED301 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED303 Ext File Attributes   00000000 (0)\n-5ED307 Local Header Offset   0001EA4F (125519)\n-5ED30B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED30B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED377 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED379   Length              0005 (5)\n-5ED37B   Flags               01 (1) 'Modification'\n-5ED37C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED380 CENTRAL HEADER #37    02014B50 (33639248)\n-5ED384 Created Zip Spec      14 (20) '2.0'\n-5ED385 Created OS            00 (0) 'MS-DOS'\n-5ED386 Extract Zip Spec      14 (20) '2.0'\n-5ED387 Extract OS            00 (0) 'MS-DOS'\n-5ED388 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED38A Compression Method    0000 (0) 'Stored'\n-5ED38C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED390 CRC                   1BE163AC (467755948)\n-5ED394 Compressed Size       00000967 (2407)\n-5ED398 Uncompressed Size     00000967 (2407)\n-5ED39C Filename Length       0082 (130)\n-5ED39E Extra Length          0009 (9)\n-5ED3A0 Comment Length        0000 (0)\n-5ED3A2 Disk Start            0000 (0)\n-5ED3A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED3A6 Ext File Attributes   00000000 (0)\n-5ED3AA Local Header Offset   0001EAE2 (125666)\n-5ED3AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED3AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED430 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED432   Length              0005 (5)\n-5ED434   Flags               01 (1) 'Modification'\n-5ED435   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED439 CENTRAL HEADER #38    02014B50 (33639248)\n-5ED43D Created Zip Spec      14 (20) '2.0'\n-5ED43E Created OS            00 (0) 'MS-DOS'\n-5ED43F Extract Zip Spec      14 (20) '2.0'\n-5ED440 Extract OS            00 (0) 'MS-DOS'\n-5ED441 General Purpose Flag  0000 (0)\n-5ED443 Compression Method    0000 (0) 'Stored'\n-5ED445 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED449 CRC                   00000000 (0)\n-5ED44D Compressed Size       00000000 (0)\n-5ED451 Uncompressed Size     00000000 (0)\n-5ED455 Filename Length       0066 (102)\n-5ED457 Extra Length          0009 (9)\n-5ED459 Comment Length        0000 (0)\n-5ED45B Disk Start            0000 (0)\n-5ED45D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED45F Ext File Attributes   00000000 (0)\n-5ED463 Local Header Offset   0001F502 (128258)\n-5ED467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED4CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED4CF   Length              0005 (5)\n-5ED4D1   Flags               01 (1) 'Modification'\n-5ED4D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED4D6 CENTRAL HEADER #39    02014B50 (33639248)\n-5ED4DA Created Zip Spec      14 (20) '2.0'\n-5ED4DB Created OS            00 (0) 'MS-DOS'\n-5ED4DC Extract Zip Spec      14 (20) '2.0'\n-5ED4DD Extract OS            00 (0) 'MS-DOS'\n-5ED4DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED4E0 Compression Method    0000 (0) 'Stored'\n-5ED4E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED4E6 CRC                   11DB1110 (299569424)\n-5ED4EA Compressed Size       0000080F (2063)\n-5ED4EE Uncompressed Size     0000080F (2063)\n-5ED4F2 Filename Length       007C (124)\n-5ED4F4 Extra Length          0009 (9)\n-5ED4F6 Comment Length        0000 (0)\n-5ED4F8 Disk Start            0000 (0)\n-5ED4FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED4FC Ext File Attributes   00000000 (0)\n-5ED500 Local Header Offset   0001F58F (128399)\n-5ED504 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED504: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED580 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED582   Length              0005 (5)\n-5ED584   Flags               01 (1) 'Modification'\n-5ED585   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED589 CENTRAL HEADER #40    02014B50 (33639248)\n-5ED58D Created Zip Spec      14 (20) '2.0'\n-5ED58E Created OS            00 (0) 'MS-DOS'\n-5ED58F Extract Zip Spec      14 (20) '2.0'\n-5ED590 Extract OS            00 (0) 'MS-DOS'\n-5ED591 General Purpose Flag  0000 (0)\n-5ED593 Compression Method    0000 (0) 'Stored'\n-5ED595 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED599 CRC                   00000000 (0)\n-5ED59D Compressed Size       00000000 (0)\n-5ED5A1 Uncompressed Size     00000000 (0)\n-5ED5A5 Filename Length       0062 (98)\n-5ED5A7 Extra Length          0009 (9)\n-5ED5A9 Comment Length        0000 (0)\n-5ED5AB Disk Start            0000 (0)\n-5ED5AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED5AF Ext File Attributes   00000000 (0)\n-5ED5B3 Local Header Offset   0001FE51 (130641)\n-5ED5B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED5B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED619 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED61B   Length              0005 (5)\n-5ED61D   Flags               01 (1) 'Modification'\n-5ED61E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED622 CENTRAL HEADER #41    02014B50 (33639248)\n-5ED626 Created Zip Spec      14 (20) '2.0'\n-5ED627 Created OS            00 (0) 'MS-DOS'\n-5ED628 Extract Zip Spec      14 (20) '2.0'\n-5ED629 Extract OS            00 (0) 'MS-DOS'\n-5ED62A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED62C Compression Method    0000 (0) 'Stored'\n-5ED62E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED632 CRC                   30A69673 (816223859)\n-5ED636 Compressed Size       00000C1C (3100)\n-5ED63A Uncompressed Size     00000C1C (3100)\n-5ED63E Filename Length       0078 (120)\n-5ED640 Extra Length          0009 (9)\n-5ED642 Comment Length        0000 (0)\n-5ED644 Disk Start            0000 (0)\n-5ED646 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED648 Ext File Attributes   00000000 (0)\n-5ED64C Local Header Offset   0001FEDA (130778)\n-5ED650 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED650: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED6C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED6CA   Length              0005 (5)\n-5ED6CC   Flags               01 (1) 'Modification'\n-5ED6CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED6D1 CENTRAL HEADER #42    02014B50 (33639248)\n-5ED6D5 Created Zip Spec      14 (20) '2.0'\n-5ED6D6 Created OS            00 (0) 'MS-DOS'\n-5ED6D7 Extract Zip Spec      14 (20) '2.0'\n-5ED6D8 Extract OS            00 (0) 'MS-DOS'\n-5ED6D9 General Purpose Flag  0000 (0)\n-5ED6DB Compression Method    0000 (0) 'Stored'\n-5ED6DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED6E1 CRC                   00000000 (0)\n-5ED6E5 Compressed Size       00000000 (0)\n-5ED6E9 Uncompressed Size     00000000 (0)\n-5ED6ED Filename Length       006C (108)\n-5ED6EF Extra Length          0009 (9)\n-5ED6F1 Comment Length        0000 (0)\n-5ED6F3 Disk Start            0000 (0)\n-5ED6F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED6F7 Ext File Attributes   00000000 (0)\n-5ED6FB Local Header Offset   00020BA5 (134053)\n-5ED6FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED6FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED76B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED76D   Length              0005 (5)\n-5ED76F   Flags               01 (1) 'Modification'\n-5ED770   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED774 CENTRAL HEADER #43    02014B50 (33639248)\n-5ED778 Created Zip Spec      14 (20) '2.0'\n-5ED779 Created OS            00 (0) 'MS-DOS'\n-5ED77A Extract Zip Spec      14 (20) '2.0'\n-5ED77B Extract OS            00 (0) 'MS-DOS'\n-5ED77C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED77E Compression Method    0000 (0) 'Stored'\n-5ED780 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED784 CRC                   0C316B32 (204565298)\n-5ED788 Compressed Size       000006D7 (1751)\n-5ED78C Uncompressed Size     000006D7 (1751)\n-5ED790 Filename Length       0082 (130)\n-5ED792 Extra Length          0009 (9)\n-5ED794 Comment Length        0000 (0)\n-5ED796 Disk Start            0000 (0)\n-5ED798 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED79A Ext File Attributes   00000000 (0)\n-5ED79E Local Header Offset   00020C38 (134200)\n-5ED7A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED7A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED824 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED826   Length              0005 (5)\n-5ED828   Flags               01 (1) 'Modification'\n-5ED829   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED82D CENTRAL HEADER #44    02014B50 (33639248)\n-5ED831 Created Zip Spec      14 (20) '2.0'\n-5ED832 Created OS            00 (0) 'MS-DOS'\n-5ED833 Extract Zip Spec      14 (20) '2.0'\n-5ED834 Extract OS            00 (0) 'MS-DOS'\n-5ED835 General Purpose Flag  0000 (0)\n-5ED837 Compression Method    0000 (0) 'Stored'\n-5ED839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED83D CRC                   00000000 (0)\n-5ED841 Compressed Size       00000000 (0)\n-5ED845 Uncompressed Size     00000000 (0)\n-5ED849 Filename Length       0068 (104)\n-5ED84B Extra Length          0009 (9)\n-5ED84D Comment Length        0000 (0)\n-5ED84F Disk Start            0000 (0)\n-5ED851 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED853 Ext File Attributes   00000000 (0)\n-5ED857 Local Header Offset   000213C8 (136136)\n-5ED85B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED85B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED8C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED8C5   Length              0005 (5)\n-5ED8C7   Flags               01 (1) 'Modification'\n-5ED8C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED8CC CENTRAL HEADER #45    02014B50 (33639248)\n-5ED8D0 Created Zip Spec      14 (20) '2.0'\n-5ED8D1 Created OS            00 (0) 'MS-DOS'\n-5ED8D2 Extract Zip Spec      14 (20) '2.0'\n-5ED8D3 Extract OS            00 (0) 'MS-DOS'\n-5ED8D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5ED8D6 Compression Method    0000 (0) 'Stored'\n-5ED8D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED8DC CRC                   37BEEC96 (935259286)\n-5ED8E0 Compressed Size       0000133B (4923)\n-5ED8E4 Uncompressed Size     0000133B (4923)\n-5ED8E8 Filename Length       007E (126)\n-5ED8EA Extra Length          0009 (9)\n-5ED8EC Comment Length        0000 (0)\n-5ED8EE Disk Start            0000 (0)\n-5ED8F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED8F2 Ext File Attributes   00000000 (0)\n-5ED8F6 Local Header Offset   00021457 (136279)\n-5ED8FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED8FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5ED978 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5ED97A   Length              0005 (5)\n-5ED97C   Flags               01 (1) 'Modification'\n-5ED97D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5ED981 CENTRAL HEADER #46    02014B50 (33639248)\n-5ED985 Created Zip Spec      14 (20) '2.0'\n-5ED986 Created OS            00 (0) 'MS-DOS'\n-5ED987 Extract Zip Spec      14 (20) '2.0'\n-5ED988 Extract OS            00 (0) 'MS-DOS'\n-5ED989 General Purpose Flag  0000 (0)\n-5ED98B Compression Method    0000 (0) 'Stored'\n-5ED98D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5ED991 CRC                   00000000 (0)\n-5ED995 Compressed Size       00000000 (0)\n-5ED999 Uncompressed Size     00000000 (0)\n-5ED99D Filename Length       0070 (112)\n-5ED99F Extra Length          0009 (9)\n-5ED9A1 Comment Length        0000 (0)\n-5ED9A3 Disk Start            0000 (0)\n-5ED9A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5ED9A7 Ext File Attributes   00000000 (0)\n-5ED9AB Local Header Offset   00022847 (141383)\n-5ED9AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5ED9AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDA1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDA21   Length              0005 (5)\n-5EDA23   Flags               01 (1) 'Modification'\n-5EDA24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDA28 CENTRAL HEADER #47    02014B50 (33639248)\n-5EDA2C Created Zip Spec      14 (20) '2.0'\n-5EDA2D Created OS            00 (0) 'MS-DOS'\n-5EDA2E Extract Zip Spec      14 (20) '2.0'\n-5EDA2F Extract OS            00 (0) 'MS-DOS'\n-5EDA30 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EDA32 Compression Method    0000 (0) 'Stored'\n-5EDA34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDA38 CRC                   D0AE7BE4 (3501095908)\n-5EDA3C Compressed Size       0000074C (1868)\n-5EDA40 Uncompressed Size     0000074C (1868)\n-5EDA44 Filename Length       0086 (134)\n-5EDA46 Extra Length          0009 (9)\n-5EDA48 Comment Length        0000 (0)\n-5EDA4A Disk Start            0000 (0)\n-5EDA4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDA4E Ext File Attributes   00000000 (0)\n-5EDA52 Local Header Offset   000228DE (141534)\n-5EDA56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XX'\n-#\n-# WARNING: Offset 0x5EDA56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDADC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDADE   Length              0005 (5)\n-5EDAE0   Flags               01 (1) 'Modification'\n-5EDAE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDAE5 CENTRAL HEADER #48    02014B50 (33639248)\n-5EDAE9 Created Zip Spec      14 (20) '2.0'\n-5EDAEA Created OS            00 (0) 'MS-DOS'\n-5EDAEB Extract Zip Spec      14 (20) '2.0'\n-5EDAEC Extract OS            00 (0) 'MS-DOS'\n-5EDAED General Purpose Flag  0000 (0)\n-5EDAEF Compression Method    0000 (0) 'Stored'\n-5EDAF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDAF5 CRC                   00000000 (0)\n-5EDAF9 Compressed Size       00000000 (0)\n-5EDAFD Uncompressed Size     00000000 (0)\n-5EDB01 Filename Length       006C (108)\n-5EDB03 Extra Length          0009 (9)\n-5EDB05 Comment Length        0000 (0)\n-5EDB07 Disk Start            0000 (0)\n-5EDB09 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDB0B Ext File Attributes   00000000 (0)\n-5EDB0F Local Header Offset   000230E7 (143591)\n-5EDB13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDB13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDB7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDB81   Length              0005 (5)\n-5EDB83   Flags               01 (1) 'Modification'\n-5EDB84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDB88 CENTRAL HEADER #49    02014B50 (33639248)\n-5EDB8C Created Zip Spec      14 (20) '2.0'\n-5EDB8D Created OS            00 (0) 'MS-DOS'\n-5EDB8E Extract Zip Spec      14 (20) '2.0'\n-5EDB8F Extract OS            00 (0) 'MS-DOS'\n-5EDB90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EDB92 Compression Method    0000 (0) 'Stored'\n-5EDB94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDB98 CRC                   4C134CE6 (1276333286)\n-5EDB9C Compressed Size       0000103C (4156)\n-5EDBA0 Uncompressed Size     0000103C (4156)\n-5EDBA4 Filename Length       0082 (130)\n-5EDBA6 Extra Length          0009 (9)\n-5EDBA8 Comment Length        0000 (0)\n-5EDBAA Disk Start            0000 (0)\n-5EDBAC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDBAE Ext File Attributes   00000000 (0)\n-5EDBB2 Local Header Offset   0002317A (143738)\n-5EDBB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDBB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDC38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDC3A   Length              0005 (5)\n-5EDC3C   Flags               01 (1) 'Modification'\n-5EDC3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDC41 CENTRAL HEADER #50    02014B50 (33639248)\n-5EDC45 Created Zip Spec      14 (20) '2.0'\n-5EDC46 Created OS            00 (0) 'MS-DOS'\n-5EDC47 Extract Zip Spec      14 (20) '2.0'\n-5EDC48 Extract OS            00 (0) 'MS-DOS'\n-5EDC49 General Purpose Flag  0000 (0)\n-5EDC4B Compression Method    0000 (0) 'Stored'\n-5EDC4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDC51 CRC                   00000000 (0)\n-5EDC55 Compressed Size       00000000 (0)\n-5EDC59 Uncompressed Size     00000000 (0)\n-5EDC5D Filename Length       006E (110)\n-5EDC5F Extra Length          0009 (9)\n-5EDC61 Comment Length        0000 (0)\n-5EDC63 Disk Start            0000 (0)\n-5EDC65 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDC67 Ext File Attributes   00000000 (0)\n-5EDC6B Local Header Offset   0002426F (148079)\n-5EDC6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDC6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDCDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDCDF   Length              0005 (5)\n-5EDCE1   Flags               01 (1) 'Modification'\n-5EDCE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDCE6 CENTRAL HEADER #51    02014B50 (33639248)\n-5EDCEA Created Zip Spec      14 (20) '2.0'\n-5EDCEB Created OS            00 (0) 'MS-DOS'\n-5EDCEC Extract Zip Spec      14 (20) '2.0'\n-5EDCED Extract OS            00 (0) 'MS-DOS'\n-5EDCEE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EDCF0 Compression Method    0000 (0) 'Stored'\n-5EDCF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDCF6 CRC                   63086228 (1661493800)\n-5EDCFA Compressed Size       00000838 (2104)\n-5EDCFE Uncompressed Size     00000838 (2104)\n-5EDD02 Filename Length       0084 (132)\n-5EDD04 Extra Length          0009 (9)\n-5EDD06 Comment Length        0000 (0)\n-5EDD08 Disk Start            0000 (0)\n-5EDD0A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDD0C Ext File Attributes   00000000 (0)\n-5EDD10 Local Header Offset   00024304 (148228)\n-5EDD14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x5EDD14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDD98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDD9A   Length              0005 (5)\n-5EDD9C   Flags               01 (1) 'Modification'\n-5EDD9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDDA1 CENTRAL HEADER #52    02014B50 (33639248)\n-5EDDA5 Created Zip Spec      14 (20) '2.0'\n-5EDDA6 Created OS            00 (0) 'MS-DOS'\n-5EDDA7 Extract Zip Spec      14 (20) '2.0'\n-5EDDA8 Extract OS            00 (0) 'MS-DOS'\n-5EDDA9 General Purpose Flag  0000 (0)\n-5EDDAB Compression Method    0000 (0) 'Stored'\n-5EDDAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDDB1 CRC                   00000000 (0)\n-5EDDB5 Compressed Size       00000000 (0)\n-5EDDB9 Uncompressed Size     00000000 (0)\n-5EDDBD Filename Length       006A (106)\n-5EDDBF Extra Length          0009 (9)\n-5EDDC1 Comment Length        0000 (0)\n-5EDDC3 Disk Start            0000 (0)\n-5EDDC5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDDC7 Ext File Attributes   00000000 (0)\n-5EDDCB Local Header Offset   00024BF7 (150519)\n-5EDDCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDDCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDE39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDE3B   Length              0005 (5)\n-5EDE3D   Flags               01 (1) 'Modification'\n-5EDE3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDE42 CENTRAL HEADER #53    02014B50 (33639248)\n-5EDE46 Created Zip Spec      14 (20) '2.0'\n-5EDE47 Created OS            00 (0) 'MS-DOS'\n-5EDE48 Extract Zip Spec      14 (20) '2.0'\n-5EDE49 Extract OS            00 (0) 'MS-DOS'\n-5EDE4A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EDE4C Compression Method    0000 (0) 'Stored'\n-5EDE4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDE52 CRC                   9EF621C1 (2666930625)\n-5EDE56 Compressed Size       00000C90 (3216)\n-5EDE5A Uncompressed Size     00000C90 (3216)\n-5EDE5E Filename Length       0080 (128)\n-5EDE60 Extra Length          0009 (9)\n-5EDE62 Comment Length        0000 (0)\n-5EDE64 Disk Start            0000 (0)\n-5EDE66 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDE68 Ext File Attributes   00000000 (0)\n-5EDE6C Local Header Offset   00024C88 (150664)\n-5EDE70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDE70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDEF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDEF2   Length              0005 (5)\n-5EDEF4   Flags               01 (1) 'Modification'\n-5EDEF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDEF9 CENTRAL HEADER #54    02014B50 (33639248)\n-5EDEFD Created Zip Spec      14 (20) '2.0'\n-5EDEFE Created OS            00 (0) 'MS-DOS'\n-5EDEFF Extract Zip Spec      14 (20) '2.0'\n-5EDF00 Extract OS            00 (0) 'MS-DOS'\n-5EDF01 General Purpose Flag  0000 (0)\n-5EDF03 Compression Method    0000 (0) 'Stored'\n-5EDF05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDF09 CRC                   00000000 (0)\n-5EDF0D Compressed Size       00000000 (0)\n-5EDF11 Uncompressed Size     00000000 (0)\n-5EDF15 Filename Length       0052 (82)\n-5EDF17 Extra Length          0009 (9)\n-5EDF19 Comment Length        0000 (0)\n-5EDF1B Disk Start            0000 (0)\n-5EDF1D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDF1F Ext File Attributes   00000000 (0)\n-5EDF23 Local Header Offset   000259CF (154063)\n-5EDF27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDF27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDF79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDF7B   Length              0005 (5)\n-5EDF7D   Flags               01 (1) 'Modification'\n-5EDF7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EDF82 CENTRAL HEADER #55    02014B50 (33639248)\n-5EDF86 Created Zip Spec      14 (20) '2.0'\n-5EDF87 Created OS            00 (0) 'MS-DOS'\n-5EDF88 Extract Zip Spec      14 (20) '2.0'\n-5EDF89 Extract OS            00 (0) 'MS-DOS'\n-5EDF8A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EDF8C Compression Method    0000 (0) 'Stored'\n-5EDF8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EDF92 CRC                   6BE0FFE8 (1809907688)\n-5EDF96 Compressed Size       00000EF6 (3830)\n-5EDF9A Uncompressed Size     00000EF6 (3830)\n-5EDF9E Filename Length       0068 (104)\n-5EDFA0 Extra Length          0009 (9)\n-5EDFA2 Comment Length        0000 (0)\n-5EDFA4 Disk Start            0000 (0)\n-5EDFA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EDFA8 Ext File Attributes   00000000 (0)\n-5EDFAC Local Header Offset   00025A48 (154184)\n-5EDFB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EDFB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE018 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE01A   Length              0005 (5)\n-5EE01C   Flags               01 (1) 'Modification'\n-5EE01D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE021 CENTRAL HEADER #56    02014B50 (33639248)\n-5EE025 Created Zip Spec      14 (20) '2.0'\n-5EE026 Created OS            00 (0) 'MS-DOS'\n-5EE027 Extract Zip Spec      14 (20) '2.0'\n-5EE028 Extract OS            00 (0) 'MS-DOS'\n-5EE029 General Purpose Flag  0000 (0)\n-5EE02B Compression Method    0000 (0) 'Stored'\n-5EE02D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE031 CRC                   00000000 (0)\n-5EE035 Compressed Size       00000000 (0)\n-5EE039 Uncompressed Size     00000000 (0)\n-5EE03D Filename Length       0057 (87)\n-5EE03F Extra Length          0009 (9)\n-5EE041 Comment Length        0000 (0)\n-5EE043 Disk Start            0000 (0)\n-5EE045 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE047 Ext File Attributes   00000000 (0)\n-5EE04B Local Header Offset   000269DD (158173)\n-5EE04F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE04F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE0A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE0A8   Length              0005 (5)\n-5EE0AA   Flags               01 (1) 'Modification'\n-5EE0AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE0AF CENTRAL HEADER #57    02014B50 (33639248)\n-5EE0B3 Created Zip Spec      14 (20) '2.0'\n-5EE0B4 Created OS            00 (0) 'MS-DOS'\n-5EE0B5 Extract Zip Spec      14 (20) '2.0'\n-5EE0B6 Extract OS            00 (0) 'MS-DOS'\n-5EE0B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE0B9 Compression Method    0000 (0) 'Stored'\n-5EE0BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE0BF CRC                   988DC4AD (2559427757)\n-5EE0C3 Compressed Size       0000071B (1819)\n-5EE0C7 Uncompressed Size     0000071B (1819)\n-5EE0CB Filename Length       006D (109)\n-5EE0CD Extra Length          0009 (9)\n-5EE0CF Comment Length        0000 (0)\n-5EE0D1 Disk Start            0000 (0)\n-5EE0D3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE0D5 Ext File Attributes   00000000 (0)\n-5EE0D9 Local Header Offset   00026A5B (158299)\n-5EE0DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE0DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE14A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE14C   Length              0005 (5)\n-5EE14E   Flags               01 (1) 'Modification'\n-5EE14F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE153 CENTRAL HEADER #58    02014B50 (33639248)\n-5EE157 Created Zip Spec      14 (20) '2.0'\n-5EE158 Created OS            00 (0) 'MS-DOS'\n-5EE159 Extract Zip Spec      14 (20) '2.0'\n-5EE15A Extract OS            00 (0) 'MS-DOS'\n-5EE15B General Purpose Flag  0000 (0)\n-5EE15D Compression Method    0000 (0) 'Stored'\n-5EE15F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE163 CRC                   00000000 (0)\n-5EE167 Compressed Size       00000000 (0)\n-5EE16B Uncompressed Size     00000000 (0)\n-5EE16F Filename Length       0072 (114)\n-5EE171 Extra Length          0009 (9)\n-5EE173 Comment Length        0000 (0)\n-5EE175 Disk Start            0000 (0)\n-5EE177 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE179 Ext File Attributes   00000000 (0)\n-5EE17D Local Header Offset   0002721A (160282)\n-5EE181 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE181: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE1F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE1F5   Length              0005 (5)\n-5EE1F7   Flags               01 (1) 'Modification'\n-5EE1F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE1FC CENTRAL HEADER #59    02014B50 (33639248)\n-5EE200 Created Zip Spec      14 (20) '2.0'\n-5EE201 Created OS            00 (0) 'MS-DOS'\n-5EE202 Extract Zip Spec      14 (20) '2.0'\n-5EE203 Extract OS            00 (0) 'MS-DOS'\n-5EE204 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE206 Compression Method    0000 (0) 'Stored'\n-5EE208 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE20C CRC                   07A59EC9 (128294601)\n-5EE210 Compressed Size       00000C29 (3113)\n-5EE214 Uncompressed Size     00000C29 (3113)\n-5EE218 Filename Length       0088 (136)\n-5EE21A Extra Length          0009 (9)\n-5EE21C Comment Length        0000 (0)\n-5EE21E Disk Start            0000 (0)\n-5EE220 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE222 Ext File Attributes   00000000 (0)\n-5EE226 Local Header Offset   000272B3 (160435)\n-5EE22A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXX'\n-#\n-# WARNING: Offset 0x5EE22A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE2B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE2B4   Length              0005 (5)\n-5EE2B6   Flags               01 (1) 'Modification'\n-5EE2B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE2BB CENTRAL HEADER #60    02014B50 (33639248)\n-5EE2BF Created Zip Spec      14 (20) '2.0'\n-5EE2C0 Created OS            00 (0) 'MS-DOS'\n-5EE2C1 Extract Zip Spec      14 (20) '2.0'\n-5EE2C2 Extract OS            00 (0) 'MS-DOS'\n-5EE2C3 General Purpose Flag  0000 (0)\n-5EE2C5 Compression Method    0000 (0) 'Stored'\n-5EE2C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE2CB CRC                   00000000 (0)\n-5EE2CF Compressed Size       00000000 (0)\n-5EE2D3 Uncompressed Size     00000000 (0)\n-5EE2D7 Filename Length       0024 (36)\n-5EE2D9 Extra Length          0009 (9)\n-5EE2DB Comment Length        0000 (0)\n-5EE2DD Disk Start            0000 (0)\n-5EE2DF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE2E1 Ext File Attributes   00000000 (0)\n-5EE2E5 Local Header Offset   00027F9B (163739)\n-5EE2E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE2E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE30D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE30F   Length              0005 (5)\n-5EE311   Flags               01 (1) 'Modification'\n-5EE312   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE316 CENTRAL HEADER #61    02014B50 (33639248)\n-5EE31A Created Zip Spec      14 (20) '2.0'\n-5EE31B Created OS            00 (0) 'MS-DOS'\n-5EE31C Extract Zip Spec      14 (20) '2.0'\n-5EE31D Extract OS            00 (0) 'MS-DOS'\n-5EE31E General Purpose Flag  0000 (0)\n-5EE320 Compression Method    0000 (0) 'Stored'\n-5EE322 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE326 CRC                   00000000 (0)\n-5EE32A Compressed Size       00000000 (0)\n-5EE32E Uncompressed Size     00000000 (0)\n-5EE332 Filename Length       002B (43)\n-5EE334 Extra Length          0009 (9)\n-5EE336 Comment Length        0000 (0)\n-5EE338 Disk Start            0000 (0)\n-5EE33A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE33C Ext File Attributes   00000000 (0)\n-5EE340 Local Header Offset   00027FE6 (163814)\n-5EE344 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE344: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE36F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE371   Length              0005 (5)\n-5EE373   Flags               01 (1) 'Modification'\n-5EE374   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE378 CENTRAL HEADER #62    02014B50 (33639248)\n-5EE37C Created Zip Spec      14 (20) '2.0'\n-5EE37D Created OS            00 (0) 'MS-DOS'\n-5EE37E Extract Zip Spec      14 (20) '2.0'\n-5EE37F Extract OS            00 (0) 'MS-DOS'\n-5EE380 General Purpose Flag  0000 (0)\n-5EE382 Compression Method    0000 (0) 'Stored'\n-5EE384 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE388 CRC                   00000000 (0)\n-5EE38C Compressed Size       00000000 (0)\n-5EE390 Uncompressed Size     00000000 (0)\n-5EE394 Filename Length       006C (108)\n-5EE396 Extra Length          0009 (9)\n-5EE398 Comment Length        0000 (0)\n-5EE39A Disk Start            0000 (0)\n-5EE39C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE39E Ext File Attributes   00000000 (0)\n-5EE3A2 Local Header Offset   00028038 (163896)\n-5EE3A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE3A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE412 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE414   Length              0005 (5)\n-5EE416   Flags               01 (1) 'Modification'\n-5EE417   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE41B CENTRAL HEADER #63    02014B50 (33639248)\n-5EE41F Created Zip Spec      14 (20) '2.0'\n-5EE420 Created OS            00 (0) 'MS-DOS'\n-5EE421 Extract Zip Spec      14 (20) '2.0'\n-5EE422 Extract OS            00 (0) 'MS-DOS'\n-5EE423 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE425 Compression Method    0000 (0) 'Stored'\n-5EE427 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE42B CRC                   A7D3962C (2815661612)\n-5EE42F Compressed Size       000009CC (2508)\n-5EE433 Uncompressed Size     000009CC (2508)\n-5EE437 Filename Length       0082 (130)\n-5EE439 Extra Length          0009 (9)\n-5EE43B Comment Length        0000 (0)\n-5EE43D Disk Start            0000 (0)\n-5EE43F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE441 Ext File Attributes   00000000 (0)\n-5EE445 Local Header Offset   000280CB (164043)\n-5EE449 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE449: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE4CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE4CD   Length              0005 (5)\n-5EE4CF   Flags               01 (1) 'Modification'\n-5EE4D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE4D4 CENTRAL HEADER #64    02014B50 (33639248)\n-5EE4D8 Created Zip Spec      14 (20) '2.0'\n-5EE4D9 Created OS            00 (0) 'MS-DOS'\n-5EE4DA Extract Zip Spec      14 (20) '2.0'\n-5EE4DB Extract OS            00 (0) 'MS-DOS'\n-5EE4DC General Purpose Flag  0000 (0)\n-5EE4DE Compression Method    0000 (0) 'Stored'\n-5EE4E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE4E4 CRC                   00000000 (0)\n-5EE4E8 Compressed Size       00000000 (0)\n-5EE4EC Uncompressed Size     00000000 (0)\n-5EE4F0 Filename Length       0073 (115)\n-5EE4F2 Extra Length          0009 (9)\n-5EE4F4 Comment Length        0000 (0)\n-5EE4F6 Disk Start            0000 (0)\n-5EE4F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE4FA Ext File Attributes   00000000 (0)\n-5EE4FE Local Header Offset   00028B50 (166736)\n-5EE502 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE502: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE575 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE577   Length              0005 (5)\n-5EE579   Flags               01 (1) 'Modification'\n-5EE57A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE57E CENTRAL HEADER #65    02014B50 (33639248)\n-5EE582 Created Zip Spec      14 (20) '2.0'\n-5EE583 Created OS            00 (0) 'MS-DOS'\n-5EE584 Extract Zip Spec      14 (20) '2.0'\n-5EE585 Extract OS            00 (0) 'MS-DOS'\n-5EE586 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE588 Compression Method    0000 (0) 'Stored'\n-5EE58A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE58E CRC                   2E17013D (773259581)\n-5EE592 Compressed Size       00000888 (2184)\n-5EE596 Uncompressed Size     00000888 (2184)\n-5EE59A Filename Length       0089 (137)\n-5EE59C Extra Length          0009 (9)\n-5EE59E Comment Length        0000 (0)\n-5EE5A0 Disk Start            0000 (0)\n-5EE5A2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE5A4 Ext File Attributes   00000000 (0)\n-5EE5A8 Local Header Offset   00028BEA (166890)\n-5EE5AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXX'\n-#\n-# WARNING: Offset 0x5EE5AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE635 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE637   Length              0005 (5)\n-5EE639   Flags               01 (1) 'Modification'\n-5EE63A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE63E CENTRAL HEADER #66    02014B50 (33639248)\n-5EE642 Created Zip Spec      14 (20) '2.0'\n-5EE643 Created OS            00 (0) 'MS-DOS'\n-5EE644 Extract Zip Spec      14 (20) '2.0'\n-5EE645 Extract OS            00 (0) 'MS-DOS'\n-5EE646 General Purpose Flag  0000 (0)\n-5EE648 Compression Method    0000 (0) 'Stored'\n-5EE64A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE64E CRC                   00000000 (0)\n-5EE652 Compressed Size       00000000 (0)\n-5EE656 Uncompressed Size     00000000 (0)\n-5EE65A Filename Length       0022 (34)\n-5EE65C Extra Length          0009 (9)\n-5EE65E Comment Length        0000 (0)\n-5EE660 Disk Start            0000 (0)\n-5EE662 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE664 Ext File Attributes   00000000 (0)\n-5EE668 Local Header Offset   00029532 (169266)\n-5EE66C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE66C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE68E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE690   Length              0005 (5)\n-5EE692   Flags               01 (1) 'Modification'\n-5EE693   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE697 CENTRAL HEADER #67    02014B50 (33639248)\n-5EE69B Created Zip Spec      14 (20) '2.0'\n-5EE69C Created OS            00 (0) 'MS-DOS'\n-5EE69D Extract Zip Spec      14 (20) '2.0'\n-5EE69E Extract OS            00 (0) 'MS-DOS'\n-5EE69F General Purpose Flag  0000 (0)\n-5EE6A1 Compression Method    0000 (0) 'Stored'\n-5EE6A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE6A7 CRC                   00000000 (0)\n-5EE6AB Compressed Size       00000000 (0)\n-5EE6AF Uncompressed Size     00000000 (0)\n-5EE6B3 Filename Length       0029 (41)\n-5EE6B5 Extra Length          0009 (9)\n-5EE6B7 Comment Length        0000 (0)\n-5EE6B9 Disk Start            0000 (0)\n-5EE6BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE6BD Ext File Attributes   00000000 (0)\n-5EE6C1 Local Header Offset   0002957B (169339)\n-5EE6C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE6C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE6EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE6F0   Length              0005 (5)\n-5EE6F2   Flags               01 (1) 'Modification'\n-5EE6F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE6F7 CENTRAL HEADER #68    02014B50 (33639248)\n-5EE6FB Created Zip Spec      14 (20) '2.0'\n-5EE6FC Created OS            00 (0) 'MS-DOS'\n-5EE6FD Extract Zip Spec      14 (20) '2.0'\n-5EE6FE Extract OS            00 (0) 'MS-DOS'\n-5EE6FF General Purpose Flag  0000 (0)\n-5EE701 Compression Method    0000 (0) 'Stored'\n-5EE703 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE707 CRC                   00000000 (0)\n-5EE70B Compressed Size       00000000 (0)\n-5EE70F Uncompressed Size     00000000 (0)\n-5EE713 Filename Length       0055 (85)\n-5EE715 Extra Length          0009 (9)\n-5EE717 Comment Length        0000 (0)\n-5EE719 Disk Start            0000 (0)\n-5EE71B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE71D Ext File Attributes   00000000 (0)\n-5EE721 Local Header Offset   000295CB (169419)\n-5EE725 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE725: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE77A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE77C   Length              0005 (5)\n-5EE77E   Flags               01 (1) 'Modification'\n-5EE77F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE783 CENTRAL HEADER #69    02014B50 (33639248)\n-5EE787 Created Zip Spec      14 (20) '2.0'\n-5EE788 Created OS            00 (0) 'MS-DOS'\n-5EE789 Extract Zip Spec      14 (20) '2.0'\n-5EE78A Extract OS            00 (0) 'MS-DOS'\n-5EE78B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE78D Compression Method    0000 (0) 'Stored'\n-5EE78F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE793 CRC                   C1E5A225 (3253051941)\n-5EE797 Compressed Size       0000070B (1803)\n-5EE79B Uncompressed Size     0000070B (1803)\n-5EE79F Filename Length       006B (107)\n-5EE7A1 Extra Length          0009 (9)\n-5EE7A3 Comment Length        0000 (0)\n-5EE7A5 Disk Start            0000 (0)\n-5EE7A7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE7A9 Ext File Attributes   00000000 (0)\n-5EE7AD Local Header Offset   00029647 (169543)\n-5EE7B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE7B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE81C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE81E   Length              0005 (5)\n-5EE820   Flags               01 (1) 'Modification'\n-5EE821   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE825 CENTRAL HEADER #70    02014B50 (33639248)\n-5EE829 Created Zip Spec      14 (20) '2.0'\n-5EE82A Created OS            00 (0) 'MS-DOS'\n-5EE82B Extract Zip Spec      14 (20) '2.0'\n-5EE82C Extract OS            00 (0) 'MS-DOS'\n-5EE82D General Purpose Flag  0000 (0)\n-5EE82F Compression Method    0000 (0) 'Stored'\n-5EE831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE835 CRC                   00000000 (0)\n-5EE839 Compressed Size       00000000 (0)\n-5EE83D Uncompressed Size     00000000 (0)\n-5EE841 Filename Length       0054 (84)\n-5EE843 Extra Length          0009 (9)\n-5EE845 Comment Length        0000 (0)\n-5EE847 Disk Start            0000 (0)\n-5EE849 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE84B Ext File Attributes   00000000 (0)\n-5EE84F Local Header Offset   00029DF4 (171508)\n-5EE853 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE853: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE8A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE8A9   Length              0005 (5)\n-5EE8AB   Flags               01 (1) 'Modification'\n-5EE8AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE8B0 CENTRAL HEADER #71    02014B50 (33639248)\n-5EE8B4 Created Zip Spec      14 (20) '2.0'\n-5EE8B5 Created OS            00 (0) 'MS-DOS'\n-5EE8B6 Extract Zip Spec      14 (20) '2.0'\n-5EE8B7 Extract OS            00 (0) 'MS-DOS'\n-5EE8B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE8BA Compression Method    0000 (0) 'Stored'\n-5EE8BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE8C0 CRC                   8950733E (2303750974)\n-5EE8C4 Compressed Size       0000064D (1613)\n-5EE8C8 Uncompressed Size     0000064D (1613)\n-5EE8CC Filename Length       006A (106)\n-5EE8CE Extra Length          0009 (9)\n-5EE8D0 Comment Length        0000 (0)\n-5EE8D2 Disk Start            0000 (0)\n-5EE8D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE8D6 Ext File Attributes   00000000 (0)\n-5EE8DA Local Header Offset   00029E6F (171631)\n-5EE8DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE8DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE948 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE94A   Length              0005 (5)\n-5EE94C   Flags               01 (1) 'Modification'\n-5EE94D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE951 CENTRAL HEADER #72    02014B50 (33639248)\n-5EE955 Created Zip Spec      14 (20) '2.0'\n-5EE956 Created OS            00 (0) 'MS-DOS'\n-5EE957 Extract Zip Spec      14 (20) '2.0'\n-5EE958 Extract OS            00 (0) 'MS-DOS'\n-5EE959 General Purpose Flag  0000 (0)\n-5EE95B Compression Method    0000 (0) 'Stored'\n-5EE95D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE961 CRC                   00000000 (0)\n-5EE965 Compressed Size       00000000 (0)\n-5EE969 Uncompressed Size     00000000 (0)\n-5EE96D Filename Length       0053 (83)\n-5EE96F Extra Length          0009 (9)\n-5EE971 Comment Length        0000 (0)\n-5EE973 Disk Start            0000 (0)\n-5EE975 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EE977 Ext File Attributes   00000000 (0)\n-5EE97B Local Header Offset   0002A55D (173405)\n-5EE97F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EE97F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EE9D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EE9D4   Length              0005 (5)\n-5EE9D6   Flags               01 (1) 'Modification'\n-5EE9D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE9DB CENTRAL HEADER #73    02014B50 (33639248)\n-5EE9DF Created Zip Spec      14 (20) '2.0'\n-5EE9E0 Created OS            00 (0) 'MS-DOS'\n-5EE9E1 Extract Zip Spec      14 (20) '2.0'\n-5EE9E2 Extract OS            00 (0) 'MS-DOS'\n-5EE9E3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EE9E5 Compression Method    0000 (0) 'Stored'\n-5EE9E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EE9EB CRC                   A0157ABE (2685762238)\n-5EE9EF Compressed Size       00000643 (1603)\n-5EE9F3 Uncompressed Size     00000643 (1603)\n-5EE9F7 Filename Length       0069 (105)\n-5EE9F9 Extra Length          0009 (9)\n-5EE9FB Comment Length        0000 (0)\n-5EE9FD Disk Start            0000 (0)\n-5EE9FF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEA01 Ext File Attributes   00000000 (0)\n-5EEA05 Local Header Offset   0002A5D7 (173527)\n-5EEA09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEA09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEA72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEA74   Length              0005 (5)\n-5EEA76   Flags               01 (1) 'Modification'\n-5EEA77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEA7B CENTRAL HEADER #74    02014B50 (33639248)\n-5EEA7F Created Zip Spec      14 (20) '2.0'\n-5EEA80 Created OS            00 (0) 'MS-DOS'\n-5EEA81 Extract Zip Spec      14 (20) '2.0'\n-5EEA82 Extract OS            00 (0) 'MS-DOS'\n-5EEA83 General Purpose Flag  0000 (0)\n-5EEA85 Compression Method    0000 (0) 'Stored'\n-5EEA87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEA8B CRC                   00000000 (0)\n-5EEA8F Compressed Size       00000000 (0)\n-5EEA93 Uncompressed Size     00000000 (0)\n-5EEA97 Filename Length       002B (43)\n-5EEA99 Extra Length          0009 (9)\n-5EEA9B Comment Length        0000 (0)\n-5EEA9D Disk Start            0000 (0)\n-5EEA9F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEAA1 Ext File Attributes   00000000 (0)\n-5EEAA5 Local Header Offset   0002ACBA (175290)\n-5EEAA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEAA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEAD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEAD6   Length              0005 (5)\n-5EEAD8   Flags               01 (1) 'Modification'\n-5EEAD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEADD CENTRAL HEADER #75    02014B50 (33639248)\n-5EEAE1 Created Zip Spec      14 (20) '2.0'\n-5EEAE2 Created OS            00 (0) 'MS-DOS'\n-5EEAE3 Extract Zip Spec      14 (20) '2.0'\n-5EEAE4 Extract OS            00 (0) 'MS-DOS'\n-5EEAE5 General Purpose Flag  0000 (0)\n-5EEAE7 Compression Method    0000 (0) 'Stored'\n-5EEAE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEAED CRC                   00000000 (0)\n-5EEAF1 Compressed Size       00000000 (0)\n-5EEAF5 Uncompressed Size     00000000 (0)\n-5EEAF9 Filename Length       0032 (50)\n-5EEAFB Extra Length          0009 (9)\n-5EEAFD Comment Length        0000 (0)\n-5EEAFF Disk Start            0000 (0)\n-5EEB01 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEB03 Ext File Attributes   00000000 (0)\n-5EEB07 Local Header Offset   0002AD0C (175372)\n-5EEB0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEB0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEB3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEB3F   Length              0005 (5)\n-5EEB41   Flags               01 (1) 'Modification'\n-5EEB42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEB46 CENTRAL HEADER #76    02014B50 (33639248)\n-5EEB4A Created Zip Spec      14 (20) '2.0'\n-5EEB4B Created OS            00 (0) 'MS-DOS'\n-5EEB4C Extract Zip Spec      14 (20) '2.0'\n-5EEB4D Extract OS            00 (0) 'MS-DOS'\n-5EEB4E General Purpose Flag  0000 (0)\n-5EEB50 Compression Method    0000 (0) 'Stored'\n-5EEB52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEB56 CRC                   00000000 (0)\n-5EEB5A Compressed Size       00000000 (0)\n-5EEB5E Uncompressed Size     00000000 (0)\n-5EEB62 Filename Length       0079 (121)\n-5EEB64 Extra Length          0009 (9)\n-5EEB66 Comment Length        0000 (0)\n-5EEB68 Disk Start            0000 (0)\n-5EEB6A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEB6C Ext File Attributes   00000000 (0)\n-5EEB70 Local Header Offset   0002AD65 (175461)\n-5EEB74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEB74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEBED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEBEF   Length              0005 (5)\n-5EEBF1   Flags               01 (1) 'Modification'\n-5EEBF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEBF6 CENTRAL HEADER #77    02014B50 (33639248)\n-5EEBFA Created Zip Spec      14 (20) '2.0'\n-5EEBFB Created OS            00 (0) 'MS-DOS'\n-5EEBFC Extract Zip Spec      14 (20) '2.0'\n-5EEBFD Extract OS            00 (0) 'MS-DOS'\n-5EEBFE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EEC00 Compression Method    0000 (0) 'Stored'\n-5EEC02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEC06 CRC                   164EC61D (374261277)\n-5EEC0A Compressed Size       00000B15 (2837)\n-5EEC0E Uncompressed Size     00000B15 (2837)\n-5EEC12 Filename Length       008F (143)\n-5EEC14 Extra Length          0009 (9)\n-5EEC16 Comment Length        0000 (0)\n-5EEC18 Disk Start            0000 (0)\n-5EEC1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEC1C Ext File Attributes   00000000 (0)\n-5EEC20 Local Header Offset   0002AE05 (175621)\n-5EEC24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEC24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EECB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EECB5   Length              0005 (5)\n-5EECB7   Flags               01 (1) 'Modification'\n-5EECB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EECBC CENTRAL HEADER #78    02014B50 (33639248)\n-5EECC0 Created Zip Spec      14 (20) '2.0'\n-5EECC1 Created OS            00 (0) 'MS-DOS'\n-5EECC2 Extract Zip Spec      14 (20) '2.0'\n-5EECC3 Extract OS            00 (0) 'MS-DOS'\n-5EECC4 General Purpose Flag  0000 (0)\n-5EECC6 Compression Method    0000 (0) 'Stored'\n-5EECC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EECCC CRC                   00000000 (0)\n-5EECD0 Compressed Size       00000000 (0)\n-5EECD4 Uncompressed Size     00000000 (0)\n-5EECD8 Filename Length       0023 (35)\n-5EECDA Extra Length          0009 (9)\n-5EECDC Comment Length        0000 (0)\n-5EECDE Disk Start            0000 (0)\n-5EECE0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EECE2 Ext File Attributes   00000000 (0)\n-5EECE6 Local Header Offset   0002B9E0 (178656)\n-5EECEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EECEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EED0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EED0F   Length              0005 (5)\n-5EED11   Flags               01 (1) 'Modification'\n-5EED12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EED16 CENTRAL HEADER #79    02014B50 (33639248)\n-5EED1A Created Zip Spec      14 (20) '2.0'\n-5EED1B Created OS            00 (0) 'MS-DOS'\n-5EED1C Extract Zip Spec      14 (20) '2.0'\n-5EED1D Extract OS            00 (0) 'MS-DOS'\n-5EED1E General Purpose Flag  0000 (0)\n-5EED20 Compression Method    0000 (0) 'Stored'\n-5EED22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EED26 CRC                   00000000 (0)\n-5EED2A Compressed Size       00000000 (0)\n-5EED2E Uncompressed Size     00000000 (0)\n-5EED32 Filename Length       002A (42)\n-5EED34 Extra Length          0009 (9)\n-5EED36 Comment Length        0000 (0)\n-5EED38 Disk Start            0000 (0)\n-5EED3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EED3C Ext File Attributes   00000000 (0)\n-5EED40 Local Header Offset   0002BA2A (178730)\n-5EED44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EED44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EED6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EED70   Length              0005 (5)\n-5EED72   Flags               01 (1) 'Modification'\n-5EED73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EED77 CENTRAL HEADER #80    02014B50 (33639248)\n-5EED7B Created Zip Spec      14 (20) '2.0'\n-5EED7C Created OS            00 (0) 'MS-DOS'\n-5EED7D Extract Zip Spec      14 (20) '2.0'\n-5EED7E Extract OS            00 (0) 'MS-DOS'\n-5EED7F General Purpose Flag  0000 (0)\n-5EED81 Compression Method    0000 (0) 'Stored'\n-5EED83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EED87 CRC                   00000000 (0)\n-5EED8B Compressed Size       00000000 (0)\n-5EED8F Uncompressed Size     00000000 (0)\n-5EED93 Filename Length       0060 (96)\n-5EED95 Extra Length          0009 (9)\n-5EED97 Comment Length        0000 (0)\n-5EED99 Disk Start            0000 (0)\n-5EED9B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EED9D Ext File Attributes   00000000 (0)\n-5EEDA1 Local Header Offset   0002BA7B (178811)\n-5EEDA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEDA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEE05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEE07   Length              0005 (5)\n-5EEE09   Flags               01 (1) 'Modification'\n-5EEE0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEE0E CENTRAL HEADER #81    02014B50 (33639248)\n-5EEE12 Created Zip Spec      14 (20) '2.0'\n-5EEE13 Created OS            00 (0) 'MS-DOS'\n-5EEE14 Extract Zip Spec      14 (20) '2.0'\n-5EEE15 Extract OS            00 (0) 'MS-DOS'\n-5EEE16 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EEE18 Compression Method    0000 (0) 'Stored'\n-5EEE1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEE1E CRC                   A42AA4FE (2754258174)\n-5EEE22 Compressed Size       00000C7F (3199)\n-5EEE26 Uncompressed Size     00000C7F (3199)\n-5EEE2A Filename Length       0076 (118)\n-5EEE2C Extra Length          0009 (9)\n-5EEE2E Comment Length        0000 (0)\n-5EEE30 Disk Start            0000 (0)\n-5EEE32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEE34 Ext File Attributes   00000000 (0)\n-5EEE38 Local Header Offset   0002BB02 (178946)\n-5EEE3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEE3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEEB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEEB4   Length              0005 (5)\n-5EEEB6   Flags               01 (1) 'Modification'\n-5EEEB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEEBB CENTRAL HEADER #82    02014B50 (33639248)\n-5EEEBF Created Zip Spec      14 (20) '2.0'\n-5EEEC0 Created OS            00 (0) 'MS-DOS'\n-5EEEC1 Extract Zip Spec      14 (20) '2.0'\n-5EEEC2 Extract OS            00 (0) 'MS-DOS'\n-5EEEC3 General Purpose Flag  0000 (0)\n-5EEEC5 Compression Method    0000 (0) 'Stored'\n-5EEEC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEECB CRC                   00000000 (0)\n-5EEECF Compressed Size       00000000 (0)\n-5EEED3 Uncompressed Size     00000000 (0)\n-5EEED7 Filename Length       0025 (37)\n-5EEED9 Extra Length          0009 (9)\n-5EEEDB Comment Length        0000 (0)\n-5EEEDD Disk Start            0000 (0)\n-5EEEDF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEEE1 Ext File Attributes   00000000 (0)\n-5EEEE5 Local Header Offset   0002C82E (182318)\n-5EEEE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEEE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEF0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEF10   Length              0005 (5)\n-5EEF12   Flags               01 (1) 'Modification'\n-5EEF13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEF17 CENTRAL HEADER #83    02014B50 (33639248)\n-5EEF1B Created Zip Spec      14 (20) '2.0'\n-5EEF1C Created OS            00 (0) 'MS-DOS'\n-5EEF1D Extract Zip Spec      14 (20) '2.0'\n-5EEF1E Extract OS            00 (0) 'MS-DOS'\n-5EEF1F General Purpose Flag  0000 (0)\n-5EEF21 Compression Method    0000 (0) 'Stored'\n-5EEF23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEF27 CRC                   00000000 (0)\n-5EEF2B Compressed Size       00000000 (0)\n-5EEF2F Uncompressed Size     00000000 (0)\n-5EEF33 Filename Length       002C (44)\n-5EEF35 Extra Length          0009 (9)\n-5EEF37 Comment Length        0000 (0)\n-5EEF39 Disk Start            0000 (0)\n-5EEF3B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEF3D Ext File Attributes   00000000 (0)\n-5EEF41 Local Header Offset   0002C87A (182394)\n-5EEF45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEF45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EEF71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EEF73   Length              0005 (5)\n-5EEF75   Flags               01 (1) 'Modification'\n-5EEF76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EEF7A CENTRAL HEADER #84    02014B50 (33639248)\n-5EEF7E Created Zip Spec      14 (20) '2.0'\n-5EEF7F Created OS            00 (0) 'MS-DOS'\n-5EEF80 Extract Zip Spec      14 (20) '2.0'\n-5EEF81 Extract OS            00 (0) 'MS-DOS'\n-5EEF82 General Purpose Flag  0000 (0)\n-5EEF84 Compression Method    0000 (0) 'Stored'\n-5EEF86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EEF8A CRC                   00000000 (0)\n-5EEF8E Compressed Size       00000000 (0)\n-5EEF92 Uncompressed Size     00000000 (0)\n-5EEF96 Filename Length       005D (93)\n-5EEF98 Extra Length          0009 (9)\n-5EEF9A Comment Length        0000 (0)\n-5EEF9C Disk Start            0000 (0)\n-5EEF9E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EEFA0 Ext File Attributes   00000000 (0)\n-5EEFA4 Local Header Offset   0002C8CD (182477)\n-5EEFA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EEFA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF005 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF007   Length              0005 (5)\n-5EF009   Flags               01 (1) 'Modification'\n-5EF00A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF00E CENTRAL HEADER #85    02014B50 (33639248)\n-5EF012 Created Zip Spec      14 (20) '2.0'\n-5EF013 Created OS            00 (0) 'MS-DOS'\n-5EF014 Extract Zip Spec      14 (20) '2.0'\n-5EF015 Extract OS            00 (0) 'MS-DOS'\n-5EF016 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EF018 Compression Method    0000 (0) 'Stored'\n-5EF01A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF01E CRC                   4F9A1C4F (1335499855)\n-5EF022 Compressed Size       000009AF (2479)\n-5EF026 Uncompressed Size     000009AF (2479)\n-5EF02A Filename Length       0073 (115)\n-5EF02C Extra Length          0009 (9)\n-5EF02E Comment Length        0000 (0)\n-5EF030 Disk Start            0000 (0)\n-5EF032 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF034 Ext File Attributes   00000000 (0)\n-5EF038 Local Header Offset   0002C951 (182609)\n-5EF03C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF03C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF0AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF0B1   Length              0005 (5)\n-5EF0B3   Flags               01 (1) 'Modification'\n-5EF0B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF0B8 CENTRAL HEADER #86    02014B50 (33639248)\n-5EF0BC Created Zip Spec      14 (20) '2.0'\n-5EF0BD Created OS            00 (0) 'MS-DOS'\n-5EF0BE Extract Zip Spec      14 (20) '2.0'\n-5EF0BF Extract OS            00 (0) 'MS-DOS'\n-5EF0C0 General Purpose Flag  0000 (0)\n-5EF0C2 Compression Method    0000 (0) 'Stored'\n-5EF0C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF0C8 CRC                   00000000 (0)\n-5EF0CC Compressed Size       00000000 (0)\n-5EF0D0 Uncompressed Size     00000000 (0)\n-5EF0D4 Filename Length       006A (106)\n-5EF0D6 Extra Length          0009 (9)\n-5EF0D8 Comment Length        0000 (0)\n-5EF0DA Disk Start            0000 (0)\n-5EF0DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF0DE Ext File Attributes   00000000 (0)\n-5EF0E2 Local Header Offset   0002D3AA (185258)\n-5EF0E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF0E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF150 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF152   Length              0005 (5)\n-5EF154   Flags               01 (1) 'Modification'\n-5EF155   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF159 CENTRAL HEADER #87    02014B50 (33639248)\n-5EF15D Created Zip Spec      14 (20) '2.0'\n-5EF15E Created OS            00 (0) 'MS-DOS'\n-5EF15F Extract Zip Spec      14 (20) '2.0'\n-5EF160 Extract OS            00 (0) 'MS-DOS'\n-5EF161 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EF163 Compression Method    0000 (0) 'Stored'\n-5EF165 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF169 CRC                   754F4527 (1968129319)\n-5EF16D Compressed Size       00001265 (4709)\n-5EF171 Uncompressed Size     00001265 (4709)\n-5EF175 Filename Length       0080 (128)\n-5EF177 Extra Length          0009 (9)\n-5EF179 Comment Length        0000 (0)\n-5EF17B Disk Start            0000 (0)\n-5EF17D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF17F Ext File Attributes   00000000 (0)\n-5EF183 Local Header Offset   0002D43B (185403)\n-5EF187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF207 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF209   Length              0005 (5)\n-5EF20B   Flags               01 (1) 'Modification'\n-5EF20C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF210 CENTRAL HEADER #88    02014B50 (33639248)\n-5EF214 Created Zip Spec      14 (20) '2.0'\n-5EF215 Created OS            00 (0) 'MS-DOS'\n-5EF216 Extract Zip Spec      14 (20) '2.0'\n-5EF217 Extract OS            00 (0) 'MS-DOS'\n-5EF218 General Purpose Flag  0000 (0)\n-5EF21A Compression Method    0000 (0) 'Stored'\n-5EF21C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF220 CRC                   00000000 (0)\n-5EF224 Compressed Size       00000000 (0)\n-5EF228 Uncompressed Size     00000000 (0)\n-5EF22C Filename Length       0028 (40)\n-5EF22E Extra Length          0009 (9)\n-5EF230 Comment Length        0000 (0)\n-5EF232 Disk Start            0000 (0)\n-5EF234 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF236 Ext File Attributes   00000000 (0)\n-5EF23A Local Header Offset   0002E757 (190295)\n-5EF23E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF23E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF266 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF268   Length              0005 (5)\n-5EF26A   Flags               01 (1) 'Modification'\n-5EF26B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF26F CENTRAL HEADER #89    02014B50 (33639248)\n-5EF273 Created Zip Spec      14 (20) '2.0'\n-5EF274 Created OS            00 (0) 'MS-DOS'\n-5EF275 Extract Zip Spec      14 (20) '2.0'\n-5EF276 Extract OS            00 (0) 'MS-DOS'\n-5EF277 General Purpose Flag  0000 (0)\n-5EF279 Compression Method    0000 (0) 'Stored'\n-5EF27B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF27F CRC                   00000000 (0)\n-5EF283 Compressed Size       00000000 (0)\n-5EF287 Uncompressed Size     00000000 (0)\n-5EF28B Filename Length       002F (47)\n-5EF28D Extra Length          0009 (9)\n-5EF28F Comment Length        0000 (0)\n-5EF291 Disk Start            0000 (0)\n-5EF293 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF295 Ext File Attributes   00000000 (0)\n-5EF299 Local Header Offset   0002E7A6 (190374)\n-5EF29D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF29D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF2CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF2CE   Length              0005 (5)\n-5EF2D0   Flags               01 (1) 'Modification'\n-5EF2D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF2D5 CENTRAL HEADER #90    02014B50 (33639248)\n-5EF2D9 Created Zip Spec      14 (20) '2.0'\n-5EF2DA Created OS            00 (0) 'MS-DOS'\n-5EF2DB Extract Zip Spec      14 (20) '2.0'\n-5EF2DC Extract OS            00 (0) 'MS-DOS'\n-5EF2DD General Purpose Flag  0000 (0)\n-5EF2DF Compression Method    0000 (0) 'Stored'\n-5EF2E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF2E5 CRC                   00000000 (0)\n-5EF2E9 Compressed Size       00000000 (0)\n-5EF2ED Uncompressed Size     00000000 (0)\n-5EF2F1 Filename Length       0061 (97)\n-5EF2F3 Extra Length          0009 (9)\n-5EF2F5 Comment Length        0000 (0)\n-5EF2F7 Disk Start            0000 (0)\n-5EF2F9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF2FB Ext File Attributes   00000000 (0)\n-5EF2FF Local Header Offset   0002E7FC (190460)\n-5EF303 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF303: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF364 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF366   Length              0005 (5)\n-5EF368   Flags               01 (1) 'Modification'\n-5EF369   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF36D CENTRAL HEADER #91    02014B50 (33639248)\n-5EF371 Created Zip Spec      14 (20) '2.0'\n-5EF372 Created OS            00 (0) 'MS-DOS'\n-5EF373 Extract Zip Spec      14 (20) '2.0'\n-5EF374 Extract OS            00 (0) 'MS-DOS'\n-5EF375 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EF377 Compression Method    0000 (0) 'Stored'\n-5EF379 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF37D CRC                   FE6DB49E (4268602526)\n-5EF381 Compressed Size       000007FF (2047)\n-5EF385 Uncompressed Size     000007FF (2047)\n-5EF389 Filename Length       0077 (119)\n-5EF38B Extra Length          0009 (9)\n-5EF38D Comment Length        0000 (0)\n-5EF38F Disk Start            0000 (0)\n-5EF391 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF393 Ext File Attributes   00000000 (0)\n-5EF397 Local Header Offset   0002E884 (190596)\n-5EF39B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF39B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF412 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF414   Length              0005 (5)\n-5EF416   Flags               01 (1) 'Modification'\n-5EF417   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF41B CENTRAL HEADER #92    02014B50 (33639248)\n-5EF41F Created Zip Spec      14 (20) '2.0'\n-5EF420 Created OS            00 (0) 'MS-DOS'\n-5EF421 Extract Zip Spec      14 (20) '2.0'\n-5EF422 Extract OS            00 (0) 'MS-DOS'\n-5EF423 General Purpose Flag  0000 (0)\n-5EF425 Compression Method    0000 (0) 'Stored'\n-5EF427 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF42B CRC                   00000000 (0)\n-5EF42F Compressed Size       00000000 (0)\n-5EF433 Uncompressed Size     00000000 (0)\n-5EF437 Filename Length       0026 (38)\n-5EF439 Extra Length          0009 (9)\n-5EF43B Comment Length        0000 (0)\n-5EF43D Disk Start            0000 (0)\n-5EF43F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF441 Ext File Attributes   00000000 (0)\n-5EF445 Local Header Offset   0002F131 (192817)\n-5EF449 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF449: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF46F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF471   Length              0005 (5)\n-5EF473   Flags               01 (1) 'Modification'\n-5EF474   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF478 CENTRAL HEADER #93    02014B50 (33639248)\n-5EF47C Created Zip Spec      14 (20) '2.0'\n-5EF47D Created OS            00 (0) 'MS-DOS'\n-5EF47E Extract Zip Spec      14 (20) '2.0'\n-5EF47F Extract OS            00 (0) 'MS-DOS'\n-5EF480 General Purpose Flag  0000 (0)\n-5EF482 Compression Method    0000 (0) 'Stored'\n-5EF484 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF488 CRC                   00000000 (0)\n-5EF48C Compressed Size       00000000 (0)\n-5EF490 Uncompressed Size     00000000 (0)\n-5EF494 Filename Length       002D (45)\n-5EF496 Extra Length          0009 (9)\n-5EF498 Comment Length        0000 (0)\n-5EF49A Disk Start            0000 (0)\n-5EF49C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF49E Ext File Attributes   00000000 (0)\n-5EF4A2 Local Header Offset   0002F17E (192894)\n-5EF4A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF4A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF4D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF4D5   Length              0005 (5)\n-5EF4D7   Flags               01 (1) 'Modification'\n-5EF4D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF4DC CENTRAL HEADER #94    02014B50 (33639248)\n-5EF4E0 Created Zip Spec      14 (20) '2.0'\n-5EF4E1 Created OS            00 (0) 'MS-DOS'\n-5EF4E2 Extract Zip Spec      14 (20) '2.0'\n-5EF4E3 Extract OS            00 (0) 'MS-DOS'\n-5EF4E4 General Purpose Flag  0000 (0)\n-5EF4E6 Compression Method    0000 (0) 'Stored'\n-5EF4E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF4EC CRC                   00000000 (0)\n-5EF4F0 Compressed Size       00000000 (0)\n-5EF4F4 Uncompressed Size     00000000 (0)\n-5EF4F8 Filename Length       0064 (100)\n-5EF4FA Extra Length          0009 (9)\n-5EF4FC Comment Length        0000 (0)\n-5EF4FE Disk Start            0000 (0)\n-5EF500 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF502 Ext File Attributes   00000000 (0)\n-5EF506 Local Header Offset   0002F1D2 (192978)\n-5EF50A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF50A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF56E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF570   Length              0005 (5)\n-5EF572   Flags               01 (1) 'Modification'\n-5EF573   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF577 CENTRAL HEADER #95    02014B50 (33639248)\n-5EF57B Created Zip Spec      14 (20) '2.0'\n-5EF57C Created OS            00 (0) 'MS-DOS'\n-5EF57D Extract Zip Spec      14 (20) '2.0'\n-5EF57E Extract OS            00 (0) 'MS-DOS'\n-5EF57F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EF581 Compression Method    0000 (0) 'Stored'\n-5EF583 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF587 CRC                   FFF8AD9F (4294487455)\n-5EF58B Compressed Size       00000868 (2152)\n-5EF58F Uncompressed Size     00000868 (2152)\n-5EF593 Filename Length       007A (122)\n-5EF595 Extra Length          0009 (9)\n-5EF597 Comment Length        0000 (0)\n-5EF599 Disk Start            0000 (0)\n-5EF59B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF59D Ext File Attributes   00000000 (0)\n-5EF5A1 Local Header Offset   0002F25D (193117)\n-5EF5A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF5A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF61F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF621   Length              0005 (5)\n-5EF623   Flags               01 (1) 'Modification'\n-5EF624   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF628 CENTRAL HEADER #96    02014B50 (33639248)\n-5EF62C Created Zip Spec      14 (20) '2.0'\n-5EF62D Created OS            00 (0) 'MS-DOS'\n-5EF62E Extract Zip Spec      14 (20) '2.0'\n-5EF62F Extract OS            00 (0) 'MS-DOS'\n-5EF630 General Purpose Flag  0000 (0)\n-5EF632 Compression Method    0000 (0) 'Stored'\n-5EF634 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF638 CRC                   00000000 (0)\n-5EF63C Compressed Size       00000000 (0)\n-5EF640 Uncompressed Size     00000000 (0)\n-5EF644 Filename Length       002F (47)\n-5EF646 Extra Length          0009 (9)\n-5EF648 Comment Length        0000 (0)\n-5EF64A Disk Start            0000 (0)\n-5EF64C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF64E Ext File Attributes   00000000 (0)\n-5EF652 Local Header Offset   0002FB76 (195446)\n-5EF656 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF656: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF685 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF687   Length              0005 (5)\n-5EF689   Flags               01 (1) 'Modification'\n-5EF68A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF68E CENTRAL HEADER #97    02014B50 (33639248)\n-5EF692 Created Zip Spec      14 (20) '2.0'\n-5EF693 Created OS            00 (0) 'MS-DOS'\n-5EF694 Extract Zip Spec      14 (20) '2.0'\n-5EF695 Extract OS            00 (0) 'MS-DOS'\n-5EF696 General Purpose Flag  0000 (0)\n-5EF698 Compression Method    0000 (0) 'Stored'\n-5EF69A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF69E CRC                   00000000 (0)\n-5EF6A2 Compressed Size       00000000 (0)\n-5EF6A6 Uncompressed Size     00000000 (0)\n-5EF6AA Filename Length       0036 (54)\n-5EF6AC Extra Length          0009 (9)\n-5EF6AE Comment Length        0000 (0)\n-5EF6B0 Disk Start            0000 (0)\n-5EF6B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF6B4 Ext File Attributes   00000000 (0)\n-5EF6B8 Local Header Offset   0002FBCC (195532)\n-5EF6BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF6BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF6F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF6F4   Length              0005 (5)\n-5EF6F6   Flags               01 (1) 'Modification'\n-5EF6F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF6FB CENTRAL HEADER #98    02014B50 (33639248)\n-5EF6FF Created Zip Spec      14 (20) '2.0'\n-5EF700 Created OS            00 (0) 'MS-DOS'\n-5EF701 Extract Zip Spec      14 (20) '2.0'\n-5EF702 Extract OS            00 (0) 'MS-DOS'\n-5EF703 General Purpose Flag  0000 (0)\n-5EF705 Compression Method    0000 (0) 'Stored'\n-5EF707 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF70B CRC                   00000000 (0)\n-5EF70F Compressed Size       00000000 (0)\n-5EF713 Uncompressed Size     00000000 (0)\n-5EF717 Filename Length       0078 (120)\n-5EF719 Extra Length          0009 (9)\n-5EF71B Comment Length        0000 (0)\n-5EF71D Disk Start            0000 (0)\n-5EF71F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF721 Ext File Attributes   00000000 (0)\n-5EF725 Local Header Offset   0002FC29 (195625)\n-5EF729 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF729: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF7A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF7A3   Length              0005 (5)\n-5EF7A5   Flags               01 (1) 'Modification'\n-5EF7A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF7AA CENTRAL HEADER #99    02014B50 (33639248)\n-5EF7AE Created Zip Spec      14 (20) '2.0'\n-5EF7AF Created OS            00 (0) 'MS-DOS'\n-5EF7B0 Extract Zip Spec      14 (20) '2.0'\n-5EF7B1 Extract OS            00 (0) 'MS-DOS'\n-5EF7B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EF7B4 Compression Method    0000 (0) 'Stored'\n-5EF7B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF7BA CRC                   896578EC (2305128684)\n-5EF7BE Compressed Size       00001327 (4903)\n-5EF7C2 Uncompressed Size     00001327 (4903)\n-5EF7C6 Filename Length       008E (142)\n-5EF7C8 Extra Length          0009 (9)\n-5EF7CA Comment Length        0000 (0)\n-5EF7CC Disk Start            0000 (0)\n-5EF7CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF7D0 Ext File Attributes   00000000 (0)\n-5EF7D4 Local Header Offset   0002FCC8 (195784)\n-5EF7D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXX'\n+12377C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12377E   Length              0005 (5)\n+123780   Flags               01 (1) 'Modification'\n+123781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+123785 PAYLOAD\n+\n+1247BB DATA DESCRIPTOR       08074B50 (134695760)\n+1247BF CRC                   CC28EBBC (3425233852)\n+1247C3 Compressed Size       00001036 (4150)\n+1247C7 Uncompressed Size     00001036 (4150)\n+\n+1247CB LOCAL HEADER #452     04034B50 (67324752)\n+1247CF Extract Zip Spec      14 (20) '2.0'\n+1247D0 Extract OS            00 (0) 'MS-DOS'\n+1247D1 General Purpose Flag  0000 (0)\n+1247D3 Compression Method    0000 (0) 'Stored'\n+1247D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1247D9 CRC                   00000000 (0)\n+1247DD Compressed Size       00000000 (0)\n+1247E1 Uncompressed Size     00000000 (0)\n+1247E5 Filename Length       0031 (49)\n+1247E7 Extra Length          0009 (9)\n+1247E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1247E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12481A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12481C   Length              0005 (5)\n+12481E   Flags               01 (1) 'Modification'\n+12481F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+124823 LOCAL HEADER #453     04034B50 (67324752)\n+124827 Extract Zip Spec      14 (20) '2.0'\n+124828 Extract OS            00 (0) 'MS-DOS'\n+124829 General Purpose Flag  0000 (0)\n+12482B Compression Method    0000 (0) 'Stored'\n+12482D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+124831 CRC                   00000000 (0)\n+124835 Compressed Size       00000000 (0)\n+124839 Uncompressed Size     00000000 (0)\n+12483D Filename Length       0038 (56)\n+12483F Extra Length          0009 (9)\n+124841 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x124841: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+124879 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12487B   Length              0005 (5)\n+12487D   Flags               01 (1) 'Modification'\n+12487E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+124882 LOCAL HEADER #454     04034B50 (67324752)\n+124886 Extract Zip Spec      14 (20) '2.0'\n+124887 Extract OS            00 (0) 'MS-DOS'\n+124888 General Purpose Flag  0000 (0)\n+12488A Compression Method    0000 (0) 'Stored'\n+12488C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+124890 CRC                   00000000 (0)\n+124894 Compressed Size       00000000 (0)\n+124898 Uncompressed Size     00000000 (0)\n+12489C Filename Length       006C (108)\n+12489E Extra Length          0009 (9)\n+1248A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1248A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12490C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12490E   Length              0005 (5)\n+124910   Flags               01 (1) 'Modification'\n+124911   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+124915 LOCAL HEADER #455     04034B50 (67324752)\n+124919 Extract Zip Spec      14 (20) '2.0'\n+12491A Extract OS            00 (0) 'MS-DOS'\n+12491B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12491D Compression Method    0000 (0) 'Stored'\n+12491F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+124923 CRC                   00000000 (0)\n+124927 Compressed Size       00000000 (0)\n+12492B Uncompressed Size     00000000 (0)\n+12492F Filename Length       0082 (130)\n+124931 Extra Length          0009 (9)\n+124933 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x124933: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1249B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1249B7   Length              0005 (5)\n+1249B9   Flags               01 (1) 'Modification'\n+1249BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1249BE PAYLOAD\n+\n+125492 DATA DESCRIPTOR       08074B50 (134695760)\n+125496 CRC                   3FC95820 (1070159904)\n+12549A Compressed Size       00000AD4 (2772)\n+12549E Uncompressed Size     00000AD4 (2772)\n+\n+1254A2 LOCAL HEADER #456     04034B50 (67324752)\n+1254A6 Extract Zip Spec      14 (20) '2.0'\n+1254A7 Extract OS            00 (0) 'MS-DOS'\n+1254A8 General Purpose Flag  0000 (0)\n+1254AA Compression Method    0000 (0) 'Stored'\n+1254AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1254B0 CRC                   00000000 (0)\n+1254B4 Compressed Size       00000000 (0)\n+1254B8 Uncompressed Size     00000000 (0)\n+1254BC Filename Length       0026 (38)\n+1254BE Extra Length          0009 (9)\n+1254C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1254C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1254E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1254E8   Length              0005 (5)\n+1254EA   Flags               01 (1) 'Modification'\n+1254EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1254EF LOCAL HEADER #457     04034B50 (67324752)\n+1254F3 Extract Zip Spec      14 (20) '2.0'\n+1254F4 Extract OS            00 (0) 'MS-DOS'\n+1254F5 General Purpose Flag  0000 (0)\n+1254F7 Compression Method    0000 (0) 'Stored'\n+1254F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1254FD CRC                   00000000 (0)\n+125501 Compressed Size       00000000 (0)\n+125505 Uncompressed Size     00000000 (0)\n+125509 Filename Length       002D (45)\n+12550B Extra Length          0009 (9)\n+12550D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12550D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12553A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12553C   Length              0005 (5)\n+12553E   Flags               01 (1) 'Modification'\n+12553F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+125543 LOCAL HEADER #458     04034B50 (67324752)\n+125547 Extract Zip Spec      14 (20) '2.0'\n+125548 Extract OS            00 (0) 'MS-DOS'\n+125549 General Purpose Flag  0000 (0)\n+12554B Compression Method    0000 (0) 'Stored'\n+12554D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+125551 CRC                   00000000 (0)\n+125555 Compressed Size       00000000 (0)\n+125559 Uncompressed Size     00000000 (0)\n+12555D Filename Length       005B (91)\n+12555F Extra Length          0009 (9)\n+125561 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x125561: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1255BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1255BE   Length              0005 (5)\n+1255C0   Flags               01 (1) 'Modification'\n+1255C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1255C5 LOCAL HEADER #459     04034B50 (67324752)\n+1255C9 Extract Zip Spec      14 (20) '2.0'\n+1255CA Extract OS            00 (0) 'MS-DOS'\n+1255CB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1255CD Compression Method    0000 (0) 'Stored'\n+1255CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1255D3 CRC                   00000000 (0)\n+1255D7 Compressed Size       00000000 (0)\n+1255DB Uncompressed Size     00000000 (0)\n+1255DF Filename Length       0071 (113)\n+1255E1 Extra Length          0009 (9)\n+1255E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1255E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+125654 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+125656   Length              0005 (5)\n+125658   Flags               01 (1) 'Modification'\n+125659   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12565D PAYLOAD\n+\n+12638C DATA DESCRIPTOR       08074B50 (134695760)\n+126390 CRC                   41CBDE11 (1103879697)\n+126394 Compressed Size       00000D2F (3375)\n+126398 Uncompressed Size     00000D2F (3375)\n+\n+12639C LOCAL HEADER #460     04034B50 (67324752)\n+1263A0 Extract Zip Spec      14 (20) '2.0'\n+1263A1 Extract OS            00 (0) 'MS-DOS'\n+1263A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1263A4 Compression Method    0000 (0) 'Stored'\n+1263A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1263AA CRC                   00000000 (0)\n+1263AE Compressed Size       00000000 (0)\n+1263B2 Uncompressed Size     00000000 (0)\n+1263B6 Filename Length       001A (26)\n+1263B8 Extra Length          0009 (9)\n+1263BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1263BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1263D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1263D6   Length              0005 (5)\n+1263D8   Flags               01 (1) 'Modification'\n+1263D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1263DD PAYLOAD\n+\n+5EF5EC DATA DESCRIPTOR       08074B50 (134695760)\n+5EF5F0 CRC                   A5B847E1 (2780317665)\n+5EF5F4 Compressed Size       004C920F (5018127)\n+5EF5F8 Uncompressed Size     004C920F (5018127)\n+\n+5EF5FC CENTRAL HEADER #1     02014B50 (33639248)\n+5EF600 Created Zip Spec      14 (20) '2.0'\n+5EF601 Created OS            00 (0) 'MS-DOS'\n+5EF602 Extract Zip Spec      14 (20) '2.0'\n+5EF603 Extract OS            00 (0) 'MS-DOS'\n+5EF604 General Purpose Flag  0000 (0)\n+5EF606 Compression Method    0000 (0) 'Stored'\n+5EF608 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF60C CRC                   00000000 (0)\n+5EF610 Compressed Size       00000000 (0)\n+5EF614 Uncompressed Size     00000000 (0)\n+5EF618 Filename Length       0009 (9)\n+5EF61A Extra Length          0009 (9)\n+5EF61C Comment Length        0000 (0)\n+5EF61E Disk Start            0000 (0)\n+5EF620 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF622 Ext File Attributes   00000000 (0)\n+5EF626 Local Header Offset   00000000 (0)\n+5EF62A Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF62A: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF633 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF635   Length              0005 (5)\n+5EF637   Flags               01 (1) 'Modification'\n+5EF638   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF63C CENTRAL HEADER #2     02014B50 (33639248)\n+5EF640 Created Zip Spec      14 (20) '2.0'\n+5EF641 Created OS            00 (0) 'MS-DOS'\n+5EF642 Extract Zip Spec      14 (20) '2.0'\n+5EF643 Extract OS            00 (0) 'MS-DOS'\n+5EF644 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF646 Compression Method    0000 (0) 'Stored'\n+5EF648 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF64C CRC                   992A9732 (2569705266)\n+5EF650 Compressed Size       000140FC (82172)\n+5EF654 Uncompressed Size     000140FC (82172)\n+5EF658 Filename Length       0015 (21)\n+5EF65A Extra Length          0009 (9)\n+5EF65C Comment Length        0000 (0)\n+5EF65E Disk Start            0000 (0)\n+5EF660 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF662 Ext File Attributes   00000000 (0)\n+5EF666 Local Header Offset   00000030 (48)\n+5EF66A Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF66A: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF67F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF681   Length              0005 (5)\n+5EF683   Flags               01 (1) 'Modification'\n+5EF684   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF688 CENTRAL HEADER #3     02014B50 (33639248)\n+5EF68C Created Zip Spec      14 (20) '2.0'\n+5EF68D Created OS            00 (0) 'MS-DOS'\n+5EF68E Extract Zip Spec      14 (20) '2.0'\n+5EF68F Extract OS            00 (0) 'MS-DOS'\n+5EF690 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF692 Compression Method    0000 (0) 'Stored'\n+5EF694 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF698 CRC                   86E2B4B4 (2263004340)\n+5EF69C Compressed Size       00002C5E (11358)\n+5EF6A0 Uncompressed Size     00002C5E (11358)\n+5EF6A4 Filename Length       0010 (16)\n+5EF6A6 Extra Length          0009 (9)\n+5EF6A8 Comment Length        0000 (0)\n+5EF6AA Disk Start            0000 (0)\n+5EF6AC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF6AE Ext File Attributes   00000000 (0)\n+5EF6B2 Local Header Offset   00014178 (82296)\n+5EF6B6 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF6B6: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF6C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF6C8   Length              0005 (5)\n+5EF6CA   Flags               01 (1) 'Modification'\n+5EF6CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF6CF CENTRAL HEADER #4     02014B50 (33639248)\n+5EF6D3 Created Zip Spec      14 (20) '2.0'\n+5EF6D4 Created OS            00 (0) 'MS-DOS'\n+5EF6D5 Extract Zip Spec      14 (20) '2.0'\n+5EF6D6 Extract OS            00 (0) 'MS-DOS'\n+5EF6D7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF6D9 Compression Method    0000 (0) 'Stored'\n+5EF6DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF6DF CRC                   F4676394 (4100416404)\n+5EF6E3 Compressed Size       00000106 (262)\n+5EF6E7 Uncompressed Size     00000106 (262)\n+5EF6EB Filename Length       0014 (20)\n+5EF6ED Extra Length          0009 (9)\n+5EF6EF Comment Length        0000 (0)\n+5EF6F1 Disk Start            0000 (0)\n+5EF6F3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF6F5 Ext File Attributes   00000000 (0)\n+5EF6F9 Local Header Offset   00016E1D (93725)\n+5EF6FD Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF6FD: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF711 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF713   Length              0005 (5)\n+5EF715   Flags               01 (1) 'Modification'\n+5EF716   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF71A CENTRAL HEADER #5     02014B50 (33639248)\n+5EF71E Created Zip Spec      14 (20) '2.0'\n+5EF71F Created OS            00 (0) 'MS-DOS'\n+5EF720 Extract Zip Spec      14 (20) '2.0'\n+5EF721 Extract OS            00 (0) 'MS-DOS'\n+5EF722 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF724 Compression Method    0000 (0) 'Stored'\n+5EF726 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF72A CRC                   ADB3DE41 (2914246209)\n+5EF72E Compressed Size       000000A2 (162)\n+5EF732 Uncompressed Size     000000A2 (162)\n+5EF736 Filename Length       000F (15)\n+5EF738 Extra Length          0009 (9)\n+5EF73A Comment Length        0000 (0)\n+5EF73C Disk Start            0000 (0)\n+5EF73E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF740 Ext File Attributes   00000000 (0)\n+5EF744 Local Header Offset   00016F6E (94062)\n+5EF748 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF748: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF757 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF759   Length              0005 (5)\n+5EF75B   Flags               01 (1) 'Modification'\n+5EF75C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF760 CENTRAL HEADER #6     02014B50 (33639248)\n+5EF764 Created Zip Spec      14 (20) '2.0'\n+5EF765 Created OS            00 (0) 'MS-DOS'\n+5EF766 Extract Zip Spec      14 (20) '2.0'\n+5EF767 Extract OS            00 (0) 'MS-DOS'\n+5EF768 General Purpose Flag  0000 (0)\n+5EF76A Compression Method    0000 (0) 'Stored'\n+5EF76C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF770 CRC                   00000000 (0)\n+5EF774 Compressed Size       00000000 (0)\n+5EF778 Uncompressed Size     00000000 (0)\n+5EF77C Filename Length       000F (15)\n+5EF77E Extra Length          0009 (9)\n+5EF780 Comment Length        0000 (0)\n+5EF782 Disk Start            0000 (0)\n+5EF784 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF786 Ext File Attributes   00000000 (0)\n+5EF78A Local Header Offset   00017056 (94294)\n+5EF78E Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF78E: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF79D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF79F   Length              0005 (5)\n+5EF7A1   Flags               01 (1) 'Modification'\n+5EF7A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF7A6 CENTRAL HEADER #7     02014B50 (33639248)\n+5EF7AA Created Zip Spec      14 (20) '2.0'\n+5EF7AB Created OS            00 (0) 'MS-DOS'\n+5EF7AC Extract Zip Spec      14 (20) '2.0'\n+5EF7AD Extract OS            00 (0) 'MS-DOS'\n+5EF7AE General Purpose Flag  0000 (0)\n+5EF7B0 Compression Method    0000 (0) 'Stored'\n+5EF7B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF7B6 CRC                   00000000 (0)\n+5EF7BA Compressed Size       00000000 (0)\n+5EF7BE Uncompressed Size     00000000 (0)\n+5EF7C2 Filename Length       001F (31)\n+5EF7C4 Extra Length          0009 (9)\n+5EF7C6 Comment Length        0000 (0)\n+5EF7C8 Disk Start            0000 (0)\n+5EF7CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF7CC Ext File Attributes   00000000 (0)\n+5EF7D0 Local Header Offset   0001708C (94348)\n+5EF7D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF7D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF7F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF7F5   Length              0005 (5)\n+5EF7F7   Flags               01 (1) 'Modification'\n+5EF7F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF7FC CENTRAL HEADER #8     02014B50 (33639248)\n+5EF800 Created Zip Spec      14 (20) '2.0'\n+5EF801 Created OS            00 (0) 'MS-DOS'\n+5EF802 Extract Zip Spec      14 (20) '2.0'\n+5EF803 Extract OS            00 (0) 'MS-DOS'\n+5EF804 General Purpose Flag  0000 (0)\n+5EF806 Compression Method    0000 (0) 'Stored'\n+5EF808 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF80C CRC                   00000000 (0)\n+5EF810 Compressed Size       00000000 (0)\n+5EF814 Uncompressed Size     00000000 (0)\n+5EF818 Filename Length       0035 (53)\n+5EF81A Extra Length          0009 (9)\n+5EF81C Comment Length        0000 (0)\n+5EF81E Disk Start            0000 (0)\n+5EF820 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF822 Ext File Attributes   00000000 (0)\n+5EF826 Local Header Offset   000170D2 (94418)\n+5EF82A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF82A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF85F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF861   Length              0005 (5)\n+5EF863   Flags               01 (1) 'Modification'\n+5EF864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF868 CENTRAL HEADER #9     02014B50 (33639248)\n+5EF86C Created Zip Spec      14 (20) '2.0'\n+5EF86D Created OS            00 (0) 'MS-DOS'\n+5EF86E Extract Zip Spec      14 (20) '2.0'\n+5EF86F Extract OS            00 (0) 'MS-DOS'\n+5EF870 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF872 Compression Method    0000 (0) 'Stored'\n+5EF874 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF878 CRC                   00000000 (0)\n+5EF87C Compressed Size       00000000 (0)\n+5EF880 Uncompressed Size     00000000 (0)\n+5EF884 Filename Length       0043 (67)\n+5EF886 Extra Length          0009 (9)\n+5EF888 Comment Length        0000 (0)\n+5EF88A Disk Start            0000 (0)\n+5EF88C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF88E Ext File Attributes   00000000 (0)\n+5EF892 Local Header Offset   0001712E (94510)\n+5EF896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF8D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF8DB   Length              0005 (5)\n+5EF8DD   Flags               01 (1) 'Modification'\n+5EF8DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF8E2 CENTRAL HEADER #10    02014B50 (33639248)\n+5EF8E6 Created Zip Spec      14 (20) '2.0'\n+5EF8E7 Created OS            00 (0) 'MS-DOS'\n+5EF8E8 Extract Zip Spec      14 (20) '2.0'\n+5EF8E9 Extract OS            00 (0) 'MS-DOS'\n+5EF8EA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF8EC Compression Method    0000 (0) 'Stored'\n+5EF8EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF8F2 CRC                   9A3E6BCB (2587782091)\n+5EF8F6 Compressed Size       00001B44 (6980)\n+5EF8FA Uncompressed Size     00001B44 (6980)\n+5EF8FE Filename Length       003C (60)\n+5EF900 Extra Length          0009 (9)\n+5EF902 Comment Length        0000 (0)\n+5EF904 Disk Start            0000 (0)\n+5EF906 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF908 Ext File Attributes   00000000 (0)\n+5EF90C Local Header Offset   000171A8 (94632)\n+5EF910 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF910: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF94C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF94E   Length              0005 (5)\n+5EF950   Flags               01 (1) 'Modification'\n+5EF951   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF955 CENTRAL HEADER #11    02014B50 (33639248)\n+5EF959 Created Zip Spec      14 (20) '2.0'\n+5EF95A Created OS            00 (0) 'MS-DOS'\n+5EF95B Extract Zip Spec      14 (20) '2.0'\n+5EF95C Extract OS            00 (0) 'MS-DOS'\n+5EF95D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EF95F Compression Method    0000 (0) 'Stored'\n+5EF961 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF965 CRC                   A53E047C (2772305020)\n+5EF969 Compressed Size       000004AF (1199)\n+5EF96D Uncompressed Size     000004AF (1199)\n+5EF971 Filename Length       0010 (16)\n+5EF973 Extra Length          0009 (9)\n+5EF975 Comment Length        0000 (0)\n+5EF977 Disk Start            0000 (0)\n+5EF979 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF97B Ext File Attributes   00000000 (0)\n+5EF97F Local Header Offset   00018D5F (101727)\n+5EF983 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF983: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EF993 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF995   Length              0005 (5)\n+5EF997   Flags               01 (1) 'Modification'\n+5EF998   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF99C CENTRAL HEADER #12    02014B50 (33639248)\n+5EF9A0 Created Zip Spec      14 (20) '2.0'\n+5EF9A1 Created OS            00 (0) 'MS-DOS'\n+5EF9A2 Extract Zip Spec      14 (20) '2.0'\n+5EF9A3 Extract OS            00 (0) 'MS-DOS'\n+5EF9A4 General Purpose Flag  0000 (0)\n+5EF9A6 Compression Method    0000 (0) 'Stored'\n+5EF9A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF9AC CRC                   00000000 (0)\n+5EF9B0 Compressed Size       00000000 (0)\n+5EF9B4 Uncompressed Size     00000000 (0)\n+5EF9B8 Filename Length       0005 (5)\n+5EF9BA Extra Length          0009 (9)\n+5EF9BC Comment Length        0000 (0)\n+5EF9BE Disk Start            0000 (0)\n+5EF9C0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF9C2 Ext File Attributes   00000000 (0)\n+5EF9C6 Local Header Offset   00019255 (102997)\n+5EF9CA Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x5EF9CA: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+5EF9CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EF9D1   Length              0005 (5)\n+5EF9D3   Flags               01 (1) 'Modification'\n+5EF9D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EF9D8 CENTRAL HEADER #13    02014B50 (33639248)\n+5EF9DC Created Zip Spec      14 (20) '2.0'\n+5EF9DD Created OS            00 (0) 'MS-DOS'\n+5EF9DE Extract Zip Spec      14 (20) '2.0'\n+5EF9DF Extract OS            00 (0) 'MS-DOS'\n+5EF9E0 General Purpose Flag  0000 (0)\n+5EF9E2 Compression Method    0000 (0) 'Stored'\n+5EF9E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EF9E8 CRC                   00000000 (0)\n+5EF9EC Compressed Size       00000000 (0)\n+5EF9F0 Uncompressed Size     00000000 (0)\n+5EF9F4 Filename Length       0015 (21)\n+5EF9F6 Extra Length          0009 (9)\n+5EF9F8 Comment Length        0000 (0)\n+5EF9FA Disk Start            0000 (0)\n+5EF9FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EF9FE Ext File Attributes   00000000 (0)\n+5EFA02 Local Header Offset   00019281 (103041)\n+5EFA06 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFA06: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFA1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFA1D   Length              0005 (5)\n+5EFA1F   Flags               01 (1) 'Modification'\n+5EFA20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFA24 CENTRAL HEADER #14    02014B50 (33639248)\n+5EFA28 Created Zip Spec      14 (20) '2.0'\n+5EFA29 Created OS            00 (0) 'MS-DOS'\n+5EFA2A Extract Zip Spec      14 (20) '2.0'\n+5EFA2B Extract OS            00 (0) 'MS-DOS'\n+5EFA2C General Purpose Flag  0000 (0)\n+5EFA2E Compression Method    0000 (0) 'Stored'\n+5EFA30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFA34 CRC                   00000000 (0)\n+5EFA38 Compressed Size       00000000 (0)\n+5EFA3C Uncompressed Size     00000000 (0)\n+5EFA40 Filename Length       0027 (39)\n+5EFA42 Extra Length          0009 (9)\n+5EFA44 Comment Length        0000 (0)\n+5EFA46 Disk Start            0000 (0)\n+5EFA48 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFA4A Ext File Attributes   00000000 (0)\n+5EFA4E Local Header Offset   000192BD (103101)\n+5EFA52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFA52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFA79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFA7B   Length              0005 (5)\n+5EFA7D   Flags               01 (1) 'Modification'\n+5EFA7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFA82 CENTRAL HEADER #15    02014B50 (33639248)\n+5EFA86 Created Zip Spec      14 (20) '2.0'\n+5EFA87 Created OS            00 (0) 'MS-DOS'\n+5EFA88 Extract Zip Spec      14 (20) '2.0'\n+5EFA89 Extract OS            00 (0) 'MS-DOS'\n+5EFA8A General Purpose Flag  0000 (0)\n+5EFA8C Compression Method    0000 (0) 'Stored'\n+5EFA8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFA92 CRC                   00000000 (0)\n+5EFA96 Compressed Size       00000000 (0)\n+5EFA9A Uncompressed Size     00000000 (0)\n+5EFA9E Filename Length       002E (46)\n+5EFAA0 Extra Length          0009 (9)\n+5EFAA2 Comment Length        0000 (0)\n+5EFAA4 Disk Start            0000 (0)\n+5EFAA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFAA8 Ext File Attributes   00000000 (0)\n+5EFAAC Local Header Offset   0001930B (103179)\n+5EFAB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFAB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFADE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFAE0   Length              0005 (5)\n+5EFAE2   Flags               01 (1) 'Modification'\n+5EFAE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFAE7 CENTRAL HEADER #16    02014B50 (33639248)\n+5EFAEB Created Zip Spec      14 (20) '2.0'\n+5EFAEC Created OS            00 (0) 'MS-DOS'\n+5EFAED Extract Zip Spec      14 (20) '2.0'\n+5EFAEE Extract OS            00 (0) 'MS-DOS'\n+5EFAEF General Purpose Flag  0000 (0)\n+5EFAF1 Compression Method    0000 (0) 'Stored'\n+5EFAF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFAF7 CRC                   00000000 (0)\n+5EFAFB Compressed Size       00000000 (0)\n+5EFAFF Uncompressed Size     00000000 (0)\n+5EFB03 Filename Length       0065 (101)\n+5EFB05 Extra Length          0009 (9)\n+5EFB07 Comment Length        0000 (0)\n+5EFB09 Disk Start            0000 (0)\n+5EFB0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFB0D Ext File Attributes   00000000 (0)\n+5EFB11 Local Header Offset   00019360 (103264)\n+5EFB15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFB15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFB7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFB7C   Length              0005 (5)\n+5EFB7E   Flags               01 (1) 'Modification'\n+5EFB7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFB83 CENTRAL HEADER #17    02014B50 (33639248)\n+5EFB87 Created Zip Spec      14 (20) '2.0'\n+5EFB88 Created OS            00 (0) 'MS-DOS'\n+5EFB89 Extract Zip Spec      14 (20) '2.0'\n+5EFB8A Extract OS            00 (0) 'MS-DOS'\n+5EFB8B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EFB8D Compression Method    0000 (0) 'Stored'\n+5EFB8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFB93 CRC                   9CB4EC6B (2629102699)\n+5EFB97 Compressed Size       00000AA2 (2722)\n+5EFB9B Uncompressed Size     00000AA2 (2722)\n+5EFB9F Filename Length       007B (123)\n+5EFBA1 Extra Length          0009 (9)\n+5EFBA3 Comment Length        0000 (0)\n+5EFBA5 Disk Start            0000 (0)\n+5EFBA7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFBA9 Ext File Attributes   00000000 (0)\n+5EFBAD Local Header Offset   000193EC (103404)\n+5EFBB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFBB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFC2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFC2E   Length              0005 (5)\n+5EFC30   Flags               01 (1) 'Modification'\n+5EFC31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFC35 CENTRAL HEADER #18    02014B50 (33639248)\n+5EFC39 Created Zip Spec      14 (20) '2.0'\n+5EFC3A Created OS            00 (0) 'MS-DOS'\n+5EFC3B Extract Zip Spec      14 (20) '2.0'\n+5EFC3C Extract OS            00 (0) 'MS-DOS'\n+5EFC3D General Purpose Flag  0000 (0)\n+5EFC3F Compression Method    0000 (0) 'Stored'\n+5EFC41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFC45 CRC                   00000000 (0)\n+5EFC49 Compressed Size       00000000 (0)\n+5EFC4D Uncompressed Size     00000000 (0)\n+5EFC51 Filename Length       0025 (37)\n+5EFC53 Extra Length          0009 (9)\n+5EFC55 Comment Length        0000 (0)\n+5EFC57 Disk Start            0000 (0)\n+5EFC59 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFC5B Ext File Attributes   00000000 (0)\n+5EFC5F Local Header Offset   00019F40 (106304)\n+5EFC63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFC63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFC88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFC8A   Length              0005 (5)\n+5EFC8C   Flags               01 (1) 'Modification'\n+5EFC8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFC91 CENTRAL HEADER #19    02014B50 (33639248)\n+5EFC95 Created Zip Spec      14 (20) '2.0'\n+5EFC96 Created OS            00 (0) 'MS-DOS'\n+5EFC97 Extract Zip Spec      14 (20) '2.0'\n+5EFC98 Extract OS            00 (0) 'MS-DOS'\n+5EFC99 General Purpose Flag  0000 (0)\n+5EFC9B Compression Method    0000 (0) 'Stored'\n+5EFC9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFCA1 CRC                   00000000 (0)\n+5EFCA5 Compressed Size       00000000 (0)\n+5EFCA9 Uncompressed Size     00000000 (0)\n+5EFCAD Filename Length       002C (44)\n+5EFCAF Extra Length          0009 (9)\n+5EFCB1 Comment Length        0000 (0)\n+5EFCB3 Disk Start            0000 (0)\n+5EFCB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFCB7 Ext File Attributes   00000000 (0)\n+5EFCBB Local Header Offset   00019F8C (106380)\n+5EFCBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFCBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFCEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFCED   Length              0005 (5)\n+5EFCEF   Flags               01 (1) 'Modification'\n+5EFCF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFCF4 CENTRAL HEADER #20    02014B50 (33639248)\n+5EFCF8 Created Zip Spec      14 (20) '2.0'\n+5EFCF9 Created OS            00 (0) 'MS-DOS'\n+5EFCFA Extract Zip Spec      14 (20) '2.0'\n+5EFCFB Extract OS            00 (0) 'MS-DOS'\n+5EFCFC General Purpose Flag  0000 (0)\n+5EFCFE Compression Method    0000 (0) 'Stored'\n+5EFD00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFD04 CRC                   00000000 (0)\n+5EFD08 Compressed Size       00000000 (0)\n+5EFD0C Uncompressed Size     00000000 (0)\n+5EFD10 Filename Length       0061 (97)\n+5EFD12 Extra Length          0009 (9)\n+5EFD14 Comment Length        0000 (0)\n+5EFD16 Disk Start            0000 (0)\n+5EFD18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFD1A Ext File Attributes   00000000 (0)\n+5EFD1E Local Header Offset   00019FDF (106463)\n+5EFD22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFD22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFD83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFD85   Length              0005 (5)\n+5EFD87   Flags               01 (1) 'Modification'\n+5EFD88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFD8C CENTRAL HEADER #21    02014B50 (33639248)\n+5EFD90 Created Zip Spec      14 (20) '2.0'\n+5EFD91 Created OS            00 (0) 'MS-DOS'\n+5EFD92 Extract Zip Spec      14 (20) '2.0'\n+5EFD93 Extract OS            00 (0) 'MS-DOS'\n+5EFD94 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EFD96 Compression Method    0000 (0) 'Stored'\n+5EFD98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFD9C CRC                   1401A9F3 (335653363)\n+5EFDA0 Compressed Size       00000945 (2373)\n+5EFDA4 Uncompressed Size     00000945 (2373)\n+5EFDA8 Filename Length       0077 (119)\n+5EFDAA Extra Length          0009 (9)\n+5EFDAC Comment Length        0000 (0)\n+5EFDAE Disk Start            0000 (0)\n+5EFDB0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFDB2 Ext File Attributes   00000000 (0)\n+5EFDB6 Local Header Offset   0001A067 (106599)\n+5EFDBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFDBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFE31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFE33   Length              0005 (5)\n+5EFE35   Flags               01 (1) 'Modification'\n+5EFE36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFE3A CENTRAL HEADER #22    02014B50 (33639248)\n+5EFE3E Created Zip Spec      14 (20) '2.0'\n+5EFE3F Created OS            00 (0) 'MS-DOS'\n+5EFE40 Extract Zip Spec      14 (20) '2.0'\n+5EFE41 Extract OS            00 (0) 'MS-DOS'\n+5EFE42 General Purpose Flag  0000 (0)\n+5EFE44 Compression Method    0000 (0) 'Stored'\n+5EFE46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFE4A CRC                   00000000 (0)\n+5EFE4E Compressed Size       00000000 (0)\n+5EFE52 Uncompressed Size     00000000 (0)\n+5EFE56 Filename Length       0023 (35)\n+5EFE58 Extra Length          0009 (9)\n+5EFE5A Comment Length        0000 (0)\n+5EFE5C Disk Start            0000 (0)\n+5EFE5E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFE60 Ext File Attributes   00000000 (0)\n+5EFE64 Local Header Offset   0001AA5A (109146)\n+5EFE68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFE68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFE8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFE8D   Length              0005 (5)\n+5EFE8F   Flags               01 (1) 'Modification'\n+5EFE90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFE94 CENTRAL HEADER #23    02014B50 (33639248)\n+5EFE98 Created Zip Spec      14 (20) '2.0'\n+5EFE99 Created OS            00 (0) 'MS-DOS'\n+5EFE9A Extract Zip Spec      14 (20) '2.0'\n+5EFE9B Extract OS            00 (0) 'MS-DOS'\n+5EFE9C General Purpose Flag  0000 (0)\n+5EFE9E Compression Method    0000 (0) 'Stored'\n+5EFEA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFEA4 CRC                   00000000 (0)\n+5EFEA8 Compressed Size       00000000 (0)\n+5EFEAC Uncompressed Size     00000000 (0)\n+5EFEB0 Filename Length       002A (42)\n+5EFEB2 Extra Length          0009 (9)\n+5EFEB4 Comment Length        0000 (0)\n+5EFEB6 Disk Start            0000 (0)\n+5EFEB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFEBA Ext File Attributes   00000000 (0)\n+5EFEBE Local Header Offset   0001AAA4 (109220)\n+5EFEC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFEC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFEEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFEEE   Length              0005 (5)\n+5EFEF0   Flags               01 (1) 'Modification'\n+5EFEF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFEF5 CENTRAL HEADER #24    02014B50 (33639248)\n+5EFEF9 Created Zip Spec      14 (20) '2.0'\n+5EFEFA Created OS            00 (0) 'MS-DOS'\n+5EFEFB Extract Zip Spec      14 (20) '2.0'\n+5EFEFC Extract OS            00 (0) 'MS-DOS'\n+5EFEFD General Purpose Flag  0000 (0)\n+5EFEFF Compression Method    0000 (0) 'Stored'\n+5EFF01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFF05 CRC                   00000000 (0)\n+5EFF09 Compressed Size       00000000 (0)\n+5EFF0D Uncompressed Size     00000000 (0)\n+5EFF11 Filename Length       0056 (86)\n+5EFF13 Extra Length          0009 (9)\n+5EFF15 Comment Length        0000 (0)\n+5EFF17 Disk Start            0000 (0)\n+5EFF19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFF1B Ext File Attributes   00000000 (0)\n+5EFF1F Local Header Offset   0001AAF5 (109301)\n+5EFF23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFF23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EFF79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EFF7B   Length              0005 (5)\n+5EFF7D   Flags               01 (1) 'Modification'\n+5EFF7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EFF82 CENTRAL HEADER #25    02014B50 (33639248)\n+5EFF86 Created Zip Spec      14 (20) '2.0'\n+5EFF87 Created OS            00 (0) 'MS-DOS'\n+5EFF88 Extract Zip Spec      14 (20) '2.0'\n+5EFF89 Extract OS            00 (0) 'MS-DOS'\n+5EFF8A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5EFF8C Compression Method    0000 (0) 'Stored'\n+5EFF8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5EFF92 CRC                   445AD7B2 (1146804146)\n+5EFF96 Compressed Size       00000FBF (4031)\n+5EFF9A Uncompressed Size     00000FBF (4031)\n+5EFF9E Filename Length       006C (108)\n+5EFFA0 Extra Length          0009 (9)\n+5EFFA2 Comment Length        0000 (0)\n+5EFFA4 Disk Start            0000 (0)\n+5EFFA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5EFFA8 Ext File Attributes   00000000 (0)\n+5EFFAC Local Header Offset   0001AB72 (109426)\n+5EFFB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EFFB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F001C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F001E   Length              0005 (5)\n+5F0020   Flags               01 (1) 'Modification'\n+5F0021   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0025 CENTRAL HEADER #26    02014B50 (33639248)\n+5F0029 Created Zip Spec      14 (20) '2.0'\n+5F002A Created OS            00 (0) 'MS-DOS'\n+5F002B Extract Zip Spec      14 (20) '2.0'\n+5F002C Extract OS            00 (0) 'MS-DOS'\n+5F002D General Purpose Flag  0000 (0)\n+5F002F Compression Method    0000 (0) 'Stored'\n+5F0031 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0035 CRC                   00000000 (0)\n+5F0039 Compressed Size       00000000 (0)\n+5F003D Uncompressed Size     00000000 (0)\n+5F0041 Filename Length       0056 (86)\n+5F0043 Extra Length          0009 (9)\n+5F0045 Comment Length        0000 (0)\n+5F0047 Disk Start            0000 (0)\n+5F0049 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F004B Ext File Attributes   00000000 (0)\n+5F004F Local Header Offset   0001BBD4 (113620)\n+5F0053 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0053: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F00A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F00AB   Length              0005 (5)\n+5F00AD   Flags               01 (1) 'Modification'\n+5F00AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F00B2 CENTRAL HEADER #27    02014B50 (33639248)\n+5F00B6 Created Zip Spec      14 (20) '2.0'\n+5F00B7 Created OS            00 (0) 'MS-DOS'\n+5F00B8 Extract Zip Spec      14 (20) '2.0'\n+5F00B9 Extract OS            00 (0) 'MS-DOS'\n+5F00BA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F00BC Compression Method    0000 (0) 'Stored'\n+5F00BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F00C2 CRC                   A2A96EA2 (2729012898)\n+5F00C6 Compressed Size       000016DE (5854)\n+5F00CA Uncompressed Size     000016DE (5854)\n+5F00CE Filename Length       006C (108)\n+5F00D0 Extra Length          0009 (9)\n+5F00D2 Comment Length        0000 (0)\n+5F00D4 Disk Start            0000 (0)\n+5F00D6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F00D8 Ext File Attributes   00000000 (0)\n+5F00DC Local Header Offset   0001BC51 (113745)\n+5F00E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F00E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F014C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F014E   Length              0005 (5)\n+5F0150   Flags               01 (1) 'Modification'\n+5F0151   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0155 CENTRAL HEADER #28    02014B50 (33639248)\n+5F0159 Created Zip Spec      14 (20) '2.0'\n+5F015A Created OS            00 (0) 'MS-DOS'\n+5F015B Extract Zip Spec      14 (20) '2.0'\n+5F015C Extract OS            00 (0) 'MS-DOS'\n+5F015D General Purpose Flag  0000 (0)\n+5F015F Compression Method    0000 (0) 'Stored'\n+5F0161 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0165 CRC                   00000000 (0)\n+5F0169 Compressed Size       00000000 (0)\n+5F016D Uncompressed Size     00000000 (0)\n+5F0171 Filename Length       002F (47)\n+5F0173 Extra Length          0009 (9)\n+5F0175 Comment Length        0000 (0)\n+5F0177 Disk Start            0000 (0)\n+5F0179 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F017B Ext File Attributes   00000000 (0)\n+5F017F Local Header Offset   0001D3D2 (119762)\n+5F0183 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5EF7D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF866 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF868   Length              0005 (5)\n-5EF86A   Flags               01 (1) 'Modification'\n-5EF86B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF86F CENTRAL HEADER #100   02014B50 (33639248)\n-5EF873 Created Zip Spec      14 (20) '2.0'\n-5EF874 Created OS            00 (0) 'MS-DOS'\n-5EF875 Extract Zip Spec      14 (20) '2.0'\n-5EF876 Extract OS            00 (0) 'MS-DOS'\n-5EF877 General Purpose Flag  0000 (0)\n-5EF879 Compression Method    0000 (0) 'Stored'\n-5EF87B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF87F CRC                   00000000 (0)\n-5EF883 Compressed Size       00000000 (0)\n-5EF887 Uncompressed Size     00000000 (0)\n-5EF88B Filename Length       003B (59)\n-5EF88D Extra Length          0009 (9)\n-5EF88F Comment Length        0000 (0)\n-5EF891 Disk Start            0000 (0)\n-5EF893 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF895 Ext File Attributes   00000000 (0)\n-5EF899 Local Header Offset   000310B4 (200884)\n-5EF89D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF89D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF8D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF8DA   Length              0005 (5)\n-5EF8DC   Flags               01 (1) 'Modification'\n-5EF8DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF8E1 CENTRAL HEADER #101   02014B50 (33639248)\n-5EF8E5 Created Zip Spec      14 (20) '2.0'\n-5EF8E6 Created OS            00 (0) 'MS-DOS'\n-5EF8E7 Extract Zip Spec      14 (20) '2.0'\n-5EF8E8 Extract OS            00 (0) 'MS-DOS'\n-5EF8E9 General Purpose Flag  0000 (0)\n-5EF8EB Compression Method    0000 (0) 'Stored'\n-5EF8ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF8F1 CRC                   00000000 (0)\n-5EF8F5 Compressed Size       00000000 (0)\n-5EF8F9 Uncompressed Size     00000000 (0)\n-5EF8FD Filename Length       0042 (66)\n-5EF8FF Extra Length          0009 (9)\n-5EF901 Comment Length        0000 (0)\n-5EF903 Disk Start            0000 (0)\n-5EF905 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF907 Ext File Attributes   00000000 (0)\n-5EF90B Local Header Offset   00031116 (200982)\n-5EF90F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF90F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EF951 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EF953   Length              0005 (5)\n-5EF955   Flags               01 (1) 'Modification'\n-5EF956   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EF95A CENTRAL HEADER #102   02014B50 (33639248)\n-5EF95E Created Zip Spec      14 (20) '2.0'\n-5EF95F Created OS            00 (0) 'MS-DOS'\n-5EF960 Extract Zip Spec      14 (20) '2.0'\n-5EF961 Extract OS            00 (0) 'MS-DOS'\n-5EF962 General Purpose Flag  0000 (0)\n-5EF964 Compression Method    0000 (0) 'Stored'\n-5EF966 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EF96A CRC                   00000000 (0)\n-5EF96E Compressed Size       00000000 (0)\n-5EF972 Uncompressed Size     00000000 (0)\n-5EF976 Filename Length       007F (127)\n-5EF978 Extra Length          0009 (9)\n-5EF97A Comment Length        0000 (0)\n-5EF97C Disk Start            0000 (0)\n-5EF97E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EF980 Ext File Attributes   00000000 (0)\n-5EF984 Local Header Offset   0003117F (201087)\n-5EF988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EF988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFA07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFA09   Length              0005 (5)\n-5EFA0B   Flags               01 (1) 'Modification'\n-5EFA0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFA10 CENTRAL HEADER #103   02014B50 (33639248)\n-5EFA14 Created Zip Spec      14 (20) '2.0'\n-5EFA15 Created OS            00 (0) 'MS-DOS'\n-5EFA16 Extract Zip Spec      14 (20) '2.0'\n-5EFA17 Extract OS            00 (0) 'MS-DOS'\n-5EFA18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EFA1A Compression Method    0000 (0) 'Stored'\n-5EFA1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFA20 CRC                   33B19866 (867276902)\n-5EFA24 Compressed Size       00000A59 (2649)\n-5EFA28 Uncompressed Size     00000A59 (2649)\n-5EFA2C Filename Length       0095 (149)\n-5EFA2E Extra Length          0009 (9)\n-5EFA30 Comment Length        0000 (0)\n-5EFA32 Disk Start            0000 (0)\n-5EFA34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFA36 Ext File Attributes   00000000 (0)\n-5EFA3A Local Header Offset   00031225 (201253)\n-5EFA3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFA3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFAD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFAD5   Length              0005 (5)\n-5EFAD7   Flags               01 (1) 'Modification'\n-5EFAD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFADC CENTRAL HEADER #104   02014B50 (33639248)\n-5EFAE0 Created Zip Spec      14 (20) '2.0'\n-5EFAE1 Created OS            00 (0) 'MS-DOS'\n-5EFAE2 Extract Zip Spec      14 (20) '2.0'\n-5EFAE3 Extract OS            00 (0) 'MS-DOS'\n-5EFAE4 General Purpose Flag  0000 (0)\n-5EFAE6 Compression Method    0000 (0) 'Stored'\n-5EFAE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFAEC CRC                   00000000 (0)\n-5EFAF0 Compressed Size       00000000 (0)\n-5EFAF4 Uncompressed Size     00000000 (0)\n-5EFAF8 Filename Length       007B (123)\n-5EFAFA Extra Length          0009 (9)\n-5EFAFC Comment Length        0000 (0)\n-5EFAFE Disk Start            0000 (0)\n-5EFB00 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFB02 Ext File Attributes   00000000 (0)\n-5EFB06 Local Header Offset   00031D4A (204106)\n-5EFB0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFB0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFB85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFB87   Length              0005 (5)\n-5EFB89   Flags               01 (1) 'Modification'\n-5EFB8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFB8E CENTRAL HEADER #105   02014B50 (33639248)\n-5EFB92 Created Zip Spec      14 (20) '2.0'\n-5EFB93 Created OS            00 (0) 'MS-DOS'\n-5EFB94 Extract Zip Spec      14 (20) '2.0'\n-5EFB95 Extract OS            00 (0) 'MS-DOS'\n-5EFB96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EFB98 Compression Method    0000 (0) 'Stored'\n-5EFB9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFB9E CRC                   2B6EF697 (728692375)\n-5EFBA2 Compressed Size       000008CD (2253)\n-5EFBA6 Uncompressed Size     000008CD (2253)\n-5EFBAA Filename Length       0091 (145)\n-5EFBAC Extra Length          0009 (9)\n-5EFBAE Comment Length        0000 (0)\n-5EFBB0 Disk Start            0000 (0)\n-5EFBB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFBB4 Ext File Attributes   00000000 (0)\n-5EFBB8 Local Header Offset   00031DEC (204268)\n-5EFBBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFBBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFC4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFC4F   Length              0005 (5)\n-5EFC51   Flags               01 (1) 'Modification'\n-5EFC52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFC56 CENTRAL HEADER #106   02014B50 (33639248)\n-5EFC5A Created Zip Spec      14 (20) '2.0'\n-5EFC5B Created OS            00 (0) 'MS-DOS'\n-5EFC5C Extract Zip Spec      14 (20) '2.0'\n-5EFC5D Extract OS            00 (0) 'MS-DOS'\n-5EFC5E General Purpose Flag  0000 (0)\n-5EFC60 Compression Method    0000 (0) 'Stored'\n-5EFC62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFC66 CRC                   00000000 (0)\n-5EFC6A Compressed Size       00000000 (0)\n-5EFC6E Uncompressed Size     00000000 (0)\n-5EFC72 Filename Length       0034 (52)\n-5EFC74 Extra Length          0009 (9)\n-5EFC76 Comment Length        0000 (0)\n-5EFC78 Disk Start            0000 (0)\n-5EFC7A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFC7C Ext File Attributes   00000000 (0)\n-5EFC80 Local Header Offset   00032781 (206721)\n-5EFC84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFC84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFCB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFCBA   Length              0005 (5)\n-5EFCBC   Flags               01 (1) 'Modification'\n-5EFCBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFCC1 CENTRAL HEADER #107   02014B50 (33639248)\n-5EFCC5 Created Zip Spec      14 (20) '2.0'\n-5EFCC6 Created OS            00 (0) 'MS-DOS'\n-5EFCC7 Extract Zip Spec      14 (20) '2.0'\n-5EFCC8 Extract OS            00 (0) 'MS-DOS'\n-5EFCC9 General Purpose Flag  0000 (0)\n-5EFCCB Compression Method    0000 (0) 'Stored'\n-5EFCCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFCD1 CRC                   00000000 (0)\n-5EFCD5 Compressed Size       00000000 (0)\n-5EFCD9 Uncompressed Size     00000000 (0)\n-5EFCDD Filename Length       003B (59)\n-5EFCDF Extra Length          0009 (9)\n-5EFCE1 Comment Length        0000 (0)\n-5EFCE3 Disk Start            0000 (0)\n-5EFCE5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFCE7 Ext File Attributes   00000000 (0)\n-5EFCEB Local Header Offset   000327DC (206812)\n-5EFCEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFCEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFD2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFD2C   Length              0005 (5)\n-5EFD2E   Flags               01 (1) 'Modification'\n-5EFD2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFD33 CENTRAL HEADER #108   02014B50 (33639248)\n-5EFD37 Created Zip Spec      14 (20) '2.0'\n-5EFD38 Created OS            00 (0) 'MS-DOS'\n-5EFD39 Extract Zip Spec      14 (20) '2.0'\n-5EFD3A Extract OS            00 (0) 'MS-DOS'\n-5EFD3B General Purpose Flag  0000 (0)\n-5EFD3D Compression Method    0000 (0) 'Stored'\n-5EFD3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFD43 CRC                   00000000 (0)\n-5EFD47 Compressed Size       00000000 (0)\n-5EFD4B Uncompressed Size     00000000 (0)\n-5EFD4F Filename Length       007F (127)\n-5EFD51 Extra Length          0009 (9)\n-5EFD53 Comment Length        0000 (0)\n-5EFD55 Disk Start            0000 (0)\n-5EFD57 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFD59 Ext File Attributes   00000000 (0)\n-5EFD5D Local Header Offset   0003283E (206910)\n-5EFD61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFD61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFDE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFDE2   Length              0005 (5)\n-5EFDE4   Flags               01 (1) 'Modification'\n-5EFDE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFDE9 CENTRAL HEADER #109   02014B50 (33639248)\n-5EFDED Created Zip Spec      14 (20) '2.0'\n-5EFDEE Created OS            00 (0) 'MS-DOS'\n-5EFDEF Extract Zip Spec      14 (20) '2.0'\n-5EFDF0 Extract OS            00 (0) 'MS-DOS'\n-5EFDF1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EFDF3 Compression Method    0000 (0) 'Stored'\n-5EFDF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFDF9 CRC                   9AFFB21B (2600448539)\n-5EFDFD Compressed Size       0000064E (1614)\n-5EFE01 Uncompressed Size     0000064E (1614)\n-5EFE05 Filename Length       0095 (149)\n-5EFE07 Extra Length          0009 (9)\n-5EFE09 Comment Length        0000 (0)\n-5EFE0B Disk Start            0000 (0)\n-5EFE0D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFE0F Ext File Attributes   00000000 (0)\n-5EFE13 Local Header Offset   000328E4 (207076)\n-5EFE17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFE17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFEAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFEAE   Length              0005 (5)\n-5EFEB0   Flags               01 (1) 'Modification'\n-5EFEB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFEB5 CENTRAL HEADER #110   02014B50 (33639248)\n-5EFEB9 Created Zip Spec      14 (20) '2.0'\n-5EFEBA Created OS            00 (0) 'MS-DOS'\n-5EFEBB Extract Zip Spec      14 (20) '2.0'\n-5EFEBC Extract OS            00 (0) 'MS-DOS'\n-5EFEBD General Purpose Flag  0000 (0)\n-5EFEBF Compression Method    0000 (0) 'Stored'\n-5EFEC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFEC5 CRC                   00000000 (0)\n-5EFEC9 Compressed Size       00000000 (0)\n-5EFECD Uncompressed Size     00000000 (0)\n-5EFED1 Filename Length       007B (123)\n-5EFED3 Extra Length          0009 (9)\n-5EFED5 Comment Length        0000 (0)\n-5EFED7 Disk Start            0000 (0)\n-5EFED9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFEDB Ext File Attributes   00000000 (0)\n-5EFEDF Local Header Offset   00032FFE (208894)\n-5EFEE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFEE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EFF5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EFF60   Length              0005 (5)\n-5EFF62   Flags               01 (1) 'Modification'\n-5EFF63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EFF67 CENTRAL HEADER #111   02014B50 (33639248)\n-5EFF6B Created Zip Spec      14 (20) '2.0'\n-5EFF6C Created OS            00 (0) 'MS-DOS'\n-5EFF6D Extract Zip Spec      14 (20) '2.0'\n-5EFF6E Extract OS            00 (0) 'MS-DOS'\n-5EFF6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5EFF71 Compression Method    0000 (0) 'Stored'\n-5EFF73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5EFF77 CRC                   88CF36AA (2295281322)\n-5EFF7B Compressed Size       00000A4F (2639)\n-5EFF7F Uncompressed Size     00000A4F (2639)\n-5EFF83 Filename Length       0091 (145)\n-5EFF85 Extra Length          0009 (9)\n-5EFF87 Comment Length        0000 (0)\n-5EFF89 Disk Start            0000 (0)\n-5EFF8B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5EFF8D Ext File Attributes   00000000 (0)\n-5EFF91 Local Header Offset   000330A0 (209056)\n-5EFF95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EFF95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0026 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0028   Length              0005 (5)\n-5F002A   Flags               01 (1) 'Modification'\n-5F002B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F002F CENTRAL HEADER #112   02014B50 (33639248)\n-5F0033 Created Zip Spec      14 (20) '2.0'\n-5F0034 Created OS            00 (0) 'MS-DOS'\n-5F0035 Extract Zip Spec      14 (20) '2.0'\n-5F0036 Extract OS            00 (0) 'MS-DOS'\n-5F0037 General Purpose Flag  0000 (0)\n-5F0039 Compression Method    0000 (0) 'Stored'\n-5F003B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F003F CRC                   00000000 (0)\n-5F0043 Compressed Size       00000000 (0)\n-5F0047 Uncompressed Size     00000000 (0)\n-5F004B Filename Length       0084 (132)\n-5F004D Extra Length          0009 (9)\n-5F004F Comment Length        0000 (0)\n-5F0051 Disk Start            0000 (0)\n-5F0053 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0055 Ext File Attributes   00000000 (0)\n-5F0059 Local Header Offset   00033BB7 (211895)\n-5F005D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n-#\n-# WARNING: Offset 0x5F005D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F00E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F00E3   Length              0005 (5)\n-5F00E5   Flags               01 (1) 'Modification'\n-5F00E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F00EA CENTRAL HEADER #113   02014B50 (33639248)\n-5F00EE Created Zip Spec      14 (20) '2.0'\n-5F00EF Created OS            00 (0) 'MS-DOS'\n-5F00F0 Extract Zip Spec      14 (20) '2.0'\n-5F00F1 Extract OS            00 (0) 'MS-DOS'\n-5F00F2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F00F4 Compression Method    0000 (0) 'Stored'\n-5F00F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F00FA CRC                   217E01B2 (561906098)\n-5F00FE Compressed Size       00000D09 (3337)\n-5F0102 Uncompressed Size     00000D09 (3337)\n-5F0106 Filename Length       009A (154)\n-5F0108 Extra Length          0009 (9)\n-5F010A Comment Length        0000 (0)\n-5F010C Disk Start            0000 (0)\n-5F010E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0110 Ext File Attributes   00000000 (0)\n-5F0114 Local Header Offset   00033C62 (212066)\n-5F0118 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0118: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F0183: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5F01B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5F01B4   Length              0005 (5)\n 5F01B6   Flags               01 (1) 'Modification'\n 5F01B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5F01BB CENTRAL HEADER #114   02014B50 (33639248)\n+5F01BB CENTRAL HEADER #29    02014B50 (33639248)\n 5F01BF Created Zip Spec      14 (20) '2.0'\n 5F01C0 Created OS            00 (0) 'MS-DOS'\n 5F01C1 Extract Zip Spec      14 (20) '2.0'\n 5F01C2 Extract OS            00 (0) 'MS-DOS'\n 5F01C3 General Purpose Flag  0000 (0)\n 5F01C5 Compression Method    0000 (0) 'Stored'\n 5F01C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n 5F01CB CRC                   00000000 (0)\n 5F01CF Compressed Size       00000000 (0)\n 5F01D3 Uncompressed Size     00000000 (0)\n-5F01D7 Filename Length       0079 (121)\n+5F01D7 Filename Length       0036 (54)\n 5F01D9 Extra Length          0009 (9)\n 5F01DB Comment Length        0000 (0)\n 5F01DD Disk Start            0000 (0)\n 5F01DF Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5F01E1 Ext File Attributes   00000000 (0)\n-5F01E5 Local Header Offset   00034A3C (215612)\n-5F01E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F01E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n+5F01E5 Local Header Offset   0001D428 (119848)\n+5F01E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-5F0262 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0264   Length              0005 (5)\n-5F0266   Flags               01 (1) 'Modification'\n-5F0267   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F026B CENTRAL HEADER #115   02014B50 (33639248)\n-5F026F Created Zip Spec      14 (20) '2.0'\n-5F0270 Created OS            00 (0) 'MS-DOS'\n-5F0271 Extract Zip Spec      14 (20) '2.0'\n-5F0272 Extract OS            00 (0) 'MS-DOS'\n-5F0273 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0275 Compression Method    0000 (0) 'Stored'\n-5F0277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F027B CRC                   9640338D (2520789901)\n-5F027F Compressed Size       000013DD (5085)\n-5F0283 Uncompressed Size     000013DD (5085)\n-5F0287 Filename Length       008F (143)\n-5F0289 Extra Length          0009 (9)\n-5F028B Comment Length        0000 (0)\n-5F028D Disk Start            0000 (0)\n-5F028F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0291 Ext File Attributes   00000000 (0)\n-5F0295 Local Header Offset   00034ADC (215772)\n-5F0299 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0299: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F01E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F0328 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F032A   Length              0005 (5)\n-5F032C   Flags               01 (1) 'Modification'\n-5F032D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0331 CENTRAL HEADER #116   02014B50 (33639248)\n-5F0335 Created Zip Spec      14 (20) '2.0'\n-5F0336 Created OS            00 (0) 'MS-DOS'\n-5F0337 Extract Zip Spec      14 (20) '2.0'\n-5F0338 Extract OS            00 (0) 'MS-DOS'\n-5F0339 General Purpose Flag  0000 (0)\n-5F033B Compression Method    0000 (0) 'Stored'\n-5F033D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0341 CRC                   00000000 (0)\n-5F0345 Compressed Size       00000000 (0)\n-5F0349 Uncompressed Size     00000000 (0)\n-5F034D Filename Length       007B (123)\n-5F034F Extra Length          0009 (9)\n-5F0351 Comment Length        0000 (0)\n-5F0353 Disk Start            0000 (0)\n-5F0355 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0357 Ext File Attributes   00000000 (0)\n-5F035B Local Header Offset   00035F7F (221055)\n-5F035F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F035F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F03DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F03DC   Length              0005 (5)\n-5F03DE   Flags               01 (1) 'Modification'\n-5F03DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F03E3 CENTRAL HEADER #117   02014B50 (33639248)\n-5F03E7 Created Zip Spec      14 (20) '2.0'\n-5F03E8 Created OS            00 (0) 'MS-DOS'\n-5F03E9 Extract Zip Spec      14 (20) '2.0'\n-5F03EA Extract OS            00 (0) 'MS-DOS'\n-5F03EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F03ED Compression Method    0000 (0) 'Stored'\n-5F03EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F03F3 CRC                   5232B519 (1379054873)\n-5F03F7 Compressed Size       00001C1F (7199)\n-5F03FB Uncompressed Size     00001C1F (7199)\n-5F03FF Filename Length       0091 (145)\n-5F0401 Extra Length          0009 (9)\n-5F0403 Comment Length        0000 (0)\n-5F0405 Disk Start            0000 (0)\n-5F0407 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0409 Ext File Attributes   00000000 (0)\n-5F040D Local Header Offset   00036021 (221217)\n-5F0411 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXX'\n+5F021F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0221   Length              0005 (5)\n+5F0223   Flags               01 (1) 'Modification'\n+5F0224   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0228 CENTRAL HEADER #30    02014B50 (33639248)\n+5F022C Created Zip Spec      14 (20) '2.0'\n+5F022D Created OS            00 (0) 'MS-DOS'\n+5F022E Extract Zip Spec      14 (20) '2.0'\n+5F022F Extract OS            00 (0) 'MS-DOS'\n+5F0230 General Purpose Flag  0000 (0)\n+5F0232 Compression Method    0000 (0) 'Stored'\n+5F0234 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0238 CRC                   00000000 (0)\n+5F023C Compressed Size       00000000 (0)\n+5F0240 Uncompressed Size     00000000 (0)\n+5F0244 Filename Length       0066 (102)\n+5F0246 Extra Length          0009 (9)\n+5F0248 Comment Length        0000 (0)\n+5F024A Disk Start            0000 (0)\n+5F024C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F024E Ext File Attributes   00000000 (0)\n+5F0252 Local Header Offset   0001D485 (119941)\n+5F0256 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0256: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F02BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F02BE   Length              0005 (5)\n+5F02C0   Flags               01 (1) 'Modification'\n+5F02C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F02C5 CENTRAL HEADER #31    02014B50 (33639248)\n+5F02C9 Created Zip Spec      14 (20) '2.0'\n+5F02CA Created OS            00 (0) 'MS-DOS'\n+5F02CB Extract Zip Spec      14 (20) '2.0'\n+5F02CC Extract OS            00 (0) 'MS-DOS'\n+5F02CD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F02CF Compression Method    0000 (0) 'Stored'\n+5F02D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F02D5 CRC                   7416DF2A (1947655978)\n+5F02D9 Compressed Size       00001512 (5394)\n+5F02DD Uncompressed Size     00001512 (5394)\n+5F02E1 Filename Length       007C (124)\n+5F02E3 Extra Length          0009 (9)\n+5F02E5 Comment Length        0000 (0)\n+5F02E7 Disk Start            0000 (0)\n+5F02E9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F02EB Ext File Attributes   00000000 (0)\n+5F02EF Local Header Offset   0001D512 (120082)\n+5F02F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F02F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F036F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0371   Length              0005 (5)\n+5F0373   Flags               01 (1) 'Modification'\n+5F0374   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0378 CENTRAL HEADER #32    02014B50 (33639248)\n+5F037C Created Zip Spec      14 (20) '2.0'\n+5F037D Created OS            00 (0) 'MS-DOS'\n+5F037E Extract Zip Spec      14 (20) '2.0'\n+5F037F Extract OS            00 (0) 'MS-DOS'\n+5F0380 General Purpose Flag  0000 (0)\n+5F0382 Compression Method    0000 (0) 'Stored'\n+5F0384 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0388 CRC                   00000000 (0)\n+5F038C Compressed Size       00000000 (0)\n+5F0390 Uncompressed Size     00000000 (0)\n+5F0394 Filename Length       0022 (34)\n+5F0396 Extra Length          0009 (9)\n+5F0398 Comment Length        0000 (0)\n+5F039A Disk Start            0000 (0)\n+5F039C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F039E Ext File Attributes   00000000 (0)\n+5F03A2 Local Header Offset   0001EAD7 (125655)\n+5F03A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F03A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F03C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F03CA   Length              0005 (5)\n+5F03CC   Flags               01 (1) 'Modification'\n+5F03CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F03D1 CENTRAL HEADER #33    02014B50 (33639248)\n+5F03D5 Created Zip Spec      14 (20) '2.0'\n+5F03D6 Created OS            00 (0) 'MS-DOS'\n+5F03D7 Extract Zip Spec      14 (20) '2.0'\n+5F03D8 Extract OS            00 (0) 'MS-DOS'\n+5F03D9 General Purpose Flag  0000 (0)\n+5F03DB Compression Method    0000 (0) 'Stored'\n+5F03DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F03E1 CRC                   00000000 (0)\n+5F03E5 Compressed Size       00000000 (0)\n+5F03E9 Uncompressed Size     00000000 (0)\n+5F03ED Filename Length       0029 (41)\n+5F03EF Extra Length          0009 (9)\n+5F03F1 Comment Length        0000 (0)\n+5F03F3 Disk Start            0000 (0)\n+5F03F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F03F7 Ext File Attributes   00000000 (0)\n+5F03FB Local Header Offset   0001EB20 (125728)\n+5F03FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F03FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F042A   Length              0005 (5)\n+5F042C   Flags               01 (1) 'Modification'\n+5F042D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0431 CENTRAL HEADER #34    02014B50 (33639248)\n+5F0435 Created Zip Spec      14 (20) '2.0'\n+5F0436 Created OS            00 (0) 'MS-DOS'\n+5F0437 Extract Zip Spec      14 (20) '2.0'\n+5F0438 Extract OS            00 (0) 'MS-DOS'\n+5F0439 General Purpose Flag  0000 (0)\n+5F043B Compression Method    0000 (0) 'Stored'\n+5F043D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0441 CRC                   00000000 (0)\n+5F0445 Compressed Size       00000000 (0)\n+5F0449 Uncompressed Size     00000000 (0)\n+5F044D Filename Length       0063 (99)\n+5F044F Extra Length          0009 (9)\n+5F0451 Comment Length        0000 (0)\n+5F0453 Disk Start            0000 (0)\n+5F0455 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0457 Ext File Attributes   00000000 (0)\n+5F045B Local Header Offset   0001EB70 (125808)\n+5F045F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F045F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F04C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F04C4   Length              0005 (5)\n+5F04C6   Flags               01 (1) 'Modification'\n+5F04C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F04CB CENTRAL HEADER #35    02014B50 (33639248)\n+5F04CF Created Zip Spec      14 (20) '2.0'\n+5F04D0 Created OS            00 (0) 'MS-DOS'\n+5F04D1 Extract Zip Spec      14 (20) '2.0'\n+5F04D2 Extract OS            00 (0) 'MS-DOS'\n+5F04D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F04D5 Compression Method    0000 (0) 'Stored'\n+5F04D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F04DB CRC                   826E1CC4 (2188254404)\n+5F04DF Compressed Size       00002F90 (12176)\n+5F04E3 Uncompressed Size     00002F90 (12176)\n+5F04E7 Filename Length       0079 (121)\n+5F04E9 Extra Length          0009 (9)\n+5F04EB Comment Length        0000 (0)\n+5F04ED Disk Start            0000 (0)\n+5F04EF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F04F1 Ext File Attributes   00000000 (0)\n+5F04F5 Local Header Offset   0001EBFA (125946)\n+5F04F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F04F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0572 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0574   Length              0005 (5)\n+5F0576   Flags               01 (1) 'Modification'\n+5F0577   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F057B CENTRAL HEADER #36    02014B50 (33639248)\n+5F057F Created Zip Spec      14 (20) '2.0'\n+5F0580 Created OS            00 (0) 'MS-DOS'\n+5F0581 Extract Zip Spec      14 (20) '2.0'\n+5F0582 Extract OS            00 (0) 'MS-DOS'\n+5F0583 General Purpose Flag  0000 (0)\n+5F0585 Compression Method    0000 (0) 'Stored'\n+5F0587 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F058B CRC                   00000000 (0)\n+5F058F Compressed Size       00000000 (0)\n+5F0593 Uncompressed Size     00000000 (0)\n+5F0597 Filename Length       006C (108)\n+5F0599 Extra Length          0009 (9)\n+5F059B Comment Length        0000 (0)\n+5F059D Disk Start            0000 (0)\n+5F059F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F05A1 Ext File Attributes   00000000 (0)\n+5F05A5 Local Header Offset   00021C3A (138298)\n+5F05A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F05A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0615 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0617   Length              0005 (5)\n+5F0619   Flags               01 (1) 'Modification'\n+5F061A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F061E CENTRAL HEADER #37    02014B50 (33639248)\n+5F0622 Created Zip Spec      14 (20) '2.0'\n+5F0623 Created OS            00 (0) 'MS-DOS'\n+5F0624 Extract Zip Spec      14 (20) '2.0'\n+5F0625 Extract OS            00 (0) 'MS-DOS'\n+5F0626 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0628 Compression Method    0000 (0) 'Stored'\n+5F062A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F062E CRC                   1BE163AC (467755948)\n+5F0632 Compressed Size       00000967 (2407)\n+5F0636 Uncompressed Size     00000967 (2407)\n+5F063A Filename Length       0082 (130)\n+5F063C Extra Length          0009 (9)\n+5F063E Comment Length        0000 (0)\n+5F0640 Disk Start            0000 (0)\n+5F0642 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0644 Ext File Attributes   00000000 (0)\n+5F0648 Local Header Offset   00021CCD (138445)\n+5F064C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F064C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F06CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F06D0   Length              0005 (5)\n+5F06D2   Flags               01 (1) 'Modification'\n+5F06D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F06D7 CENTRAL HEADER #38    02014B50 (33639248)\n+5F06DB Created Zip Spec      14 (20) '2.0'\n+5F06DC Created OS            00 (0) 'MS-DOS'\n+5F06DD Extract Zip Spec      14 (20) '2.0'\n+5F06DE Extract OS            00 (0) 'MS-DOS'\n+5F06DF General Purpose Flag  0000 (0)\n+5F06E1 Compression Method    0000 (0) 'Stored'\n+5F06E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F06E7 CRC                   00000000 (0)\n+5F06EB Compressed Size       00000000 (0)\n+5F06EF Uncompressed Size     00000000 (0)\n+5F06F3 Filename Length       0066 (102)\n+5F06F5 Extra Length          0009 (9)\n+5F06F7 Comment Length        0000 (0)\n+5F06F9 Disk Start            0000 (0)\n+5F06FB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F06FD Ext File Attributes   00000000 (0)\n+5F0701 Local Header Offset   000226ED (141037)\n+5F0705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F076B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F076D   Length              0005 (5)\n+5F076F   Flags               01 (1) 'Modification'\n+5F0770   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0774 CENTRAL HEADER #39    02014B50 (33639248)\n+5F0778 Created Zip Spec      14 (20) '2.0'\n+5F0779 Created OS            00 (0) 'MS-DOS'\n+5F077A Extract Zip Spec      14 (20) '2.0'\n+5F077B Extract OS            00 (0) 'MS-DOS'\n+5F077C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F077E Compression Method    0000 (0) 'Stored'\n+5F0780 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0784 CRC                   11DB1110 (299569424)\n+5F0788 Compressed Size       0000080F (2063)\n+5F078C Uncompressed Size     0000080F (2063)\n+5F0790 Filename Length       007C (124)\n+5F0792 Extra Length          0009 (9)\n+5F0794 Comment Length        0000 (0)\n+5F0796 Disk Start            0000 (0)\n+5F0798 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F079A Ext File Attributes   00000000 (0)\n+5F079E Local Header Offset   0002277A (141178)\n+5F07A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F07A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F081E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0820   Length              0005 (5)\n+5F0822   Flags               01 (1) 'Modification'\n+5F0823   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0827 CENTRAL HEADER #40    02014B50 (33639248)\n+5F082B Created Zip Spec      14 (20) '2.0'\n+5F082C Created OS            00 (0) 'MS-DOS'\n+5F082D Extract Zip Spec      14 (20) '2.0'\n+5F082E Extract OS            00 (0) 'MS-DOS'\n+5F082F General Purpose Flag  0000 (0)\n+5F0831 Compression Method    0000 (0) 'Stored'\n+5F0833 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0837 CRC                   00000000 (0)\n+5F083B Compressed Size       00000000 (0)\n+5F083F Uncompressed Size     00000000 (0)\n+5F0843 Filename Length       0062 (98)\n+5F0845 Extra Length          0009 (9)\n+5F0847 Comment Length        0000 (0)\n+5F0849 Disk Start            0000 (0)\n+5F084B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F084D Ext File Attributes   00000000 (0)\n+5F0851 Local Header Offset   0002303C (143420)\n+5F0855 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0855: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F08B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F08B9   Length              0005 (5)\n+5F08BB   Flags               01 (1) 'Modification'\n+5F08BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F08C0 CENTRAL HEADER #41    02014B50 (33639248)\n+5F08C4 Created Zip Spec      14 (20) '2.0'\n+5F08C5 Created OS            00 (0) 'MS-DOS'\n+5F08C6 Extract Zip Spec      14 (20) '2.0'\n+5F08C7 Extract OS            00 (0) 'MS-DOS'\n+5F08C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F08CA Compression Method    0000 (0) 'Stored'\n+5F08CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F08D0 CRC                   30A69673 (816223859)\n+5F08D4 Compressed Size       00000C1C (3100)\n+5F08D8 Uncompressed Size     00000C1C (3100)\n+5F08DC Filename Length       0078 (120)\n+5F08DE Extra Length          0009 (9)\n+5F08E0 Comment Length        0000 (0)\n+5F08E2 Disk Start            0000 (0)\n+5F08E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F08E6 Ext File Attributes   00000000 (0)\n+5F08EA Local Header Offset   000230C5 (143557)\n+5F08EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F08EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0966 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0968   Length              0005 (5)\n+5F096A   Flags               01 (1) 'Modification'\n+5F096B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F096F CENTRAL HEADER #42    02014B50 (33639248)\n+5F0973 Created Zip Spec      14 (20) '2.0'\n+5F0974 Created OS            00 (0) 'MS-DOS'\n+5F0975 Extract Zip Spec      14 (20) '2.0'\n+5F0976 Extract OS            00 (0) 'MS-DOS'\n+5F0977 General Purpose Flag  0000 (0)\n+5F0979 Compression Method    0000 (0) 'Stored'\n+5F097B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F097F CRC                   00000000 (0)\n+5F0983 Compressed Size       00000000 (0)\n+5F0987 Uncompressed Size     00000000 (0)\n+5F098B Filename Length       006C (108)\n+5F098D Extra Length          0009 (9)\n+5F098F Comment Length        0000 (0)\n+5F0991 Disk Start            0000 (0)\n+5F0993 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0995 Ext File Attributes   00000000 (0)\n+5F0999 Local Header Offset   00023D90 (146832)\n+5F099D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F099D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0A09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0A0B   Length              0005 (5)\n+5F0A0D   Flags               01 (1) 'Modification'\n+5F0A0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0A12 CENTRAL HEADER #43    02014B50 (33639248)\n+5F0A16 Created Zip Spec      14 (20) '2.0'\n+5F0A17 Created OS            00 (0) 'MS-DOS'\n+5F0A18 Extract Zip Spec      14 (20) '2.0'\n+5F0A19 Extract OS            00 (0) 'MS-DOS'\n+5F0A1A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0A1C Compression Method    0000 (0) 'Stored'\n+5F0A1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0A22 CRC                   0C316B32 (204565298)\n+5F0A26 Compressed Size       000006D7 (1751)\n+5F0A2A Uncompressed Size     000006D7 (1751)\n+5F0A2E Filename Length       0082 (130)\n+5F0A30 Extra Length          0009 (9)\n+5F0A32 Comment Length        0000 (0)\n+5F0A34 Disk Start            0000 (0)\n+5F0A36 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0A38 Ext File Attributes   00000000 (0)\n+5F0A3C Local Header Offset   00023E23 (146979)\n+5F0A40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0A40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0AC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0AC4   Length              0005 (5)\n+5F0AC6   Flags               01 (1) 'Modification'\n+5F0AC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0ACB CENTRAL HEADER #44    02014B50 (33639248)\n+5F0ACF Created Zip Spec      14 (20) '2.0'\n+5F0AD0 Created OS            00 (0) 'MS-DOS'\n+5F0AD1 Extract Zip Spec      14 (20) '2.0'\n+5F0AD2 Extract OS            00 (0) 'MS-DOS'\n+5F0AD3 General Purpose Flag  0000 (0)\n+5F0AD5 Compression Method    0000 (0) 'Stored'\n+5F0AD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0ADB CRC                   00000000 (0)\n+5F0ADF Compressed Size       00000000 (0)\n+5F0AE3 Uncompressed Size     00000000 (0)\n+5F0AE7 Filename Length       0068 (104)\n+5F0AE9 Extra Length          0009 (9)\n+5F0AEB Comment Length        0000 (0)\n+5F0AED Disk Start            0000 (0)\n+5F0AEF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0AF1 Ext File Attributes   00000000 (0)\n+5F0AF5 Local Header Offset   000245B3 (148915)\n+5F0AF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0AF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0B61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0B63   Length              0005 (5)\n+5F0B65   Flags               01 (1) 'Modification'\n+5F0B66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0B6A CENTRAL HEADER #45    02014B50 (33639248)\n+5F0B6E Created Zip Spec      14 (20) '2.0'\n+5F0B6F Created OS            00 (0) 'MS-DOS'\n+5F0B70 Extract Zip Spec      14 (20) '2.0'\n+5F0B71 Extract OS            00 (0) 'MS-DOS'\n+5F0B72 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0B74 Compression Method    0000 (0) 'Stored'\n+5F0B76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0B7A CRC                   37BEEC96 (935259286)\n+5F0B7E Compressed Size       0000133B (4923)\n+5F0B82 Uncompressed Size     0000133B (4923)\n+5F0B86 Filename Length       007E (126)\n+5F0B88 Extra Length          0009 (9)\n+5F0B8A Comment Length        0000 (0)\n+5F0B8C Disk Start            0000 (0)\n+5F0B8E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0B90 Ext File Attributes   00000000 (0)\n+5F0B94 Local Header Offset   00024642 (149058)\n+5F0B98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0B98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0C16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0C18   Length              0005 (5)\n+5F0C1A   Flags               01 (1) 'Modification'\n+5F0C1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0C1F CENTRAL HEADER #46    02014B50 (33639248)\n+5F0C23 Created Zip Spec      14 (20) '2.0'\n+5F0C24 Created OS            00 (0) 'MS-DOS'\n+5F0C25 Extract Zip Spec      14 (20) '2.0'\n+5F0C26 Extract OS            00 (0) 'MS-DOS'\n+5F0C27 General Purpose Flag  0000 (0)\n+5F0C29 Compression Method    0000 (0) 'Stored'\n+5F0C2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0C2F CRC                   00000000 (0)\n+5F0C33 Compressed Size       00000000 (0)\n+5F0C37 Uncompressed Size     00000000 (0)\n+5F0C3B Filename Length       0070 (112)\n+5F0C3D Extra Length          0009 (9)\n+5F0C3F Comment Length        0000 (0)\n+5F0C41 Disk Start            0000 (0)\n+5F0C43 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0C45 Ext File Attributes   00000000 (0)\n+5F0C49 Local Header Offset   00025A32 (154162)\n+5F0C4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0C4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0CBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0CBF   Length              0005 (5)\n+5F0CC1   Flags               01 (1) 'Modification'\n+5F0CC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0CC6 CENTRAL HEADER #47    02014B50 (33639248)\n+5F0CCA Created Zip Spec      14 (20) '2.0'\n+5F0CCB Created OS            00 (0) 'MS-DOS'\n+5F0CCC Extract Zip Spec      14 (20) '2.0'\n+5F0CCD Extract OS            00 (0) 'MS-DOS'\n+5F0CCE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0CD0 Compression Method    0000 (0) 'Stored'\n+5F0CD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0CD6 CRC                   D0AE7BE4 (3501095908)\n+5F0CDA Compressed Size       0000074C (1868)\n+5F0CDE Uncompressed Size     0000074C (1868)\n+5F0CE2 Filename Length       0086 (134)\n+5F0CE4 Extra Length          0009 (9)\n+5F0CE6 Comment Length        0000 (0)\n+5F0CE8 Disk Start            0000 (0)\n+5F0CEA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0CEC Ext File Attributes   00000000 (0)\n+5F0CF0 Local Header Offset   00025AC9 (154313)\n+5F0CF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XX'\n #\n-# WARNING: Offset 0x5F0411: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F0CF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F04A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F04A4   Length              0005 (5)\n-5F04A6   Flags               01 (1) 'Modification'\n-5F04A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F04AB CENTRAL HEADER #118   02014B50 (33639248)\n-5F04AF Created Zip Spec      14 (20) '2.0'\n-5F04B0 Created OS            00 (0) 'MS-DOS'\n-5F04B1 Extract Zip Spec      14 (20) '2.0'\n-5F04B2 Extract OS            00 (0) 'MS-DOS'\n-5F04B3 General Purpose Flag  0000 (0)\n-5F04B5 Compression Method    0000 (0) 'Stored'\n-5F04B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F04BB CRC                   00000000 (0)\n-5F04BF Compressed Size       00000000 (0)\n-5F04C3 Uncompressed Size     00000000 (0)\n-5F04C7 Filename Length       0078 (120)\n-5F04C9 Extra Length          0009 (9)\n-5F04CB Comment Length        0000 (0)\n-5F04CD Disk Start            0000 (0)\n-5F04CF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F04D1 Ext File Attributes   00000000 (0)\n-5F04D5 Local Header Offset   00037D08 (228616)\n-5F04D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F04D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0551 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0553   Length              0005 (5)\n-5F0555   Flags               01 (1) 'Modification'\n-5F0556   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F055A CENTRAL HEADER #119   02014B50 (33639248)\n-5F055E Created Zip Spec      14 (20) '2.0'\n-5F055F Created OS            00 (0) 'MS-DOS'\n-5F0560 Extract Zip Spec      14 (20) '2.0'\n-5F0561 Extract OS            00 (0) 'MS-DOS'\n-5F0562 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0564 Compression Method    0000 (0) 'Stored'\n-5F0566 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F056A CRC                   1D7E8FA2 (494833570)\n-5F056E Compressed Size       000011BD (4541)\n-5F0572 Uncompressed Size     000011BD (4541)\n-5F0576 Filename Length       008E (142)\n-5F0578 Extra Length          0009 (9)\n-5F057A Comment Length        0000 (0)\n-5F057C Disk Start            0000 (0)\n-5F057E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0580 Ext File Attributes   00000000 (0)\n-5F0584 Local Header Offset   00037DA7 (228775)\n-5F0588 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXX'\n+5F0D7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0D7C   Length              0005 (5)\n+5F0D7E   Flags               01 (1) 'Modification'\n+5F0D7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0D83 CENTRAL HEADER #48    02014B50 (33639248)\n+5F0D87 Created Zip Spec      14 (20) '2.0'\n+5F0D88 Created OS            00 (0) 'MS-DOS'\n+5F0D89 Extract Zip Spec      14 (20) '2.0'\n+5F0D8A Extract OS            00 (0) 'MS-DOS'\n+5F0D8B General Purpose Flag  0000 (0)\n+5F0D8D Compression Method    0000 (0) 'Stored'\n+5F0D8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0D93 CRC                   00000000 (0)\n+5F0D97 Compressed Size       00000000 (0)\n+5F0D9B Uncompressed Size     00000000 (0)\n+5F0D9F Filename Length       006C (108)\n+5F0DA1 Extra Length          0009 (9)\n+5F0DA3 Comment Length        0000 (0)\n+5F0DA5 Disk Start            0000 (0)\n+5F0DA7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0DA9 Ext File Attributes   00000000 (0)\n+5F0DAD Local Header Offset   000262D2 (156370)\n+5F0DB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0DB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0E1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0E1F   Length              0005 (5)\n+5F0E21   Flags               01 (1) 'Modification'\n+5F0E22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0E26 CENTRAL HEADER #49    02014B50 (33639248)\n+5F0E2A Created Zip Spec      14 (20) '2.0'\n+5F0E2B Created OS            00 (0) 'MS-DOS'\n+5F0E2C Extract Zip Spec      14 (20) '2.0'\n+5F0E2D Extract OS            00 (0) 'MS-DOS'\n+5F0E2E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0E30 Compression Method    0000 (0) 'Stored'\n+5F0E32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0E36 CRC                   4C134CE6 (1276333286)\n+5F0E3A Compressed Size       0000103C (4156)\n+5F0E3E Uncompressed Size     0000103C (4156)\n+5F0E42 Filename Length       0082 (130)\n+5F0E44 Extra Length          0009 (9)\n+5F0E46 Comment Length        0000 (0)\n+5F0E48 Disk Start            0000 (0)\n+5F0E4A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0E4C Ext File Attributes   00000000 (0)\n+5F0E50 Local Header Offset   00026365 (156517)\n+5F0E54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0E54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0ED6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0ED8   Length              0005 (5)\n+5F0EDA   Flags               01 (1) 'Modification'\n+5F0EDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0EDF CENTRAL HEADER #50    02014B50 (33639248)\n+5F0EE3 Created Zip Spec      14 (20) '2.0'\n+5F0EE4 Created OS            00 (0) 'MS-DOS'\n+5F0EE5 Extract Zip Spec      14 (20) '2.0'\n+5F0EE6 Extract OS            00 (0) 'MS-DOS'\n+5F0EE7 General Purpose Flag  0000 (0)\n+5F0EE9 Compression Method    0000 (0) 'Stored'\n+5F0EEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0EEF CRC                   00000000 (0)\n+5F0EF3 Compressed Size       00000000 (0)\n+5F0EF7 Uncompressed Size     00000000 (0)\n+5F0EFB Filename Length       006E (110)\n+5F0EFD Extra Length          0009 (9)\n+5F0EFF Comment Length        0000 (0)\n+5F0F01 Disk Start            0000 (0)\n+5F0F03 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0F05 Ext File Attributes   00000000 (0)\n+5F0F09 Local Header Offset   0002745A (160858)\n+5F0F0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F0F0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F0F7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F0F7D   Length              0005 (5)\n+5F0F7F   Flags               01 (1) 'Modification'\n+5F0F80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F0F84 CENTRAL HEADER #51    02014B50 (33639248)\n+5F0F88 Created Zip Spec      14 (20) '2.0'\n+5F0F89 Created OS            00 (0) 'MS-DOS'\n+5F0F8A Extract Zip Spec      14 (20) '2.0'\n+5F0F8B Extract OS            00 (0) 'MS-DOS'\n+5F0F8C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F0F8E Compression Method    0000 (0) 'Stored'\n+5F0F90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F0F94 CRC                   63086228 (1661493800)\n+5F0F98 Compressed Size       00000838 (2104)\n+5F0F9C Uncompressed Size     00000838 (2104)\n+5F0FA0 Filename Length       0084 (132)\n+5F0FA2 Extra Length          0009 (9)\n+5F0FA4 Comment Length        0000 (0)\n+5F0FA6 Disk Start            0000 (0)\n+5F0FA8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F0FAA Ext File Attributes   00000000 (0)\n+5F0FAE Local Header Offset   000274EF (161007)\n+5F0FB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x5F0588: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F0FB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F0616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0618   Length              0005 (5)\n-5F061A   Flags               01 (1) 'Modification'\n-5F061B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F061F CENTRAL HEADER #120   02014B50 (33639248)\n-5F0623 Created Zip Spec      14 (20) '2.0'\n-5F0624 Created OS            00 (0) 'MS-DOS'\n-5F0625 Extract Zip Spec      14 (20) '2.0'\n-5F0626 Extract OS            00 (0) 'MS-DOS'\n-5F0627 General Purpose Flag  0000 (0)\n-5F0629 Compression Method    0000 (0) 'Stored'\n-5F062B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F062F CRC                   00000000 (0)\n-5F0633 Compressed Size       00000000 (0)\n-5F0637 Uncompressed Size     00000000 (0)\n-5F063B Filename Length       007F (127)\n-5F063D Extra Length          0009 (9)\n-5F063F Comment Length        0000 (0)\n-5F0641 Disk Start            0000 (0)\n-5F0643 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0645 Ext File Attributes   00000000 (0)\n-5F0649 Local Header Offset   00039029 (233513)\n-5F064D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F064D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F06CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F06CE   Length              0005 (5)\n-5F06D0   Flags               01 (1) 'Modification'\n-5F06D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F06D5 CENTRAL HEADER #121   02014B50 (33639248)\n-5F06D9 Created Zip Spec      14 (20) '2.0'\n-5F06DA Created OS            00 (0) 'MS-DOS'\n-5F06DB Extract Zip Spec      14 (20) '2.0'\n-5F06DC Extract OS            00 (0) 'MS-DOS'\n-5F06DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F06DF Compression Method    0000 (0) 'Stored'\n-5F06E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F06E5 CRC                   333FC2BB (859816635)\n-5F06E9 Compressed Size       00000736 (1846)\n-5F06ED Uncompressed Size     00000736 (1846)\n-5F06F1 Filename Length       0095 (149)\n-5F06F3 Extra Length          0009 (9)\n-5F06F5 Comment Length        0000 (0)\n-5F06F7 Disk Start            0000 (0)\n-5F06F9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F06FB Ext File Attributes   00000000 (0)\n-5F06FF Local Header Offset   000390CF (233679)\n-5F0703 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXX'\n+5F1036 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1038   Length              0005 (5)\n+5F103A   Flags               01 (1) 'Modification'\n+5F103B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F103F CENTRAL HEADER #52    02014B50 (33639248)\n+5F1043 Created Zip Spec      14 (20) '2.0'\n+5F1044 Created OS            00 (0) 'MS-DOS'\n+5F1045 Extract Zip Spec      14 (20) '2.0'\n+5F1046 Extract OS            00 (0) 'MS-DOS'\n+5F1047 General Purpose Flag  0000 (0)\n+5F1049 Compression Method    0000 (0) 'Stored'\n+5F104B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F104F CRC                   00000000 (0)\n+5F1053 Compressed Size       00000000 (0)\n+5F1057 Uncompressed Size     00000000 (0)\n+5F105B Filename Length       006A (106)\n+5F105D Extra Length          0009 (9)\n+5F105F Comment Length        0000 (0)\n+5F1061 Disk Start            0000 (0)\n+5F1063 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1065 Ext File Attributes   00000000 (0)\n+5F1069 Local Header Offset   00027DE2 (163298)\n+5F106D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F106D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F10D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F10D9   Length              0005 (5)\n+5F10DB   Flags               01 (1) 'Modification'\n+5F10DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F10E0 CENTRAL HEADER #53    02014B50 (33639248)\n+5F10E4 Created Zip Spec      14 (20) '2.0'\n+5F10E5 Created OS            00 (0) 'MS-DOS'\n+5F10E6 Extract Zip Spec      14 (20) '2.0'\n+5F10E7 Extract OS            00 (0) 'MS-DOS'\n+5F10E8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F10EA Compression Method    0000 (0) 'Stored'\n+5F10EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F10F0 CRC                   9EF621C1 (2666930625)\n+5F10F4 Compressed Size       00000C90 (3216)\n+5F10F8 Uncompressed Size     00000C90 (3216)\n+5F10FC Filename Length       0080 (128)\n+5F10FE Extra Length          0009 (9)\n+5F1100 Comment Length        0000 (0)\n+5F1102 Disk Start            0000 (0)\n+5F1104 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1106 Ext File Attributes   00000000 (0)\n+5F110A Local Header Offset   00027E73 (163443)\n+5F110E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F110E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F118E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1190   Length              0005 (5)\n+5F1192   Flags               01 (1) 'Modification'\n+5F1193   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1197 CENTRAL HEADER #54    02014B50 (33639248)\n+5F119B Created Zip Spec      14 (20) '2.0'\n+5F119C Created OS            00 (0) 'MS-DOS'\n+5F119D Extract Zip Spec      14 (20) '2.0'\n+5F119E Extract OS            00 (0) 'MS-DOS'\n+5F119F General Purpose Flag  0000 (0)\n+5F11A1 Compression Method    0000 (0) 'Stored'\n+5F11A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F11A7 CRC                   00000000 (0)\n+5F11AB Compressed Size       00000000 (0)\n+5F11AF Uncompressed Size     00000000 (0)\n+5F11B3 Filename Length       0052 (82)\n+5F11B5 Extra Length          0009 (9)\n+5F11B7 Comment Length        0000 (0)\n+5F11B9 Disk Start            0000 (0)\n+5F11BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F11BD Ext File Attributes   00000000 (0)\n+5F11C1 Local Header Offset   00028BBA (166842)\n+5F11C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F11C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1217 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1219   Length              0005 (5)\n+5F121B   Flags               01 (1) 'Modification'\n+5F121C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1220 CENTRAL HEADER #55    02014B50 (33639248)\n+5F1224 Created Zip Spec      14 (20) '2.0'\n+5F1225 Created OS            00 (0) 'MS-DOS'\n+5F1226 Extract Zip Spec      14 (20) '2.0'\n+5F1227 Extract OS            00 (0) 'MS-DOS'\n+5F1228 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F122A Compression Method    0000 (0) 'Stored'\n+5F122C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1230 CRC                   6BE0FFE8 (1809907688)\n+5F1234 Compressed Size       00000EF6 (3830)\n+5F1238 Uncompressed Size     00000EF6 (3830)\n+5F123C Filename Length       0068 (104)\n+5F123E Extra Length          0009 (9)\n+5F1240 Comment Length        0000 (0)\n+5F1242 Disk Start            0000 (0)\n+5F1244 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1246 Ext File Attributes   00000000 (0)\n+5F124A Local Header Offset   00028C33 (166963)\n+5F124E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F124E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F12B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F12B8   Length              0005 (5)\n+5F12BA   Flags               01 (1) 'Modification'\n+5F12BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F12BF CENTRAL HEADER #56    02014B50 (33639248)\n+5F12C3 Created Zip Spec      14 (20) '2.0'\n+5F12C4 Created OS            00 (0) 'MS-DOS'\n+5F12C5 Extract Zip Spec      14 (20) '2.0'\n+5F12C6 Extract OS            00 (0) 'MS-DOS'\n+5F12C7 General Purpose Flag  0000 (0)\n+5F12C9 Compression Method    0000 (0) 'Stored'\n+5F12CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F12CF CRC                   00000000 (0)\n+5F12D3 Compressed Size       00000000 (0)\n+5F12D7 Uncompressed Size     00000000 (0)\n+5F12DB Filename Length       0057 (87)\n+5F12DD Extra Length          0009 (9)\n+5F12DF Comment Length        0000 (0)\n+5F12E1 Disk Start            0000 (0)\n+5F12E3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F12E5 Ext File Attributes   00000000 (0)\n+5F12E9 Local Header Offset   00029BC8 (170952)\n+5F12ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F12ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1346   Length              0005 (5)\n+5F1348   Flags               01 (1) 'Modification'\n+5F1349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F134D CENTRAL HEADER #57    02014B50 (33639248)\n+5F1351 Created Zip Spec      14 (20) '2.0'\n+5F1352 Created OS            00 (0) 'MS-DOS'\n+5F1353 Extract Zip Spec      14 (20) '2.0'\n+5F1354 Extract OS            00 (0) 'MS-DOS'\n+5F1355 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1357 Compression Method    0000 (0) 'Stored'\n+5F1359 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F135D CRC                   988DC4AD (2559427757)\n+5F1361 Compressed Size       0000071B (1819)\n+5F1365 Uncompressed Size     0000071B (1819)\n+5F1369 Filename Length       006D (109)\n+5F136B Extra Length          0009 (9)\n+5F136D Comment Length        0000 (0)\n+5F136F Disk Start            0000 (0)\n+5F1371 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1373 Ext File Attributes   00000000 (0)\n+5F1377 Local Header Offset   00029C46 (171078)\n+5F137B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F137B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F13E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F13EA   Length              0005 (5)\n+5F13EC   Flags               01 (1) 'Modification'\n+5F13ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F13F1 CENTRAL HEADER #58    02014B50 (33639248)\n+5F13F5 Created Zip Spec      14 (20) '2.0'\n+5F13F6 Created OS            00 (0) 'MS-DOS'\n+5F13F7 Extract Zip Spec      14 (20) '2.0'\n+5F13F8 Extract OS            00 (0) 'MS-DOS'\n+5F13F9 General Purpose Flag  0000 (0)\n+5F13FB Compression Method    0000 (0) 'Stored'\n+5F13FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1401 CRC                   00000000 (0)\n+5F1405 Compressed Size       00000000 (0)\n+5F1409 Uncompressed Size     00000000 (0)\n+5F140D Filename Length       0072 (114)\n+5F140F Extra Length          0009 (9)\n+5F1411 Comment Length        0000 (0)\n+5F1413 Disk Start            0000 (0)\n+5F1415 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1417 Ext File Attributes   00000000 (0)\n+5F141B Local Header Offset   0002A405 (173061)\n+5F141F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F141F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1491 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1493   Length              0005 (5)\n+5F1495   Flags               01 (1) 'Modification'\n+5F1496   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F149A CENTRAL HEADER #59    02014B50 (33639248)\n+5F149E Created Zip Spec      14 (20) '2.0'\n+5F149F Created OS            00 (0) 'MS-DOS'\n+5F14A0 Extract Zip Spec      14 (20) '2.0'\n+5F14A1 Extract OS            00 (0) 'MS-DOS'\n+5F14A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F14A4 Compression Method    0000 (0) 'Stored'\n+5F14A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F14AA CRC                   07A59EC9 (128294601)\n+5F14AE Compressed Size       00000C29 (3113)\n+5F14B2 Uncompressed Size     00000C29 (3113)\n+5F14B6 Filename Length       0088 (136)\n+5F14B8 Extra Length          0009 (9)\n+5F14BA Comment Length        0000 (0)\n+5F14BC Disk Start            0000 (0)\n+5F14BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F14C0 Ext File Attributes   00000000 (0)\n+5F14C4 Local Header Offset   0002A49E (173214)\n+5F14C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXX'\n #\n-# WARNING: Offset 0x5F0703: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F14C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F0798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F079A   Length              0005 (5)\n-5F079C   Flags               01 (1) 'Modification'\n-5F079D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F07A1 CENTRAL HEADER #122   02014B50 (33639248)\n-5F07A5 Created Zip Spec      14 (20) '2.0'\n-5F07A6 Created OS            00 (0) 'MS-DOS'\n-5F07A7 Extract Zip Spec      14 (20) '2.0'\n-5F07A8 Extract OS            00 (0) 'MS-DOS'\n-5F07A9 General Purpose Flag  0000 (0)\n-5F07AB Compression Method    0000 (0) 'Stored'\n-5F07AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F07B1 CRC                   00000000 (0)\n-5F07B5 Compressed Size       00000000 (0)\n-5F07B9 Uncompressed Size     00000000 (0)\n-5F07BD Filename Length       0024 (36)\n-5F07BF Extra Length          0009 (9)\n-5F07C1 Comment Length        0000 (0)\n-5F07C3 Disk Start            0000 (0)\n-5F07C5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F07C7 Ext File Attributes   00000000 (0)\n-5F07CB Local Header Offset   000398D1 (235729)\n-5F07CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F07CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F07F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F07F5   Length              0005 (5)\n-5F07F7   Flags               01 (1) 'Modification'\n-5F07F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F07FC CENTRAL HEADER #123   02014B50 (33639248)\n-5F0800 Created Zip Spec      14 (20) '2.0'\n-5F0801 Created OS            00 (0) 'MS-DOS'\n-5F0802 Extract Zip Spec      14 (20) '2.0'\n-5F0803 Extract OS            00 (0) 'MS-DOS'\n-5F0804 General Purpose Flag  0000 (0)\n-5F0806 Compression Method    0000 (0) 'Stored'\n-5F0808 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F080C CRC                   00000000 (0)\n-5F0810 Compressed Size       00000000 (0)\n-5F0814 Uncompressed Size     00000000 (0)\n-5F0818 Filename Length       002B (43)\n-5F081A Extra Length          0009 (9)\n-5F081C Comment Length        0000 (0)\n-5F081E Disk Start            0000 (0)\n-5F0820 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0822 Ext File Attributes   00000000 (0)\n-5F0826 Local Header Offset   0003991C (235804)\n-5F082A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F082A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0855 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0857   Length              0005 (5)\n-5F0859   Flags               01 (1) 'Modification'\n-5F085A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F085E CENTRAL HEADER #124   02014B50 (33639248)\n-5F0862 Created Zip Spec      14 (20) '2.0'\n-5F0863 Created OS            00 (0) 'MS-DOS'\n-5F0864 Extract Zip Spec      14 (20) '2.0'\n-5F0865 Extract OS            00 (0) 'MS-DOS'\n-5F0866 General Purpose Flag  0000 (0)\n-5F0868 Compression Method    0000 (0) 'Stored'\n-5F086A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F086E CRC                   00000000 (0)\n-5F0872 Compressed Size       00000000 (0)\n-5F0876 Uncompressed Size     00000000 (0)\n-5F087A Filename Length       0058 (88)\n-5F087C Extra Length          0009 (9)\n-5F087E Comment Length        0000 (0)\n-5F0880 Disk Start            0000 (0)\n-5F0882 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0884 Ext File Attributes   00000000 (0)\n-5F0888 Local Header Offset   0003996E (235886)\n-5F088C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F088C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F08E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F08E6   Length              0005 (5)\n-5F08E8   Flags               01 (1) 'Modification'\n-5F08E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F08ED CENTRAL HEADER #125   02014B50 (33639248)\n-5F08F1 Created Zip Spec      14 (20) '2.0'\n-5F08F2 Created OS            00 (0) 'MS-DOS'\n-5F08F3 Extract Zip Spec      14 (20) '2.0'\n-5F08F4 Extract OS            00 (0) 'MS-DOS'\n-5F08F5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F08F7 Compression Method    0000 (0) 'Stored'\n-5F08F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F08FD CRC                   10CC5E74 (281828980)\n-5F0901 Compressed Size       000009CD (2509)\n-5F0905 Uncompressed Size     000009CD (2509)\n-5F0909 Filename Length       006E (110)\n-5F090B Extra Length          0009 (9)\n-5F090D Comment Length        0000 (0)\n-5F090F Disk Start            0000 (0)\n-5F0911 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0913 Ext File Attributes   00000000 (0)\n-5F0917 Local Header Offset   000399ED (236013)\n-5F091B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F091B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0989 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F098B   Length              0005 (5)\n-5F098D   Flags               01 (1) 'Modification'\n-5F098E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0992 CENTRAL HEADER #126   02014B50 (33639248)\n-5F0996 Created Zip Spec      14 (20) '2.0'\n-5F0997 Created OS            00 (0) 'MS-DOS'\n-5F0998 Extract Zip Spec      14 (20) '2.0'\n-5F0999 Extract OS            00 (0) 'MS-DOS'\n-5F099A General Purpose Flag  0000 (0)\n-5F099C Compression Method    0000 (0) 'Stored'\n-5F099E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F09A2 CRC                   00000000 (0)\n-5F09A6 Compressed Size       00000000 (0)\n-5F09AA Uncompressed Size     00000000 (0)\n-5F09AE Filename Length       0058 (88)\n-5F09B0 Extra Length          0009 (9)\n-5F09B2 Comment Length        0000 (0)\n-5F09B4 Disk Start            0000 (0)\n-5F09B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F09B8 Ext File Attributes   00000000 (0)\n-5F09BC Local Header Offset   0003A45F (238687)\n-5F09C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F09C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0A18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0A1A   Length              0005 (5)\n-5F0A1C   Flags               01 (1) 'Modification'\n-5F0A1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0A21 CENTRAL HEADER #127   02014B50 (33639248)\n-5F0A25 Created Zip Spec      14 (20) '2.0'\n-5F0A26 Created OS            00 (0) 'MS-DOS'\n-5F0A27 Extract Zip Spec      14 (20) '2.0'\n-5F0A28 Extract OS            00 (0) 'MS-DOS'\n-5F0A29 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0A2B Compression Method    0000 (0) 'Stored'\n-5F0A2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0A31 CRC                   5F6BF872 (1600911474)\n-5F0A35 Compressed Size       000009A0 (2464)\n-5F0A39 Uncompressed Size     000009A0 (2464)\n-5F0A3D Filename Length       006E (110)\n-5F0A3F Extra Length          0009 (9)\n-5F0A41 Comment Length        0000 (0)\n-5F0A43 Disk Start            0000 (0)\n-5F0A45 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0A47 Ext File Attributes   00000000 (0)\n-5F0A4B Local Header Offset   0003A4DE (238814)\n-5F0A4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0A4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0ABD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0ABF   Length              0005 (5)\n-5F0AC1   Flags               01 (1) 'Modification'\n-5F0AC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0AC6 CENTRAL HEADER #128   02014B50 (33639248)\n-5F0ACA Created Zip Spec      14 (20) '2.0'\n-5F0ACB Created OS            00 (0) 'MS-DOS'\n-5F0ACC Extract Zip Spec      14 (20) '2.0'\n-5F0ACD Extract OS            00 (0) 'MS-DOS'\n-5F0ACE General Purpose Flag  0000 (0)\n-5F0AD0 Compression Method    0000 (0) 'Stored'\n-5F0AD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0AD6 CRC                   00000000 (0)\n-5F0ADA Compressed Size       00000000 (0)\n-5F0ADE Uncompressed Size     00000000 (0)\n-5F0AE2 Filename Length       0023 (35)\n-5F0AE4 Extra Length          0009 (9)\n-5F0AE6 Comment Length        0000 (0)\n-5F0AE8 Disk Start            0000 (0)\n-5F0AEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0AEC Ext File Attributes   00000000 (0)\n-5F0AF0 Local Header Offset   0003AF23 (241443)\n-5F0AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0B17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0B19   Length              0005 (5)\n-5F0B1B   Flags               01 (1) 'Modification'\n-5F0B1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0B20 CENTRAL HEADER #129   02014B50 (33639248)\n-5F0B24 Created Zip Spec      14 (20) '2.0'\n-5F0B25 Created OS            00 (0) 'MS-DOS'\n-5F0B26 Extract Zip Spec      14 (20) '2.0'\n-5F0B27 Extract OS            00 (0) 'MS-DOS'\n-5F0B28 General Purpose Flag  0000 (0)\n-5F0B2A Compression Method    0000 (0) 'Stored'\n-5F0B2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0B30 CRC                   00000000 (0)\n-5F0B34 Compressed Size       00000000 (0)\n-5F0B38 Uncompressed Size     00000000 (0)\n-5F0B3C Filename Length       002A (42)\n-5F0B3E Extra Length          0009 (9)\n-5F0B40 Comment Length        0000 (0)\n-5F0B42 Disk Start            0000 (0)\n-5F0B44 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0B46 Ext File Attributes   00000000 (0)\n-5F0B4A Local Header Offset   0003AF6D (241517)\n-5F0B4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0B4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0B78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0B7A   Length              0005 (5)\n-5F0B7C   Flags               01 (1) 'Modification'\n-5F0B7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0B81 CENTRAL HEADER #130   02014B50 (33639248)\n-5F0B85 Created Zip Spec      14 (20) '2.0'\n-5F0B86 Created OS            00 (0) 'MS-DOS'\n-5F0B87 Extract Zip Spec      14 (20) '2.0'\n-5F0B88 Extract OS            00 (0) 'MS-DOS'\n-5F0B89 General Purpose Flag  0000 (0)\n-5F0B8B Compression Method    0000 (0) 'Stored'\n-5F0B8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0B91 CRC                   00000000 (0)\n-5F0B95 Compressed Size       00000000 (0)\n-5F0B99 Uncompressed Size     00000000 (0)\n-5F0B9D Filename Length       0054 (84)\n-5F0B9F Extra Length          0009 (9)\n-5F0BA1 Comment Length        0000 (0)\n-5F0BA3 Disk Start            0000 (0)\n-5F0BA5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0BA7 Ext File Attributes   00000000 (0)\n-5F0BAB Local Header Offset   0003AFBE (241598)\n-5F0BAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0BAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0C03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0C05   Length              0005 (5)\n-5F0C07   Flags               01 (1) 'Modification'\n-5F0C08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0C0C CENTRAL HEADER #131   02014B50 (33639248)\n-5F0C10 Created Zip Spec      14 (20) '2.0'\n-5F0C11 Created OS            00 (0) 'MS-DOS'\n-5F0C12 Extract Zip Spec      14 (20) '2.0'\n-5F0C13 Extract OS            00 (0) 'MS-DOS'\n-5F0C14 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0C16 Compression Method    0000 (0) 'Stored'\n-5F0C18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0C1C CRC                   456B0BC9 (1164643273)\n-5F0C20 Compressed Size       00001135 (4405)\n-5F0C24 Uncompressed Size     00001135 (4405)\n-5F0C28 Filename Length       006A (106)\n-5F0C2A Extra Length          0009 (9)\n-5F0C2C Comment Length        0000 (0)\n-5F0C2E Disk Start            0000 (0)\n-5F0C30 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0C32 Ext File Attributes   00000000 (0)\n-5F0C36 Local Header Offset   0003B039 (241721)\n-5F0C3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0C3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0CA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0CA6   Length              0005 (5)\n-5F0CA8   Flags               01 (1) 'Modification'\n-5F0CA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0CAD CENTRAL HEADER #132   02014B50 (33639248)\n-5F0CB1 Created Zip Spec      14 (20) '2.0'\n-5F0CB2 Created OS            00 (0) 'MS-DOS'\n-5F0CB3 Extract Zip Spec      14 (20) '2.0'\n-5F0CB4 Extract OS            00 (0) 'MS-DOS'\n-5F0CB5 General Purpose Flag  0000 (0)\n-5F0CB7 Compression Method    0000 (0) 'Stored'\n-5F0CB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0CBD CRC                   00000000 (0)\n-5F0CC1 Compressed Size       00000000 (0)\n-5F0CC5 Uncompressed Size     00000000 (0)\n-5F0CC9 Filename Length       0022 (34)\n-5F0CCB Extra Length          0009 (9)\n-5F0CCD Comment Length        0000 (0)\n-5F0CCF Disk Start            0000 (0)\n-5F0CD1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0CD3 Ext File Attributes   00000000 (0)\n-5F0CD7 Local Header Offset   0003C20F (246287)\n-5F0CDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0CDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0CFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0CFF   Length              0005 (5)\n-5F0D01   Flags               01 (1) 'Modification'\n-5F0D02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0D06 CENTRAL HEADER #133   02014B50 (33639248)\n-5F0D0A Created Zip Spec      14 (20) '2.0'\n-5F0D0B Created OS            00 (0) 'MS-DOS'\n-5F0D0C Extract Zip Spec      14 (20) '2.0'\n-5F0D0D Extract OS            00 (0) 'MS-DOS'\n-5F0D0E General Purpose Flag  0000 (0)\n-5F0D10 Compression Method    0000 (0) 'Stored'\n-5F0D12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0D16 CRC                   00000000 (0)\n-5F0D1A Compressed Size       00000000 (0)\n-5F0D1E Uncompressed Size     00000000 (0)\n-5F0D22 Filename Length       0029 (41)\n-5F0D24 Extra Length          0009 (9)\n-5F0D26 Comment Length        0000 (0)\n-5F0D28 Disk Start            0000 (0)\n-5F0D2A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0D2C Ext File Attributes   00000000 (0)\n-5F0D30 Local Header Offset   0003C258 (246360)\n-5F0D34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0D34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0D5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0D5F   Length              0005 (5)\n-5F0D61   Flags               01 (1) 'Modification'\n-5F0D62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0D66 CENTRAL HEADER #134   02014B50 (33639248)\n-5F0D6A Created Zip Spec      14 (20) '2.0'\n-5F0D6B Created OS            00 (0) 'MS-DOS'\n-5F0D6C Extract Zip Spec      14 (20) '2.0'\n-5F0D6D Extract OS            00 (0) 'MS-DOS'\n-5F0D6E General Purpose Flag  0000 (0)\n-5F0D70 Compression Method    0000 (0) 'Stored'\n-5F0D72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0D76 CRC                   00000000 (0)\n-5F0D7A Compressed Size       00000000 (0)\n-5F0D7E Uncompressed Size     00000000 (0)\n-5F0D82 Filename Length       005D (93)\n-5F0D84 Extra Length          0009 (9)\n-5F0D86 Comment Length        0000 (0)\n-5F0D88 Disk Start            0000 (0)\n-5F0D8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0D8C Ext File Attributes   00000000 (0)\n-5F0D90 Local Header Offset   0003C2A8 (246440)\n-5F0D94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0D94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0DF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0DF3   Length              0005 (5)\n-5F0DF5   Flags               01 (1) 'Modification'\n-5F0DF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0DFA CENTRAL HEADER #135   02014B50 (33639248)\n-5F0DFE Created Zip Spec      14 (20) '2.0'\n-5F0DFF Created OS            00 (0) 'MS-DOS'\n-5F0E00 Extract Zip Spec      14 (20) '2.0'\n-5F0E01 Extract OS            00 (0) 'MS-DOS'\n-5F0E02 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0E04 Compression Method    0000 (0) 'Stored'\n-5F0E06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0E0A CRC                   6A45582D (1782929453)\n-5F0E0E Compressed Size       000009E0 (2528)\n-5F0E12 Uncompressed Size     000009E0 (2528)\n-5F0E16 Filename Length       0073 (115)\n-5F0E18 Extra Length          0009 (9)\n-5F0E1A Comment Length        0000 (0)\n-5F0E1C Disk Start            0000 (0)\n-5F0E1E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0E20 Ext File Attributes   00000000 (0)\n-5F0E24 Local Header Offset   0003C32C (246572)\n-5F0E28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0E28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0E9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0E9D   Length              0005 (5)\n-5F0E9F   Flags               01 (1) 'Modification'\n-5F0EA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0EA4 CENTRAL HEADER #136   02014B50 (33639248)\n-5F0EA8 Created Zip Spec      14 (20) '2.0'\n-5F0EA9 Created OS            00 (0) 'MS-DOS'\n-5F0EAA Extract Zip Spec      14 (20) '2.0'\n-5F0EAB Extract OS            00 (0) 'MS-DOS'\n-5F0EAC General Purpose Flag  0000 (0)\n-5F0EAE Compression Method    0000 (0) 'Stored'\n-5F0EB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0EB4 CRC                   00000000 (0)\n-5F0EB8 Compressed Size       00000000 (0)\n-5F0EBC Uncompressed Size     00000000 (0)\n-5F0EC0 Filename Length       005F (95)\n-5F0EC2 Extra Length          0009 (9)\n-5F0EC4 Comment Length        0000 (0)\n-5F0EC6 Disk Start            0000 (0)\n-5F0EC8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0ECA Ext File Attributes   00000000 (0)\n-5F0ECE Local Header Offset   0003CDB6 (249270)\n-5F0ED2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0ED2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0F31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0F33   Length              0005 (5)\n-5F0F35   Flags               01 (1) 'Modification'\n-5F0F36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0F3A CENTRAL HEADER #137   02014B50 (33639248)\n-5F0F3E Created Zip Spec      14 (20) '2.0'\n-5F0F3F Created OS            00 (0) 'MS-DOS'\n-5F0F40 Extract Zip Spec      14 (20) '2.0'\n-5F0F41 Extract OS            00 (0) 'MS-DOS'\n-5F0F42 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F0F44 Compression Method    0000 (0) 'Stored'\n-5F0F46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0F4A CRC                   4731534C (1194414924)\n-5F0F4E Compressed Size       00000B90 (2960)\n-5F0F52 Uncompressed Size     00000B90 (2960)\n-5F0F56 Filename Length       0075 (117)\n-5F0F58 Extra Length          0009 (9)\n-5F0F5A Comment Length        0000 (0)\n-5F0F5C Disk Start            0000 (0)\n-5F0F5E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F0F60 Ext File Attributes   00000000 (0)\n-5F0F64 Local Header Offset   0003CE3C (249404)\n-5F0F68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F0F68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F0FDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F0FDF   Length              0005 (5)\n-5F0FE1   Flags               01 (1) 'Modification'\n-5F0FE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F0FE6 CENTRAL HEADER #138   02014B50 (33639248)\n-5F0FEA Created Zip Spec      14 (20) '2.0'\n-5F0FEB Created OS            00 (0) 'MS-DOS'\n-5F0FEC Extract Zip Spec      14 (20) '2.0'\n-5F0FED Extract OS            00 (0) 'MS-DOS'\n-5F0FEE General Purpose Flag  0000 (0)\n-5F0FF0 Compression Method    0000 (0) 'Stored'\n-5F0FF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F0FF6 CRC                   00000000 (0)\n-5F0FFA Compressed Size       00000000 (0)\n-5F0FFE Uncompressed Size     00000000 (0)\n-5F1002 Filename Length       005E (94)\n-5F1004 Extra Length          0009 (9)\n-5F1006 Comment Length        0000 (0)\n-5F1008 Disk Start            0000 (0)\n-5F100A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F100C Ext File Attributes   00000000 (0)\n-5F1010 Local Header Offset   0003DA78 (252536)\n-5F1014 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1014: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1072 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1074   Length              0005 (5)\n-5F1076   Flags               01 (1) 'Modification'\n-5F1077   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F107B CENTRAL HEADER #139   02014B50 (33639248)\n-5F107F Created Zip Spec      14 (20) '2.0'\n-5F1080 Created OS            00 (0) 'MS-DOS'\n-5F1081 Extract Zip Spec      14 (20) '2.0'\n-5F1082 Extract OS            00 (0) 'MS-DOS'\n-5F1083 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1085 Compression Method    0000 (0) 'Stored'\n-5F1087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F108B CRC                   CEBA8B64 (3468331876)\n-5F108F Compressed Size       00000A7D (2685)\n-5F1093 Uncompressed Size     00000A7D (2685)\n-5F1097 Filename Length       0074 (116)\n-5F1099 Extra Length          0009 (9)\n-5F109B Comment Length        0000 (0)\n-5F109D Disk Start            0000 (0)\n-5F109F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F10A1 Ext File Attributes   00000000 (0)\n-5F10A5 Local Header Offset   0003DAFD (252669)\n-5F10A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F10A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F111D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F111F   Length              0005 (5)\n-5F1121   Flags               01 (1) 'Modification'\n-5F1122   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1126 CENTRAL HEADER #140   02014B50 (33639248)\n-5F112A Created Zip Spec      14 (20) '2.0'\n-5F112B Created OS            00 (0) 'MS-DOS'\n-5F112C Extract Zip Spec      14 (20) '2.0'\n-5F112D Extract OS            00 (0) 'MS-DOS'\n-5F112E General Purpose Flag  0000 (0)\n-5F1130 Compression Method    0000 (0) 'Stored'\n-5F1132 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1136 CRC                   00000000 (0)\n-5F113A Compressed Size       00000000 (0)\n-5F113E Uncompressed Size     00000000 (0)\n-5F1142 Filename Length       005D (93)\n-5F1144 Extra Length          0009 (9)\n-5F1146 Comment Length        0000 (0)\n-5F1148 Disk Start            0000 (0)\n-5F114A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F114C Ext File Attributes   00000000 (0)\n-5F1150 Local Header Offset   0003E625 (255525)\n-5F1154 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1154: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F11B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F11B3   Length              0005 (5)\n-5F11B5   Flags               01 (1) 'Modification'\n-5F11B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F11BA CENTRAL HEADER #141   02014B50 (33639248)\n-5F11BE Created Zip Spec      14 (20) '2.0'\n-5F11BF Created OS            00 (0) 'MS-DOS'\n-5F11C0 Extract Zip Spec      14 (20) '2.0'\n-5F11C1 Extract OS            00 (0) 'MS-DOS'\n-5F11C2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F11C4 Compression Method    0000 (0) 'Stored'\n-5F11C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F11CA CRC                   0DACEA84 (229436036)\n-5F11CE Compressed Size       00000A95 (2709)\n-5F11D2 Uncompressed Size     00000A95 (2709)\n-5F11D6 Filename Length       0073 (115)\n-5F11D8 Extra Length          0009 (9)\n-5F11DA Comment Length        0000 (0)\n-5F11DC Disk Start            0000 (0)\n-5F11DE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F11E0 Ext File Attributes   00000000 (0)\n-5F11E4 Local Header Offset   0003E6A9 (255657)\n-5F11E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F11E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F125B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F125D   Length              0005 (5)\n-5F125F   Flags               01 (1) 'Modification'\n-5F1260   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1264 CENTRAL HEADER #142   02014B50 (33639248)\n-5F1268 Created Zip Spec      14 (20) '2.0'\n-5F1269 Created OS            00 (0) 'MS-DOS'\n-5F126A Extract Zip Spec      14 (20) '2.0'\n-5F126B Extract OS            00 (0) 'MS-DOS'\n-5F126C General Purpose Flag  0000 (0)\n-5F126E Compression Method    0000 (0) 'Stored'\n-5F1270 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1274 CRC                   00000000 (0)\n-5F1278 Compressed Size       00000000 (0)\n-5F127C Uncompressed Size     00000000 (0)\n-5F1280 Filename Length       005E (94)\n-5F1282 Extra Length          0009 (9)\n-5F1284 Comment Length        0000 (0)\n-5F1286 Disk Start            0000 (0)\n-5F1288 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F128A Ext File Attributes   00000000 (0)\n-5F128E Local Header Offset   0003F1E8 (258536)\n-5F1292 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1292: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F12F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F12F2   Length              0005 (5)\n-5F12F4   Flags               01 (1) 'Modification'\n-5F12F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F12F9 CENTRAL HEADER #143   02014B50 (33639248)\n-5F12FD Created Zip Spec      14 (20) '2.0'\n-5F12FE Created OS            00 (0) 'MS-DOS'\n-5F12FF Extract Zip Spec      14 (20) '2.0'\n-5F1300 Extract OS            00 (0) 'MS-DOS'\n-5F1301 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1303 Compression Method    0000 (0) 'Stored'\n-5F1305 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1309 CRC                   2E84B239 (780448313)\n-5F130D Compressed Size       0000121D (4637)\n-5F1311 Uncompressed Size     0000121D (4637)\n-5F1315 Filename Length       0074 (116)\n-5F1317 Extra Length          0009 (9)\n-5F1319 Comment Length        0000 (0)\n-5F131B Disk Start            0000 (0)\n-5F131D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F131F Ext File Attributes   00000000 (0)\n-5F1323 Local Header Offset   0003F26D (258669)\n-5F1327 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1327: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F139B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F139D   Length              0005 (5)\n-5F139F   Flags               01 (1) 'Modification'\n-5F13A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F13A4 CENTRAL HEADER #144   02014B50 (33639248)\n-5F13A8 Created Zip Spec      14 (20) '2.0'\n-5F13A9 Created OS            00 (0) 'MS-DOS'\n-5F13AA Extract Zip Spec      14 (20) '2.0'\n-5F13AB Extract OS            00 (0) 'MS-DOS'\n-5F13AC General Purpose Flag  0000 (0)\n-5F13AE Compression Method    0000 (0) 'Stored'\n-5F13B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F13B4 CRC                   00000000 (0)\n-5F13B8 Compressed Size       00000000 (0)\n-5F13BC Uncompressed Size     00000000 (0)\n-5F13C0 Filename Length       0078 (120)\n-5F13C2 Extra Length          0009 (9)\n-5F13C4 Comment Length        0000 (0)\n-5F13C6 Disk Start            0000 (0)\n-5F13C8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F13CA Ext File Attributes   00000000 (0)\n-5F13CE Local Header Offset   00040535 (263477)\n-5F13D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F13D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F144A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F144C   Length              0005 (5)\n-5F144E   Flags               01 (1) 'Modification'\n-5F144F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1453 CENTRAL HEADER #145   02014B50 (33639248)\n-5F1457 Created Zip Spec      14 (20) '2.0'\n-5F1458 Created OS            00 (0) 'MS-DOS'\n-5F1459 Extract Zip Spec      14 (20) '2.0'\n-5F145A Extract OS            00 (0) 'MS-DOS'\n-5F145B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F145D Compression Method    0000 (0) 'Stored'\n-5F145F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1463 CRC                   10E7267F (283584127)\n-5F1467 Compressed Size       000006FB (1787)\n-5F146B Uncompressed Size     000006FB (1787)\n-5F146F Filename Length       008E (142)\n-5F1471 Extra Length          0009 (9)\n-5F1473 Comment Length        0000 (0)\n-5F1475 Disk Start            0000 (0)\n-5F1477 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1479 Ext File Attributes   00000000 (0)\n-5F147D Local Header Offset   000405D4 (263636)\n-5F1481 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXX'\n+5F1550 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1552   Length              0005 (5)\n+5F1554   Flags               01 (1) 'Modification'\n+5F1555   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1559 CENTRAL HEADER #60    02014B50 (33639248)\n+5F155D Created Zip Spec      14 (20) '2.0'\n+5F155E Created OS            00 (0) 'MS-DOS'\n+5F155F Extract Zip Spec      14 (20) '2.0'\n+5F1560 Extract OS            00 (0) 'MS-DOS'\n+5F1561 General Purpose Flag  0000 (0)\n+5F1563 Compression Method    0000 (0) 'Stored'\n+5F1565 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1569 CRC                   00000000 (0)\n+5F156D Compressed Size       00000000 (0)\n+5F1571 Uncompressed Size     00000000 (0)\n+5F1575 Filename Length       0024 (36)\n+5F1577 Extra Length          0009 (9)\n+5F1579 Comment Length        0000 (0)\n+5F157B Disk Start            0000 (0)\n+5F157D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F157F Ext File Attributes   00000000 (0)\n+5F1583 Local Header Offset   0002B186 (176518)\n+5F1587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F15AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F15AD   Length              0005 (5)\n+5F15AF   Flags               01 (1) 'Modification'\n+5F15B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F15B4 CENTRAL HEADER #61    02014B50 (33639248)\n+5F15B8 Created Zip Spec      14 (20) '2.0'\n+5F15B9 Created OS            00 (0) 'MS-DOS'\n+5F15BA Extract Zip Spec      14 (20) '2.0'\n+5F15BB Extract OS            00 (0) 'MS-DOS'\n+5F15BC General Purpose Flag  0000 (0)\n+5F15BE Compression Method    0000 (0) 'Stored'\n+5F15C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F15C4 CRC                   00000000 (0)\n+5F15C8 Compressed Size       00000000 (0)\n+5F15CC Uncompressed Size     00000000 (0)\n+5F15D0 Filename Length       002B (43)\n+5F15D2 Extra Length          0009 (9)\n+5F15D4 Comment Length        0000 (0)\n+5F15D6 Disk Start            0000 (0)\n+5F15D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F15DA Ext File Attributes   00000000 (0)\n+5F15DE Local Header Offset   0002B1D1 (176593)\n+5F15E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F15E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F160D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F160F   Length              0005 (5)\n+5F1611   Flags               01 (1) 'Modification'\n+5F1612   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1616 CENTRAL HEADER #62    02014B50 (33639248)\n+5F161A Created Zip Spec      14 (20) '2.0'\n+5F161B Created OS            00 (0) 'MS-DOS'\n+5F161C Extract Zip Spec      14 (20) '2.0'\n+5F161D Extract OS            00 (0) 'MS-DOS'\n+5F161E General Purpose Flag  0000 (0)\n+5F1620 Compression Method    0000 (0) 'Stored'\n+5F1622 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1626 CRC                   00000000 (0)\n+5F162A Compressed Size       00000000 (0)\n+5F162E Uncompressed Size     00000000 (0)\n+5F1632 Filename Length       006C (108)\n+5F1634 Extra Length          0009 (9)\n+5F1636 Comment Length        0000 (0)\n+5F1638 Disk Start            0000 (0)\n+5F163A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F163C Ext File Attributes   00000000 (0)\n+5F1640 Local Header Offset   0002B223 (176675)\n+5F1644 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1644: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F16B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F16B2   Length              0005 (5)\n+5F16B4   Flags               01 (1) 'Modification'\n+5F16B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F16B9 CENTRAL HEADER #63    02014B50 (33639248)\n+5F16BD Created Zip Spec      14 (20) '2.0'\n+5F16BE Created OS            00 (0) 'MS-DOS'\n+5F16BF Extract Zip Spec      14 (20) '2.0'\n+5F16C0 Extract OS            00 (0) 'MS-DOS'\n+5F16C1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F16C3 Compression Method    0000 (0) 'Stored'\n+5F16C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F16C9 CRC                   A7D3962C (2815661612)\n+5F16CD Compressed Size       000009CC (2508)\n+5F16D1 Uncompressed Size     000009CC (2508)\n+5F16D5 Filename Length       0082 (130)\n+5F16D7 Extra Length          0009 (9)\n+5F16D9 Comment Length        0000 (0)\n+5F16DB Disk Start            0000 (0)\n+5F16DD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F16DF Ext File Attributes   00000000 (0)\n+5F16E3 Local Header Offset   0002B2B6 (176822)\n+5F16E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F16E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1769 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F176B   Length              0005 (5)\n+5F176D   Flags               01 (1) 'Modification'\n+5F176E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1772 CENTRAL HEADER #64    02014B50 (33639248)\n+5F1776 Created Zip Spec      14 (20) '2.0'\n+5F1777 Created OS            00 (0) 'MS-DOS'\n+5F1778 Extract Zip Spec      14 (20) '2.0'\n+5F1779 Extract OS            00 (0) 'MS-DOS'\n+5F177A General Purpose Flag  0000 (0)\n+5F177C Compression Method    0000 (0) 'Stored'\n+5F177E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1782 CRC                   00000000 (0)\n+5F1786 Compressed Size       00000000 (0)\n+5F178A Uncompressed Size     00000000 (0)\n+5F178E Filename Length       0073 (115)\n+5F1790 Extra Length          0009 (9)\n+5F1792 Comment Length        0000 (0)\n+5F1794 Disk Start            0000 (0)\n+5F1796 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1798 Ext File Attributes   00000000 (0)\n+5F179C Local Header Offset   0002BD3B (179515)\n+5F17A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F17A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1813 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1815   Length              0005 (5)\n+5F1817   Flags               01 (1) 'Modification'\n+5F1818   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F181C CENTRAL HEADER #65    02014B50 (33639248)\n+5F1820 Created Zip Spec      14 (20) '2.0'\n+5F1821 Created OS            00 (0) 'MS-DOS'\n+5F1822 Extract Zip Spec      14 (20) '2.0'\n+5F1823 Extract OS            00 (0) 'MS-DOS'\n+5F1824 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1826 Compression Method    0000 (0) 'Stored'\n+5F1828 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F182C CRC                   2E17013D (773259581)\n+5F1830 Compressed Size       00000888 (2184)\n+5F1834 Uncompressed Size     00000888 (2184)\n+5F1838 Filename Length       0089 (137)\n+5F183A Extra Length          0009 (9)\n+5F183C Comment Length        0000 (0)\n+5F183E Disk Start            0000 (0)\n+5F1840 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1842 Ext File Attributes   00000000 (0)\n+5F1846 Local Header Offset   0002BDD5 (179669)\n+5F184A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXX'\n #\n-# WARNING: Offset 0x5F1481: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F184A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F150F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1511   Length              0005 (5)\n-5F1513   Flags               01 (1) 'Modification'\n-5F1514   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1518 CENTRAL HEADER #146   02014B50 (33639248)\n-5F151C Created Zip Spec      14 (20) '2.0'\n-5F151D Created OS            00 (0) 'MS-DOS'\n-5F151E Extract Zip Spec      14 (20) '2.0'\n-5F151F Extract OS            00 (0) 'MS-DOS'\n-5F1520 General Purpose Flag  0000 (0)\n-5F1522 Compression Method    0000 (0) 'Stored'\n-5F1524 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1528 CRC                   00000000 (0)\n-5F152C Compressed Size       00000000 (0)\n-5F1530 Uncompressed Size     00000000 (0)\n-5F1534 Filename Length       0079 (121)\n-5F1536 Extra Length          0009 (9)\n-5F1538 Comment Length        0000 (0)\n-5F153A Disk Start            0000 (0)\n-5F153C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F153E Ext File Attributes   00000000 (0)\n-5F1542 Local Header Offset   00040D94 (265620)\n-5F1546 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1546: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F15BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F15C1   Length              0005 (5)\n-5F15C3   Flags               01 (1) 'Modification'\n-5F15C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F15C8 CENTRAL HEADER #147   02014B50 (33639248)\n-5F15CC Created Zip Spec      14 (20) '2.0'\n-5F15CD Created OS            00 (0) 'MS-DOS'\n-5F15CE Extract Zip Spec      14 (20) '2.0'\n-5F15CF Extract OS            00 (0) 'MS-DOS'\n-5F15D0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F15D2 Compression Method    0000 (0) 'Stored'\n-5F15D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F15D8 CRC                   24E47A3B (618953275)\n-5F15DC Compressed Size       000006FF (1791)\n-5F15E0 Uncompressed Size     000006FF (1791)\n-5F15E4 Filename Length       008F (143)\n-5F15E6 Extra Length          0009 (9)\n-5F15E8 Comment Length        0000 (0)\n-5F15EA Disk Start            0000 (0)\n-5F15EC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F15EE Ext File Attributes   00000000 (0)\n-5F15F2 Local Header Offset   00040E34 (265780)\n-5F15F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5F18D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F18D5   Length              0005 (5)\n+5F18D7   Flags               01 (1) 'Modification'\n+5F18D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F18DC CENTRAL HEADER #66    02014B50 (33639248)\n+5F18E0 Created Zip Spec      14 (20) '2.0'\n+5F18E1 Created OS            00 (0) 'MS-DOS'\n+5F18E2 Extract Zip Spec      14 (20) '2.0'\n+5F18E3 Extract OS            00 (0) 'MS-DOS'\n+5F18E4 General Purpose Flag  0000 (0)\n+5F18E6 Compression Method    0000 (0) 'Stored'\n+5F18E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F18EC CRC                   00000000 (0)\n+5F18F0 Compressed Size       00000000 (0)\n+5F18F4 Uncompressed Size     00000000 (0)\n+5F18F8 Filename Length       0022 (34)\n+5F18FA Extra Length          0009 (9)\n+5F18FC Comment Length        0000 (0)\n+5F18FE Disk Start            0000 (0)\n+5F1900 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1902 Ext File Attributes   00000000 (0)\n+5F1906 Local Header Offset   0002C71D (182045)\n+5F190A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F190A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F192C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F192E   Length              0005 (5)\n+5F1930   Flags               01 (1) 'Modification'\n+5F1931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1935 CENTRAL HEADER #67    02014B50 (33639248)\n+5F1939 Created Zip Spec      14 (20) '2.0'\n+5F193A Created OS            00 (0) 'MS-DOS'\n+5F193B Extract Zip Spec      14 (20) '2.0'\n+5F193C Extract OS            00 (0) 'MS-DOS'\n+5F193D General Purpose Flag  0000 (0)\n+5F193F Compression Method    0000 (0) 'Stored'\n+5F1941 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1945 CRC                   00000000 (0)\n+5F1949 Compressed Size       00000000 (0)\n+5F194D Uncompressed Size     00000000 (0)\n+5F1951 Filename Length       0029 (41)\n+5F1953 Extra Length          0009 (9)\n+5F1955 Comment Length        0000 (0)\n+5F1957 Disk Start            0000 (0)\n+5F1959 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F195B Ext File Attributes   00000000 (0)\n+5F195F Local Header Offset   0002C766 (182118)\n+5F1963 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1963: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F198C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F198E   Length              0005 (5)\n+5F1990   Flags               01 (1) 'Modification'\n+5F1991   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1995 CENTRAL HEADER #68    02014B50 (33639248)\n+5F1999 Created Zip Spec      14 (20) '2.0'\n+5F199A Created OS            00 (0) 'MS-DOS'\n+5F199B Extract Zip Spec      14 (20) '2.0'\n+5F199C Extract OS            00 (0) 'MS-DOS'\n+5F199D General Purpose Flag  0000 (0)\n+5F199F Compression Method    0000 (0) 'Stored'\n+5F19A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F19A5 CRC                   00000000 (0)\n+5F19A9 Compressed Size       00000000 (0)\n+5F19AD Uncompressed Size     00000000 (0)\n+5F19B1 Filename Length       0055 (85)\n+5F19B3 Extra Length          0009 (9)\n+5F19B5 Comment Length        0000 (0)\n+5F19B7 Disk Start            0000 (0)\n+5F19B9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F19BB Ext File Attributes   00000000 (0)\n+5F19BF Local Header Offset   0002C7B6 (182198)\n+5F19C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F19C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1A18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1A1A   Length              0005 (5)\n+5F1A1C   Flags               01 (1) 'Modification'\n+5F1A1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1A21 CENTRAL HEADER #69    02014B50 (33639248)\n+5F1A25 Created Zip Spec      14 (20) '2.0'\n+5F1A26 Created OS            00 (0) 'MS-DOS'\n+5F1A27 Extract Zip Spec      14 (20) '2.0'\n+5F1A28 Extract OS            00 (0) 'MS-DOS'\n+5F1A29 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1A2B Compression Method    0000 (0) 'Stored'\n+5F1A2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1A31 CRC                   C1E5A225 (3253051941)\n+5F1A35 Compressed Size       0000070B (1803)\n+5F1A39 Uncompressed Size     0000070B (1803)\n+5F1A3D Filename Length       006B (107)\n+5F1A3F Extra Length          0009 (9)\n+5F1A41 Comment Length        0000 (0)\n+5F1A43 Disk Start            0000 (0)\n+5F1A45 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1A47 Ext File Attributes   00000000 (0)\n+5F1A4B Local Header Offset   0002C832 (182322)\n+5F1A4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1A4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1ABA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1ABC   Length              0005 (5)\n+5F1ABE   Flags               01 (1) 'Modification'\n+5F1ABF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1AC3 CENTRAL HEADER #70    02014B50 (33639248)\n+5F1AC7 Created Zip Spec      14 (20) '2.0'\n+5F1AC8 Created OS            00 (0) 'MS-DOS'\n+5F1AC9 Extract Zip Spec      14 (20) '2.0'\n+5F1ACA Extract OS            00 (0) 'MS-DOS'\n+5F1ACB General Purpose Flag  0000 (0)\n+5F1ACD Compression Method    0000 (0) 'Stored'\n+5F1ACF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1AD3 CRC                   00000000 (0)\n+5F1AD7 Compressed Size       00000000 (0)\n+5F1ADB Uncompressed Size     00000000 (0)\n+5F1ADF Filename Length       0054 (84)\n+5F1AE1 Extra Length          0009 (9)\n+5F1AE3 Comment Length        0000 (0)\n+5F1AE5 Disk Start            0000 (0)\n+5F1AE7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1AE9 Ext File Attributes   00000000 (0)\n+5F1AED Local Header Offset   0002CFDF (184287)\n+5F1AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1B45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1B47   Length              0005 (5)\n+5F1B49   Flags               01 (1) 'Modification'\n+5F1B4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1B4E CENTRAL HEADER #71    02014B50 (33639248)\n+5F1B52 Created Zip Spec      14 (20) '2.0'\n+5F1B53 Created OS            00 (0) 'MS-DOS'\n+5F1B54 Extract Zip Spec      14 (20) '2.0'\n+5F1B55 Extract OS            00 (0) 'MS-DOS'\n+5F1B56 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1B58 Compression Method    0000 (0) 'Stored'\n+5F1B5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1B5E CRC                   8950733E (2303750974)\n+5F1B62 Compressed Size       0000064D (1613)\n+5F1B66 Uncompressed Size     0000064D (1613)\n+5F1B6A Filename Length       006A (106)\n+5F1B6C Extra Length          0009 (9)\n+5F1B6E Comment Length        0000 (0)\n+5F1B70 Disk Start            0000 (0)\n+5F1B72 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1B74 Ext File Attributes   00000000 (0)\n+5F1B78 Local Header Offset   0002D05A (184410)\n+5F1B7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1B7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1BE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1BE8   Length              0005 (5)\n+5F1BEA   Flags               01 (1) 'Modification'\n+5F1BEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1BEF CENTRAL HEADER #72    02014B50 (33639248)\n+5F1BF3 Created Zip Spec      14 (20) '2.0'\n+5F1BF4 Created OS            00 (0) 'MS-DOS'\n+5F1BF5 Extract Zip Spec      14 (20) '2.0'\n+5F1BF6 Extract OS            00 (0) 'MS-DOS'\n+5F1BF7 General Purpose Flag  0000 (0)\n+5F1BF9 Compression Method    0000 (0) 'Stored'\n+5F1BFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1BFF CRC                   00000000 (0)\n+5F1C03 Compressed Size       00000000 (0)\n+5F1C07 Uncompressed Size     00000000 (0)\n+5F1C0B Filename Length       0053 (83)\n+5F1C0D Extra Length          0009 (9)\n+5F1C0F Comment Length        0000 (0)\n+5F1C11 Disk Start            0000 (0)\n+5F1C13 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1C15 Ext File Attributes   00000000 (0)\n+5F1C19 Local Header Offset   0002D748 (186184)\n+5F1C1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1C1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1C70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1C72   Length              0005 (5)\n+5F1C74   Flags               01 (1) 'Modification'\n+5F1C75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1C79 CENTRAL HEADER #73    02014B50 (33639248)\n+5F1C7D Created Zip Spec      14 (20) '2.0'\n+5F1C7E Created OS            00 (0) 'MS-DOS'\n+5F1C7F Extract Zip Spec      14 (20) '2.0'\n+5F1C80 Extract OS            00 (0) 'MS-DOS'\n+5F1C81 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1C83 Compression Method    0000 (0) 'Stored'\n+5F1C85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1C89 CRC                   A0157ABE (2685762238)\n+5F1C8D Compressed Size       00000643 (1603)\n+5F1C91 Uncompressed Size     00000643 (1603)\n+5F1C95 Filename Length       0069 (105)\n+5F1C97 Extra Length          0009 (9)\n+5F1C99 Comment Length        0000 (0)\n+5F1C9B Disk Start            0000 (0)\n+5F1C9D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1C9F Ext File Attributes   00000000 (0)\n+5F1CA3 Local Header Offset   0002D7C2 (186306)\n+5F1CA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1CA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1D10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1D12   Length              0005 (5)\n+5F1D14   Flags               01 (1) 'Modification'\n+5F1D15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1D19 CENTRAL HEADER #74    02014B50 (33639248)\n+5F1D1D Created Zip Spec      14 (20) '2.0'\n+5F1D1E Created OS            00 (0) 'MS-DOS'\n+5F1D1F Extract Zip Spec      14 (20) '2.0'\n+5F1D20 Extract OS            00 (0) 'MS-DOS'\n+5F1D21 General Purpose Flag  0000 (0)\n+5F1D23 Compression Method    0000 (0) 'Stored'\n+5F1D25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1D29 CRC                   00000000 (0)\n+5F1D2D Compressed Size       00000000 (0)\n+5F1D31 Uncompressed Size     00000000 (0)\n+5F1D35 Filename Length       002B (43)\n+5F1D37 Extra Length          0009 (9)\n+5F1D39 Comment Length        0000 (0)\n+5F1D3B Disk Start            0000 (0)\n+5F1D3D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1D3F Ext File Attributes   00000000 (0)\n+5F1D43 Local Header Offset   0002DEA5 (188069)\n+5F1D47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1D47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1D72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1D74   Length              0005 (5)\n+5F1D76   Flags               01 (1) 'Modification'\n+5F1D77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1D7B CENTRAL HEADER #75    02014B50 (33639248)\n+5F1D7F Created Zip Spec      14 (20) '2.0'\n+5F1D80 Created OS            00 (0) 'MS-DOS'\n+5F1D81 Extract Zip Spec      14 (20) '2.0'\n+5F1D82 Extract OS            00 (0) 'MS-DOS'\n+5F1D83 General Purpose Flag  0000 (0)\n+5F1D85 Compression Method    0000 (0) 'Stored'\n+5F1D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1D8B CRC                   00000000 (0)\n+5F1D8F Compressed Size       00000000 (0)\n+5F1D93 Uncompressed Size     00000000 (0)\n+5F1D97 Filename Length       0032 (50)\n+5F1D99 Extra Length          0009 (9)\n+5F1D9B Comment Length        0000 (0)\n+5F1D9D Disk Start            0000 (0)\n+5F1D9F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1DA1 Ext File Attributes   00000000 (0)\n+5F1DA5 Local Header Offset   0002DEF7 (188151)\n+5F1DA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1DA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1DDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1DDD   Length              0005 (5)\n+5F1DDF   Flags               01 (1) 'Modification'\n+5F1DE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1DE4 CENTRAL HEADER #76    02014B50 (33639248)\n+5F1DE8 Created Zip Spec      14 (20) '2.0'\n+5F1DE9 Created OS            00 (0) 'MS-DOS'\n+5F1DEA Extract Zip Spec      14 (20) '2.0'\n+5F1DEB Extract OS            00 (0) 'MS-DOS'\n+5F1DEC General Purpose Flag  0000 (0)\n+5F1DEE Compression Method    0000 (0) 'Stored'\n+5F1DF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1DF4 CRC                   00000000 (0)\n+5F1DF8 Compressed Size       00000000 (0)\n+5F1DFC Uncompressed Size     00000000 (0)\n+5F1E00 Filename Length       0079 (121)\n+5F1E02 Extra Length          0009 (9)\n+5F1E04 Comment Length        0000 (0)\n+5F1E06 Disk Start            0000 (0)\n+5F1E08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1E0A Ext File Attributes   00000000 (0)\n+5F1E0E Local Header Offset   0002DF50 (188240)\n+5F1E12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1E12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1E8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1E8D   Length              0005 (5)\n+5F1E8F   Flags               01 (1) 'Modification'\n+5F1E90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1E94 CENTRAL HEADER #77    02014B50 (33639248)\n+5F1E98 Created Zip Spec      14 (20) '2.0'\n+5F1E99 Created OS            00 (0) 'MS-DOS'\n+5F1E9A Extract Zip Spec      14 (20) '2.0'\n+5F1E9B Extract OS            00 (0) 'MS-DOS'\n+5F1E9C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F1E9E Compression Method    0000 (0) 'Stored'\n+5F1EA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1EA4 CRC                   164EC61D (374261277)\n+5F1EA8 Compressed Size       00000B15 (2837)\n+5F1EAC Uncompressed Size     00000B15 (2837)\n+5F1EB0 Filename Length       008F (143)\n+5F1EB2 Extra Length          0009 (9)\n+5F1EB4 Comment Length        0000 (0)\n+5F1EB6 Disk Start            0000 (0)\n+5F1EB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1EBA Ext File Attributes   00000000 (0)\n+5F1EBE Local Header Offset   0002DFF0 (188400)\n+5F1EC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F15F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1685 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1687   Length              0005 (5)\n-5F1689   Flags               01 (1) 'Modification'\n-5F168A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F168E CENTRAL HEADER #148   02014B50 (33639248)\n-5F1692 Created Zip Spec      14 (20) '2.0'\n-5F1693 Created OS            00 (0) 'MS-DOS'\n-5F1694 Extract Zip Spec      14 (20) '2.0'\n-5F1695 Extract OS            00 (0) 'MS-DOS'\n-5F1696 General Purpose Flag  0000 (0)\n-5F1698 Compression Method    0000 (0) 'Stored'\n-5F169A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F169E CRC                   00000000 (0)\n-5F16A2 Compressed Size       00000000 (0)\n-5F16A6 Uncompressed Size     00000000 (0)\n-5F16AA Filename Length       0074 (116)\n-5F16AC Extra Length          0009 (9)\n-5F16AE Comment Length        0000 (0)\n-5F16B0 Disk Start            0000 (0)\n-5F16B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F16B4 Ext File Attributes   00000000 (0)\n-5F16B8 Local Header Offset   000415F9 (267769)\n-5F16BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F16BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1732   Length              0005 (5)\n-5F1734   Flags               01 (1) 'Modification'\n-5F1735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1739 CENTRAL HEADER #149   02014B50 (33639248)\n-5F173D Created Zip Spec      14 (20) '2.0'\n-5F173E Created OS            00 (0) 'MS-DOS'\n-5F173F Extract Zip Spec      14 (20) '2.0'\n-5F1740 Extract OS            00 (0) 'MS-DOS'\n-5F1741 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1743 Compression Method    0000 (0) 'Stored'\n-5F1745 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1749 CRC                   042BB565 (69973349)\n-5F174D Compressed Size       00001364 (4964)\n-5F1751 Uncompressed Size     00001364 (4964)\n-5F1755 Filename Length       008A (138)\n-5F1757 Extra Length          0009 (9)\n-5F1759 Comment Length        0000 (0)\n-5F175B Disk Start            0000 (0)\n-5F175D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F175F Ext File Attributes   00000000 (0)\n-5F1763 Local Header Offset   00041694 (267924)\n-5F1767 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXX'\n-#\n-# WARNING: Offset 0x5F1767: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F17F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F17F3   Length              0005 (5)\n-5F17F5   Flags               01 (1) 'Modification'\n-5F17F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F17FA CENTRAL HEADER #150   02014B50 (33639248)\n-5F17FE Created Zip Spec      14 (20) '2.0'\n-5F17FF Created OS            00 (0) 'MS-DOS'\n-5F1800 Extract Zip Spec      14 (20) '2.0'\n-5F1801 Extract OS            00 (0) 'MS-DOS'\n-5F1802 General Purpose Flag  0000 (0)\n-5F1804 Compression Method    0000 (0) 'Stored'\n-5F1806 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F180A CRC                   00000000 (0)\n-5F180E Compressed Size       00000000 (0)\n-5F1812 Uncompressed Size     00000000 (0)\n-5F1816 Filename Length       0075 (117)\n-5F1818 Extra Length          0009 (9)\n-5F181A Comment Length        0000 (0)\n-5F181C Disk Start            0000 (0)\n-5F181E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1820 Ext File Attributes   00000000 (0)\n-5F1824 Local Header Offset   00042AB9 (273081)\n-5F1828 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1828: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F189D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F189F   Length              0005 (5)\n-5F18A1   Flags               01 (1) 'Modification'\n-5F18A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F18A6 CENTRAL HEADER #151   02014B50 (33639248)\n-5F18AA Created Zip Spec      14 (20) '2.0'\n-5F18AB Created OS            00 (0) 'MS-DOS'\n-5F18AC Extract Zip Spec      14 (20) '2.0'\n-5F18AD Extract OS            00 (0) 'MS-DOS'\n-5F18AE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F18B0 Compression Method    0000 (0) 'Stored'\n-5F18B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F18B6 CRC                   7A63232B (2053317419)\n-5F18BA Compressed Size       000013C0 (5056)\n-5F18BE Uncompressed Size     000013C0 (5056)\n-5F18C2 Filename Length       008B (139)\n-5F18C4 Extra Length          0009 (9)\n-5F18C6 Comment Length        0000 (0)\n-5F18C8 Disk Start            0000 (0)\n-5F18CA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F18CC Ext File Attributes   00000000 (0)\n-5F18D0 Local Header Offset   00042B55 (273237)\n-5F18D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXX'\n-#\n-# WARNING: Offset 0x5F18D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F1EC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F195F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1961   Length              0005 (5)\n-5F1963   Flags               01 (1) 'Modification'\n-5F1964   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1968 CENTRAL HEADER #152   02014B50 (33639248)\n-5F196C Created Zip Spec      14 (20) '2.0'\n-5F196D Created OS            00 (0) 'MS-DOS'\n-5F196E Extract Zip Spec      14 (20) '2.0'\n-5F196F Extract OS            00 (0) 'MS-DOS'\n-5F1970 General Purpose Flag  0000 (0)\n-5F1972 Compression Method    0000 (0) 'Stored'\n-5F1974 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1978 CRC                   00000000 (0)\n-5F197C Compressed Size       00000000 (0)\n-5F1980 Uncompressed Size     00000000 (0)\n-5F1984 Filename Length       0026 (38)\n-5F1986 Extra Length          0009 (9)\n-5F1988 Comment Length        0000 (0)\n-5F198A Disk Start            0000 (0)\n-5F198C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F198E Ext File Attributes   00000000 (0)\n-5F1992 Local Header Offset   00043FD7 (278487)\n-5F1996 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1996: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F19BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F19BE   Length              0005 (5)\n-5F19C0   Flags               01 (1) 'Modification'\n-5F19C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F19C5 CENTRAL HEADER #153   02014B50 (33639248)\n-5F19C9 Created Zip Spec      14 (20) '2.0'\n-5F19CA Created OS            00 (0) 'MS-DOS'\n-5F19CB Extract Zip Spec      14 (20) '2.0'\n-5F19CC Extract OS            00 (0) 'MS-DOS'\n-5F19CD General Purpose Flag  0000 (0)\n-5F19CF Compression Method    0000 (0) 'Stored'\n-5F19D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F19D5 CRC                   00000000 (0)\n-5F19D9 Compressed Size       00000000 (0)\n-5F19DD Uncompressed Size     00000000 (0)\n-5F19E1 Filename Length       002D (45)\n-5F19E3 Extra Length          0009 (9)\n-5F19E5 Comment Length        0000 (0)\n-5F19E7 Disk Start            0000 (0)\n-5F19E9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F19EB Ext File Attributes   00000000 (0)\n-5F19EF Local Header Offset   00044024 (278564)\n-5F19F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F19F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1A20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1A22   Length              0005 (5)\n-5F1A24   Flags               01 (1) 'Modification'\n-5F1A25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1A29 CENTRAL HEADER #154   02014B50 (33639248)\n-5F1A2D Created Zip Spec      14 (20) '2.0'\n-5F1A2E Created OS            00 (0) 'MS-DOS'\n-5F1A2F Extract Zip Spec      14 (20) '2.0'\n-5F1A30 Extract OS            00 (0) 'MS-DOS'\n-5F1A31 General Purpose Flag  0000 (0)\n-5F1A33 Compression Method    0000 (0) 'Stored'\n-5F1A35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1A39 CRC                   00000000 (0)\n-5F1A3D Compressed Size       00000000 (0)\n-5F1A41 Uncompressed Size     00000000 (0)\n-5F1A45 Filename Length       005E (94)\n-5F1A47 Extra Length          0009 (9)\n-5F1A49 Comment Length        0000 (0)\n-5F1A4B Disk Start            0000 (0)\n-5F1A4D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1A4F Ext File Attributes   00000000 (0)\n-5F1A53 Local Header Offset   00044078 (278648)\n-5F1A57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1A57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1AB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1AB7   Length              0005 (5)\n-5F1AB9   Flags               01 (1) 'Modification'\n-5F1ABA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1ABE CENTRAL HEADER #155   02014B50 (33639248)\n-5F1AC2 Created Zip Spec      14 (20) '2.0'\n-5F1AC3 Created OS            00 (0) 'MS-DOS'\n-5F1AC4 Extract Zip Spec      14 (20) '2.0'\n-5F1AC5 Extract OS            00 (0) 'MS-DOS'\n-5F1AC6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1AC8 Compression Method    0000 (0) 'Stored'\n-5F1ACA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1ACE CRC                   19888393 (428376979)\n-5F1AD2 Compressed Size       0000092E (2350)\n-5F1AD6 Uncompressed Size     0000092E (2350)\n-5F1ADA Filename Length       0074 (116)\n-5F1ADC Extra Length          0009 (9)\n-5F1ADE Comment Length        0000 (0)\n-5F1AE0 Disk Start            0000 (0)\n-5F1AE2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1AE4 Ext File Attributes   00000000 (0)\n-5F1AE8 Local Header Offset   000440FD (278781)\n-5F1AEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1AEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1B60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1B62   Length              0005 (5)\n-5F1B64   Flags               01 (1) 'Modification'\n-5F1B65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1B69 CENTRAL HEADER #156   02014B50 (33639248)\n-5F1B6D Created Zip Spec      14 (20) '2.0'\n-5F1B6E Created OS            00 (0) 'MS-DOS'\n-5F1B6F Extract Zip Spec      14 (20) '2.0'\n-5F1B70 Extract OS            00 (0) 'MS-DOS'\n-5F1B71 General Purpose Flag  0000 (0)\n-5F1B73 Compression Method    0000 (0) 'Stored'\n-5F1B75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1B79 CRC                   00000000 (0)\n-5F1B7D Compressed Size       00000000 (0)\n-5F1B81 Uncompressed Size     00000000 (0)\n-5F1B85 Filename Length       0026 (38)\n-5F1B87 Extra Length          0009 (9)\n-5F1B89 Comment Length        0000 (0)\n-5F1B8B Disk Start            0000 (0)\n-5F1B8D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1B8F Ext File Attributes   00000000 (0)\n-5F1B93 Local Header Offset   00044AD6 (281302)\n-5F1B97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1B97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1BBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1BBF   Length              0005 (5)\n-5F1BC1   Flags               01 (1) 'Modification'\n-5F1BC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1BC6 CENTRAL HEADER #157   02014B50 (33639248)\n-5F1BCA Created Zip Spec      14 (20) '2.0'\n-5F1BCB Created OS            00 (0) 'MS-DOS'\n-5F1BCC Extract Zip Spec      14 (20) '2.0'\n-5F1BCD Extract OS            00 (0) 'MS-DOS'\n-5F1BCE General Purpose Flag  0000 (0)\n-5F1BD0 Compression Method    0000 (0) 'Stored'\n-5F1BD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1BD6 CRC                   00000000 (0)\n-5F1BDA Compressed Size       00000000 (0)\n-5F1BDE Uncompressed Size     00000000 (0)\n-5F1BE2 Filename Length       002D (45)\n-5F1BE4 Extra Length          0009 (9)\n-5F1BE6 Comment Length        0000 (0)\n-5F1BE8 Disk Start            0000 (0)\n-5F1BEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1BEC Ext File Attributes   00000000 (0)\n-5F1BF0 Local Header Offset   00044B23 (281379)\n-5F1BF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1BF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1C21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1C23   Length              0005 (5)\n-5F1C25   Flags               01 (1) 'Modification'\n-5F1C26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1C2A CENTRAL HEADER #158   02014B50 (33639248)\n-5F1C2E Created Zip Spec      14 (20) '2.0'\n-5F1C2F Created OS            00 (0) 'MS-DOS'\n-5F1C30 Extract Zip Spec      14 (20) '2.0'\n-5F1C31 Extract OS            00 (0) 'MS-DOS'\n-5F1C32 General Purpose Flag  0000 (0)\n-5F1C34 Compression Method    0000 (0) 'Stored'\n-5F1C36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1C3A CRC                   00000000 (0)\n-5F1C3E Compressed Size       00000000 (0)\n-5F1C42 Uncompressed Size     00000000 (0)\n-5F1C46 Filename Length       0064 (100)\n-5F1C48 Extra Length          0009 (9)\n-5F1C4A Comment Length        0000 (0)\n-5F1C4C Disk Start            0000 (0)\n-5F1C4E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1C50 Ext File Attributes   00000000 (0)\n-5F1C54 Local Header Offset   00044B77 (281463)\n-5F1C58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1C58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1CBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1CBE   Length              0005 (5)\n-5F1CC0   Flags               01 (1) 'Modification'\n-5F1CC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1CC5 CENTRAL HEADER #159   02014B50 (33639248)\n-5F1CC9 Created Zip Spec      14 (20) '2.0'\n-5F1CCA Created OS            00 (0) 'MS-DOS'\n-5F1CCB Extract Zip Spec      14 (20) '2.0'\n-5F1CCC Extract OS            00 (0) 'MS-DOS'\n-5F1CCD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1CCF Compression Method    0000 (0) 'Stored'\n-5F1CD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1CD5 CRC                   8B1E3BB7 (2334014391)\n-5F1CD9 Compressed Size       00002091 (8337)\n-5F1CDD Uncompressed Size     00002091 (8337)\n-5F1CE1 Filename Length       007A (122)\n-5F1CE3 Extra Length          0009 (9)\n-5F1CE5 Comment Length        0000 (0)\n-5F1CE7 Disk Start            0000 (0)\n-5F1CE9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1CEB Ext File Attributes   00000000 (0)\n-5F1CEF Local Header Offset   00044C02 (281602)\n-5F1CF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1CF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1D6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1D6F   Length              0005 (5)\n-5F1D71   Flags               01 (1) 'Modification'\n-5F1D72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1D76 CENTRAL HEADER #160   02014B50 (33639248)\n-5F1D7A Created Zip Spec      14 (20) '2.0'\n-5F1D7B Created OS            00 (0) 'MS-DOS'\n-5F1D7C Extract Zip Spec      14 (20) '2.0'\n-5F1D7D Extract OS            00 (0) 'MS-DOS'\n-5F1D7E General Purpose Flag  0000 (0)\n-5F1D80 Compression Method    0000 (0) 'Stored'\n-5F1D82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1D86 CRC                   00000000 (0)\n-5F1D8A Compressed Size       00000000 (0)\n-5F1D8E Uncompressed Size     00000000 (0)\n-5F1D92 Filename Length       0025 (37)\n-5F1D94 Extra Length          0009 (9)\n-5F1D96 Comment Length        0000 (0)\n-5F1D98 Disk Start            0000 (0)\n-5F1D9A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1D9C Ext File Attributes   00000000 (0)\n-5F1DA0 Local Header Offset   00046D44 (290116)\n-5F1DA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1DA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1DC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1DCB   Length              0005 (5)\n-5F1DCD   Flags               01 (1) 'Modification'\n-5F1DCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1DD2 CENTRAL HEADER #161   02014B50 (33639248)\n-5F1DD6 Created Zip Spec      14 (20) '2.0'\n-5F1DD7 Created OS            00 (0) 'MS-DOS'\n-5F1DD8 Extract Zip Spec      14 (20) '2.0'\n-5F1DD9 Extract OS            00 (0) 'MS-DOS'\n-5F1DDA General Purpose Flag  0000 (0)\n-5F1DDC Compression Method    0000 (0) 'Stored'\n-5F1DDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1DE2 CRC                   00000000 (0)\n-5F1DE6 Compressed Size       00000000 (0)\n-5F1DEA Uncompressed Size     00000000 (0)\n-5F1DEE Filename Length       002C (44)\n-5F1DF0 Extra Length          0009 (9)\n-5F1DF2 Comment Length        0000 (0)\n-5F1DF4 Disk Start            0000 (0)\n-5F1DF6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1DF8 Ext File Attributes   00000000 (0)\n-5F1DFC Local Header Offset   00046D90 (290192)\n-5F1E00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1E00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1E2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1E2E   Length              0005 (5)\n-5F1E30   Flags               01 (1) 'Modification'\n-5F1E31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1E35 CENTRAL HEADER #162   02014B50 (33639248)\n-5F1E39 Created Zip Spec      14 (20) '2.0'\n-5F1E3A Created OS            00 (0) 'MS-DOS'\n-5F1E3B Extract Zip Spec      14 (20) '2.0'\n-5F1E3C Extract OS            00 (0) 'MS-DOS'\n-5F1E3D General Purpose Flag  0000 (0)\n-5F1E3F Compression Method    0000 (0) 'Stored'\n-5F1E41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1E45 CRC                   00000000 (0)\n-5F1E49 Compressed Size       00000000 (0)\n-5F1E4D Uncompressed Size     00000000 (0)\n-5F1E51 Filename Length       0067 (103)\n-5F1E53 Extra Length          0009 (9)\n-5F1E55 Comment Length        0000 (0)\n-5F1E57 Disk Start            0000 (0)\n-5F1E59 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1E5B Ext File Attributes   00000000 (0)\n-5F1E5F Local Header Offset   00046DE3 (290275)\n-5F1E63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1E63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1ECA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1ECC   Length              0005 (5)\n-5F1ECE   Flags               01 (1) 'Modification'\n-5F1ECF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1ED3 CENTRAL HEADER #163   02014B50 (33639248)\n-5F1ED7 Created Zip Spec      14 (20) '2.0'\n-5F1ED8 Created OS            00 (0) 'MS-DOS'\n-5F1ED9 Extract Zip Spec      14 (20) '2.0'\n-5F1EDA Extract OS            00 (0) 'MS-DOS'\n-5F1EDB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F1EDD Compression Method    0000 (0) 'Stored'\n-5F1EDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1EE3 CRC                   EAE74E6F (3941027439)\n-5F1EE7 Compressed Size       00001481 (5249)\n-5F1EEB Uncompressed Size     00001481 (5249)\n-5F1EEF Filename Length       007D (125)\n-5F1EF1 Extra Length          0009 (9)\n-5F1EF3 Comment Length        0000 (0)\n-5F1EF5 Disk Start            0000 (0)\n-5F1EF7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1EF9 Ext File Attributes   00000000 (0)\n-5F1EFD Local Header Offset   00046E71 (290417)\n-5F1F01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F1F01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F1F7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F1F80   Length              0005 (5)\n-5F1F82   Flags               01 (1) 'Modification'\n-5F1F83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F1F87 CENTRAL HEADER #164   02014B50 (33639248)\n-5F1F8B Created Zip Spec      14 (20) '2.0'\n-5F1F8C Created OS            00 (0) 'MS-DOS'\n-5F1F8D Extract Zip Spec      14 (20) '2.0'\n-5F1F8E Extract OS            00 (0) 'MS-DOS'\n-5F1F8F General Purpose Flag  0000 (0)\n-5F1F91 Compression Method    0000 (0) 'Stored'\n-5F1F93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F1F97 CRC                   00000000 (0)\n-5F1F9B Compressed Size       00000000 (0)\n-5F1F9F Uncompressed Size     00000000 (0)\n-5F1FA3 Filename Length       0057 (87)\n-5F1FA5 Extra Length          0009 (9)\n-5F1FA7 Comment Length        0000 (0)\n-5F1FA9 Disk Start            0000 (0)\n-5F1FAB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F1FAD Ext File Attributes   00000000 (0)\n-5F1FB1 Local Header Offset   000483A6 (295846)\n-5F1FB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F1F51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1F53   Length              0005 (5)\n+5F1F55   Flags               01 (1) 'Modification'\n+5F1F56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1F5A CENTRAL HEADER #78    02014B50 (33639248)\n+5F1F5E Created Zip Spec      14 (20) '2.0'\n+5F1F5F Created OS            00 (0) 'MS-DOS'\n+5F1F60 Extract Zip Spec      14 (20) '2.0'\n+5F1F61 Extract OS            00 (0) 'MS-DOS'\n+5F1F62 General Purpose Flag  0000 (0)\n+5F1F64 Compression Method    0000 (0) 'Stored'\n+5F1F66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1F6A CRC                   00000000 (0)\n+5F1F6E Compressed Size       00000000 (0)\n+5F1F72 Uncompressed Size     00000000 (0)\n+5F1F76 Filename Length       0023 (35)\n+5F1F78 Extra Length          0009 (9)\n+5F1F7A Comment Length        0000 (0)\n+5F1F7C Disk Start            0000 (0)\n+5F1F7E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1F80 Ext File Attributes   00000000 (0)\n+5F1F84 Local Header Offset   0002EBCB (191435)\n+5F1F88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F1F88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F1FAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F1FAD   Length              0005 (5)\n+5F1FAF   Flags               01 (1) 'Modification'\n+5F1FB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F1FB4 CENTRAL HEADER #79    02014B50 (33639248)\n+5F1FB8 Created Zip Spec      14 (20) '2.0'\n+5F1FB9 Created OS            00 (0) 'MS-DOS'\n+5F1FBA Extract Zip Spec      14 (20) '2.0'\n+5F1FBB Extract OS            00 (0) 'MS-DOS'\n+5F1FBC General Purpose Flag  0000 (0)\n+5F1FBE Compression Method    0000 (0) 'Stored'\n+5F1FC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F1FC4 CRC                   00000000 (0)\n+5F1FC8 Compressed Size       00000000 (0)\n+5F1FCC Uncompressed Size     00000000 (0)\n+5F1FD0 Filename Length       002A (42)\n+5F1FD2 Extra Length          0009 (9)\n+5F1FD4 Comment Length        0000 (0)\n+5F1FD6 Disk Start            0000 (0)\n+5F1FD8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F1FDA Ext File Attributes   00000000 (0)\n+5F1FDE Local Header Offset   0002EC15 (191509)\n+5F1FE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F1FB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F1FE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5F200C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5F200E   Length              0005 (5)\n 5F2010   Flags               01 (1) 'Modification'\n 5F2011   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5F2015 CENTRAL HEADER #165   02014B50 (33639248)\n+5F2015 CENTRAL HEADER #80    02014B50 (33639248)\n 5F2019 Created Zip Spec      14 (20) '2.0'\n 5F201A Created OS            00 (0) 'MS-DOS'\n 5F201B Extract Zip Spec      14 (20) '2.0'\n 5F201C Extract OS            00 (0) 'MS-DOS'\n-5F201D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n+5F201D General Purpose Flag  0000 (0)\n 5F201F Compression Method    0000 (0) 'Stored'\n 5F2021 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2025 CRC                   49F8AFD7 (1241034711)\n-5F2029 Compressed Size       000025C9 (9673)\n-5F202D Uncompressed Size     000025C9 (9673)\n-5F2031 Filename Length       006D (109)\n+5F2025 CRC                   00000000 (0)\n+5F2029 Compressed Size       00000000 (0)\n+5F202D Uncompressed Size     00000000 (0)\n+5F2031 Filename Length       0060 (96)\n 5F2033 Extra Length          0009 (9)\n 5F2035 Comment Length        0000 (0)\n 5F2037 Disk Start            0000 (0)\n 5F2039 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5F203B Ext File Attributes   00000000 (0)\n-5F203F Local Header Offset   00048424 (295972)\n-5F2043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n+5F203F Local Header Offset   0002EC66 (191590)\n+5F2043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-5F20B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F20B2   Length              0005 (5)\n-5F20B4   Flags               01 (1) 'Modification'\n-5F20B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F20B9 CENTRAL HEADER #166   02014B50 (33639248)\n-5F20BD Created Zip Spec      14 (20) '2.0'\n-5F20BE Created OS            00 (0) 'MS-DOS'\n-5F20BF Extract Zip Spec      14 (20) '2.0'\n-5F20C0 Extract OS            00 (0) 'MS-DOS'\n-5F20C1 General Purpose Flag  0000 (0)\n-5F20C3 Compression Method    0000 (0) 'Stored'\n-5F20C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F20C9 CRC                   00000000 (0)\n-5F20CD Compressed Size       00000000 (0)\n-5F20D1 Uncompressed Size     00000000 (0)\n-5F20D5 Filename Length       0056 (86)\n-5F20D7 Extra Length          0009 (9)\n-5F20D9 Comment Length        0000 (0)\n-5F20DB Disk Start            0000 (0)\n-5F20DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F20DF Ext File Attributes   00000000 (0)\n-5F20E3 Local Header Offset   0004AA91 (305809)\n-5F20E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F20E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F213D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F213F   Length              0005 (5)\n-5F2141   Flags               01 (1) 'Modification'\n-5F2142   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2146 CENTRAL HEADER #167   02014B50 (33639248)\n-5F214A Created Zip Spec      14 (20) '2.0'\n-5F214B Created OS            00 (0) 'MS-DOS'\n-5F214C Extract Zip Spec      14 (20) '2.0'\n-5F214D Extract OS            00 (0) 'MS-DOS'\n-5F214E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2150 Compression Method    0000 (0) 'Stored'\n-5F2152 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2156 CRC                   332580F8 (858095864)\n-5F215A Compressed Size       00000E10 (3600)\n-5F215E Uncompressed Size     00000E10 (3600)\n-5F2162 Filename Length       006C (108)\n-5F2164 Extra Length          0009 (9)\n-5F2166 Comment Length        0000 (0)\n-5F2168 Disk Start            0000 (0)\n-5F216A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F216C Ext File Attributes   00000000 (0)\n-5F2170 Local Header Offset   0004AB0E (305934)\n-5F2174 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2174: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F21E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F21E2   Length              0005 (5)\n-5F21E4   Flags               01 (1) 'Modification'\n-5F21E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F21E9 CENTRAL HEADER #168   02014B50 (33639248)\n-5F21ED Created Zip Spec      14 (20) '2.0'\n-5F21EE Created OS            00 (0) 'MS-DOS'\n-5F21EF Extract Zip Spec      14 (20) '2.0'\n-5F21F0 Extract OS            00 (0) 'MS-DOS'\n-5F21F1 General Purpose Flag  0000 (0)\n-5F21F3 Compression Method    0000 (0) 'Stored'\n-5F21F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F21F9 CRC                   00000000 (0)\n-5F21FD Compressed Size       00000000 (0)\n-5F2201 Uncompressed Size     00000000 (0)\n-5F2205 Filename Length       002E (46)\n-5F2207 Extra Length          0009 (9)\n-5F2209 Comment Length        0000 (0)\n-5F220B Disk Start            0000 (0)\n-5F220D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F220F Ext File Attributes   00000000 (0)\n-5F2213 Local Header Offset   0004B9C1 (309697)\n-5F2217 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2217: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2245 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2247   Length              0005 (5)\n-5F2249   Flags               01 (1) 'Modification'\n-5F224A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F224E CENTRAL HEADER #169   02014B50 (33639248)\n-5F2252 Created Zip Spec      14 (20) '2.0'\n-5F2253 Created OS            00 (0) 'MS-DOS'\n-5F2254 Extract Zip Spec      14 (20) '2.0'\n-5F2255 Extract OS            00 (0) 'MS-DOS'\n-5F2256 General Purpose Flag  0000 (0)\n-5F2258 Compression Method    0000 (0) 'Stored'\n-5F225A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F225E CRC                   00000000 (0)\n-5F2262 Compressed Size       00000000 (0)\n-5F2266 Uncompressed Size     00000000 (0)\n-5F226A Filename Length       0035 (53)\n-5F226C Extra Length          0009 (9)\n-5F226E Comment Length        0000 (0)\n-5F2270 Disk Start            0000 (0)\n-5F2272 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2274 Ext File Attributes   00000000 (0)\n-5F2278 Local Header Offset   0004BA16 (309782)\n-5F227C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F227C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F22B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F22B3   Length              0005 (5)\n-5F22B5   Flags               01 (1) 'Modification'\n-5F22B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F22BA CENTRAL HEADER #170   02014B50 (33639248)\n-5F22BE Created Zip Spec      14 (20) '2.0'\n-5F22BF Created OS            00 (0) 'MS-DOS'\n-5F22C0 Extract Zip Spec      14 (20) '2.0'\n-5F22C1 Extract OS            00 (0) 'MS-DOS'\n-5F22C2 General Purpose Flag  0000 (0)\n-5F22C4 Compression Method    0000 (0) 'Stored'\n-5F22C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F22CA CRC                   00000000 (0)\n-5F22CE Compressed Size       00000000 (0)\n-5F22D2 Uncompressed Size     00000000 (0)\n-5F22D6 Filename Length       0079 (121)\n-5F22D8 Extra Length          0009 (9)\n-5F22DA Comment Length        0000 (0)\n-5F22DC Disk Start            0000 (0)\n-5F22DE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F22E0 Ext File Attributes   00000000 (0)\n-5F22E4 Local Header Offset   0004BA72 (309874)\n-5F22E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F22E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2361 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2363   Length              0005 (5)\n-5F2365   Flags               01 (1) 'Modification'\n-5F2366   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F236A CENTRAL HEADER #171   02014B50 (33639248)\n-5F236E Created Zip Spec      14 (20) '2.0'\n-5F236F Created OS            00 (0) 'MS-DOS'\n-5F2370 Extract Zip Spec      14 (20) '2.0'\n-5F2371 Extract OS            00 (0) 'MS-DOS'\n-5F2372 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2374 Compression Method    0000 (0) 'Stored'\n-5F2376 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F237A CRC                   0D142FFC (219426812)\n-5F237E Compressed Size       00001A7B (6779)\n-5F2382 Uncompressed Size     00001A7B (6779)\n-5F2386 Filename Length       008F (143)\n-5F2388 Extra Length          0009 (9)\n-5F238A Comment Length        0000 (0)\n-5F238C Disk Start            0000 (0)\n-5F238E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2390 Ext File Attributes   00000000 (0)\n-5F2394 Local Header Offset   0004BB12 (310034)\n-5F2398 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2398: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F2043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F2427 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2429   Length              0005 (5)\n-5F242B   Flags               01 (1) 'Modification'\n-5F242C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2430 CENTRAL HEADER #172   02014B50 (33639248)\n-5F2434 Created Zip Spec      14 (20) '2.0'\n-5F2435 Created OS            00 (0) 'MS-DOS'\n-5F2436 Extract Zip Spec      14 (20) '2.0'\n-5F2437 Extract OS            00 (0) 'MS-DOS'\n-5F2438 General Purpose Flag  0000 (0)\n-5F243A Compression Method    0000 (0) 'Stored'\n-5F243C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2440 CRC                   00000000 (0)\n-5F2444 Compressed Size       00000000 (0)\n-5F2448 Uncompressed Size     00000000 (0)\n-5F244C Filename Length       0031 (49)\n-5F244E Extra Length          0009 (9)\n-5F2450 Comment Length        0000 (0)\n-5F2452 Disk Start            0000 (0)\n-5F2454 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2456 Ext File Attributes   00000000 (0)\n-5F245A Local Header Offset   0004D653 (317011)\n-5F245E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F245E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F248F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2491   Length              0005 (5)\n-5F2493   Flags               01 (1) 'Modification'\n-5F2494   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2498 CENTRAL HEADER #173   02014B50 (33639248)\n-5F249C Created Zip Spec      14 (20) '2.0'\n-5F249D Created OS            00 (0) 'MS-DOS'\n-5F249E Extract Zip Spec      14 (20) '2.0'\n-5F249F Extract OS            00 (0) 'MS-DOS'\n-5F24A0 General Purpose Flag  0000 (0)\n-5F24A2 Compression Method    0000 (0) 'Stored'\n-5F24A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F24A8 CRC                   00000000 (0)\n-5F24AC Compressed Size       00000000 (0)\n-5F24B0 Uncompressed Size     00000000 (0)\n-5F24B4 Filename Length       0038 (56)\n-5F24B6 Extra Length          0009 (9)\n-5F24B8 Comment Length        0000 (0)\n-5F24BA Disk Start            0000 (0)\n-5F24BC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F24BE Ext File Attributes   00000000 (0)\n-5F24C2 Local Header Offset   0004D6AB (317099)\n-5F24C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F24C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F24FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2500   Length              0005 (5)\n-5F2502   Flags               01 (1) 'Modification'\n-5F2503   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2507 CENTRAL HEADER #174   02014B50 (33639248)\n-5F250B Created Zip Spec      14 (20) '2.0'\n-5F250C Created OS            00 (0) 'MS-DOS'\n-5F250D Extract Zip Spec      14 (20) '2.0'\n-5F250E Extract OS            00 (0) 'MS-DOS'\n-5F250F General Purpose Flag  0000 (0)\n-5F2511 Compression Method    0000 (0) 'Stored'\n-5F2513 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2517 CRC                   00000000 (0)\n-5F251B Compressed Size       00000000 (0)\n-5F251F Uncompressed Size     00000000 (0)\n-5F2523 Filename Length       007F (127)\n-5F2525 Extra Length          0009 (9)\n-5F2527 Comment Length        0000 (0)\n-5F2529 Disk Start            0000 (0)\n-5F252B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F252D Ext File Attributes   00000000 (0)\n-5F2531 Local Header Offset   0004D70A (317194)\n-5F2535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F25B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F25B6   Length              0005 (5)\n-5F25B8   Flags               01 (1) 'Modification'\n-5F25B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F25BD CENTRAL HEADER #175   02014B50 (33639248)\n-5F25C1 Created Zip Spec      14 (20) '2.0'\n-5F25C2 Created OS            00 (0) 'MS-DOS'\n-5F25C3 Extract Zip Spec      14 (20) '2.0'\n-5F25C4 Extract OS            00 (0) 'MS-DOS'\n-5F25C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F25C7 Compression Method    0000 (0) 'Stored'\n-5F25C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F25CD CRC                   726CFBF2 (1919745010)\n-5F25D1 Compressed Size       00000886 (2182)\n-5F25D5 Uncompressed Size     00000886 (2182)\n-5F25D9 Filename Length       0095 (149)\n-5F25DB Extra Length          0009 (9)\n-5F25DD Comment Length        0000 (0)\n-5F25DF Disk Start            0000 (0)\n-5F25E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F25E3 Ext File Attributes   00000000 (0)\n-5F25E7 Local Header Offset   0004D7B0 (317360)\n-5F25EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F25EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2682   Length              0005 (5)\n-5F2684   Flags               01 (1) 'Modification'\n-5F2685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2689 CENTRAL HEADER #176   02014B50 (33639248)\n-5F268D Created Zip Spec      14 (20) '2.0'\n-5F268E Created OS            00 (0) 'MS-DOS'\n-5F268F Extract Zip Spec      14 (20) '2.0'\n-5F2690 Extract OS            00 (0) 'MS-DOS'\n-5F2691 General Purpose Flag  0000 (0)\n-5F2693 Compression Method    0000 (0) 'Stored'\n-5F2695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2699 CRC                   00000000 (0)\n-5F269D Compressed Size       00000000 (0)\n-5F26A1 Uncompressed Size     00000000 (0)\n-5F26A5 Filename Length       0086 (134)\n-5F26A7 Extra Length          0009 (9)\n-5F26A9 Comment Length        0000 (0)\n-5F26AB Disk Start            0000 (0)\n-5F26AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F26AF Ext File Attributes   00000000 (0)\n-5F26B3 Local Header Offset   0004E102 (319746)\n-5F26B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XX'\n-#\n-# WARNING: Offset 0x5F26B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F273D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F273F   Length              0005 (5)\n-5F2741   Flags               01 (1) 'Modification'\n-5F2742   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2746 CENTRAL HEADER #177   02014B50 (33639248)\n-5F274A Created Zip Spec      14 (20) '2.0'\n-5F274B Created OS            00 (0) 'MS-DOS'\n-5F274C Extract Zip Spec      14 (20) '2.0'\n-5F274D Extract OS            00 (0) 'MS-DOS'\n-5F274E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2750 Compression Method    0000 (0) 'Stored'\n-5F2752 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2756 CRC                   0124A640 (19179072)\n-5F275A Compressed Size       00001071 (4209)\n-5F275E Uncompressed Size     00001071 (4209)\n-5F2762 Filename Length       009C (156)\n-5F2764 Extra Length          0009 (9)\n-5F2766 Comment Length        0000 (0)\n-5F2768 Disk Start            0000 (0)\n-5F276A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F276C Ext File Attributes   00000000 (0)\n-5F2770 Local Header Offset   0004E1AF (319919)\n-5F2774 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2774: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2810 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2812   Length              0005 (5)\n-5F2814   Flags               01 (1) 'Modification'\n-5F2815   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2819 CENTRAL HEADER #178   02014B50 (33639248)\n-5F281D Created Zip Spec      14 (20) '2.0'\n-5F281E Created OS            00 (0) 'MS-DOS'\n-5F281F Extract Zip Spec      14 (20) '2.0'\n-5F2820 Extract OS            00 (0) 'MS-DOS'\n-5F2821 General Purpose Flag  0000 (0)\n-5F2823 Compression Method    0000 (0) 'Stored'\n-5F2825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2829 CRC                   00000000 (0)\n-5F282D Compressed Size       00000000 (0)\n-5F2831 Uncompressed Size     00000000 (0)\n-5F2835 Filename Length       0086 (134)\n-5F2837 Extra Length          0009 (9)\n-5F2839 Comment Length        0000 (0)\n-5F283B Disk Start            0000 (0)\n-5F283D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F283F Ext File Attributes   00000000 (0)\n-5F2843 Local Header Offset   0004F2F3 (324339)\n-5F2847 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XX'\n-#\n-# WARNING: Offset 0x5F2847: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F28CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F28CF   Length              0005 (5)\n-5F28D1   Flags               01 (1) 'Modification'\n-5F28D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F28D6 CENTRAL HEADER #179   02014B50 (33639248)\n-5F28DA Created Zip Spec      14 (20) '2.0'\n-5F28DB Created OS            00 (0) 'MS-DOS'\n-5F28DC Extract Zip Spec      14 (20) '2.0'\n-5F28DD Extract OS            00 (0) 'MS-DOS'\n-5F28DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F28E0 Compression Method    0000 (0) 'Stored'\n-5F28E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F28E6 CRC                   7E793C9C (2121874588)\n-5F28EA Compressed Size       000008CC (2252)\n-5F28EE Uncompressed Size     000008CC (2252)\n-5F28F2 Filename Length       009C (156)\n-5F28F4 Extra Length          0009 (9)\n-5F28F6 Comment Length        0000 (0)\n-5F28F8 Disk Start            0000 (0)\n-5F28FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F28FC Ext File Attributes   00000000 (0)\n-5F2900 Local Header Offset   0004F3A0 (324512)\n-5F2904 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXX'\n+5F20A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F20A5   Length              0005 (5)\n+5F20A7   Flags               01 (1) 'Modification'\n+5F20A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F20AC CENTRAL HEADER #81    02014B50 (33639248)\n+5F20B0 Created Zip Spec      14 (20) '2.0'\n+5F20B1 Created OS            00 (0) 'MS-DOS'\n+5F20B2 Extract Zip Spec      14 (20) '2.0'\n+5F20B3 Extract OS            00 (0) 'MS-DOS'\n+5F20B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F20B6 Compression Method    0000 (0) 'Stored'\n+5F20B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F20BC CRC                   A42AA4FE (2754258174)\n+5F20C0 Compressed Size       00000C7F (3199)\n+5F20C4 Uncompressed Size     00000C7F (3199)\n+5F20C8 Filename Length       0076 (118)\n+5F20CA Extra Length          0009 (9)\n+5F20CC Comment Length        0000 (0)\n+5F20CE Disk Start            0000 (0)\n+5F20D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F20D2 Ext File Attributes   00000000 (0)\n+5F20D6 Local Header Offset   0002ECED (191725)\n+5F20DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F20DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2150 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2152   Length              0005 (5)\n+5F2154   Flags               01 (1) 'Modification'\n+5F2155   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2159 CENTRAL HEADER #82    02014B50 (33639248)\n+5F215D Created Zip Spec      14 (20) '2.0'\n+5F215E Created OS            00 (0) 'MS-DOS'\n+5F215F Extract Zip Spec      14 (20) '2.0'\n+5F2160 Extract OS            00 (0) 'MS-DOS'\n+5F2161 General Purpose Flag  0000 (0)\n+5F2163 Compression Method    0000 (0) 'Stored'\n+5F2165 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2169 CRC                   00000000 (0)\n+5F216D Compressed Size       00000000 (0)\n+5F2171 Uncompressed Size     00000000 (0)\n+5F2175 Filename Length       0025 (37)\n+5F2177 Extra Length          0009 (9)\n+5F2179 Comment Length        0000 (0)\n+5F217B Disk Start            0000 (0)\n+5F217D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F217F Ext File Attributes   00000000 (0)\n+5F2183 Local Header Offset   0002FA19 (195097)\n+5F2187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F21AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F21AE   Length              0005 (5)\n+5F21B0   Flags               01 (1) 'Modification'\n+5F21B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F21B5 CENTRAL HEADER #83    02014B50 (33639248)\n+5F21B9 Created Zip Spec      14 (20) '2.0'\n+5F21BA Created OS            00 (0) 'MS-DOS'\n+5F21BB Extract Zip Spec      14 (20) '2.0'\n+5F21BC Extract OS            00 (0) 'MS-DOS'\n+5F21BD General Purpose Flag  0000 (0)\n+5F21BF Compression Method    0000 (0) 'Stored'\n+5F21C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F21C5 CRC                   00000000 (0)\n+5F21C9 Compressed Size       00000000 (0)\n+5F21CD Uncompressed Size     00000000 (0)\n+5F21D1 Filename Length       002C (44)\n+5F21D3 Extra Length          0009 (9)\n+5F21D5 Comment Length        0000 (0)\n+5F21D7 Disk Start            0000 (0)\n+5F21D9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F21DB Ext File Attributes   00000000 (0)\n+5F21DF Local Header Offset   0002FA65 (195173)\n+5F21E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F21E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F220F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2211   Length              0005 (5)\n+5F2213   Flags               01 (1) 'Modification'\n+5F2214   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2218 CENTRAL HEADER #84    02014B50 (33639248)\n+5F221C Created Zip Spec      14 (20) '2.0'\n+5F221D Created OS            00 (0) 'MS-DOS'\n+5F221E Extract Zip Spec      14 (20) '2.0'\n+5F221F Extract OS            00 (0) 'MS-DOS'\n+5F2220 General Purpose Flag  0000 (0)\n+5F2222 Compression Method    0000 (0) 'Stored'\n+5F2224 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2228 CRC                   00000000 (0)\n+5F222C Compressed Size       00000000 (0)\n+5F2230 Uncompressed Size     00000000 (0)\n+5F2234 Filename Length       005D (93)\n+5F2236 Extra Length          0009 (9)\n+5F2238 Comment Length        0000 (0)\n+5F223A Disk Start            0000 (0)\n+5F223C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F223E Ext File Attributes   00000000 (0)\n+5F2242 Local Header Offset   0002FAB8 (195256)\n+5F2246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F22A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F22A5   Length              0005 (5)\n+5F22A7   Flags               01 (1) 'Modification'\n+5F22A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F22AC CENTRAL HEADER #85    02014B50 (33639248)\n+5F22B0 Created Zip Spec      14 (20) '2.0'\n+5F22B1 Created OS            00 (0) 'MS-DOS'\n+5F22B2 Extract Zip Spec      14 (20) '2.0'\n+5F22B3 Extract OS            00 (0) 'MS-DOS'\n+5F22B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F22B6 Compression Method    0000 (0) 'Stored'\n+5F22B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F22BC CRC                   4F9A1C4F (1335499855)\n+5F22C0 Compressed Size       000009AF (2479)\n+5F22C4 Uncompressed Size     000009AF (2479)\n+5F22C8 Filename Length       0073 (115)\n+5F22CA Extra Length          0009 (9)\n+5F22CC Comment Length        0000 (0)\n+5F22CE Disk Start            0000 (0)\n+5F22D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F22D2 Ext File Attributes   00000000 (0)\n+5F22D6 Local Header Offset   0002FB3C (195388)\n+5F22DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F22DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F234D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F234F   Length              0005 (5)\n+5F2351   Flags               01 (1) 'Modification'\n+5F2352   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2356 CENTRAL HEADER #86    02014B50 (33639248)\n+5F235A Created Zip Spec      14 (20) '2.0'\n+5F235B Created OS            00 (0) 'MS-DOS'\n+5F235C Extract Zip Spec      14 (20) '2.0'\n+5F235D Extract OS            00 (0) 'MS-DOS'\n+5F235E General Purpose Flag  0000 (0)\n+5F2360 Compression Method    0000 (0) 'Stored'\n+5F2362 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2366 CRC                   00000000 (0)\n+5F236A Compressed Size       00000000 (0)\n+5F236E Uncompressed Size     00000000 (0)\n+5F2372 Filename Length       006A (106)\n+5F2374 Extra Length          0009 (9)\n+5F2376 Comment Length        0000 (0)\n+5F2378 Disk Start            0000 (0)\n+5F237A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F237C Ext File Attributes   00000000 (0)\n+5F2380 Local Header Offset   00030595 (198037)\n+5F2384 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2384: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F23EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F23F0   Length              0005 (5)\n+5F23F2   Flags               01 (1) 'Modification'\n+5F23F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F23F7 CENTRAL HEADER #87    02014B50 (33639248)\n+5F23FB Created Zip Spec      14 (20) '2.0'\n+5F23FC Created OS            00 (0) 'MS-DOS'\n+5F23FD Extract Zip Spec      14 (20) '2.0'\n+5F23FE Extract OS            00 (0) 'MS-DOS'\n+5F23FF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F2401 Compression Method    0000 (0) 'Stored'\n+5F2403 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2407 CRC                   754F4527 (1968129319)\n+5F240B Compressed Size       00001265 (4709)\n+5F240F Uncompressed Size     00001265 (4709)\n+5F2413 Filename Length       0080 (128)\n+5F2415 Extra Length          0009 (9)\n+5F2417 Comment Length        0000 (0)\n+5F2419 Disk Start            0000 (0)\n+5F241B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F241D Ext File Attributes   00000000 (0)\n+5F2421 Local Header Offset   00030626 (198182)\n+5F2425 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2425: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F24A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F24A7   Length              0005 (5)\n+5F24A9   Flags               01 (1) 'Modification'\n+5F24AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F24AE CENTRAL HEADER #88    02014B50 (33639248)\n+5F24B2 Created Zip Spec      14 (20) '2.0'\n+5F24B3 Created OS            00 (0) 'MS-DOS'\n+5F24B4 Extract Zip Spec      14 (20) '2.0'\n+5F24B5 Extract OS            00 (0) 'MS-DOS'\n+5F24B6 General Purpose Flag  0000 (0)\n+5F24B8 Compression Method    0000 (0) 'Stored'\n+5F24BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F24BE CRC                   00000000 (0)\n+5F24C2 Compressed Size       00000000 (0)\n+5F24C6 Uncompressed Size     00000000 (0)\n+5F24CA Filename Length       0028 (40)\n+5F24CC Extra Length          0009 (9)\n+5F24CE Comment Length        0000 (0)\n+5F24D0 Disk Start            0000 (0)\n+5F24D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F24D4 Ext File Attributes   00000000 (0)\n+5F24D8 Local Header Offset   00031942 (203074)\n+5F24DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F24DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2504 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2506   Length              0005 (5)\n+5F2508   Flags               01 (1) 'Modification'\n+5F2509   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F250D CENTRAL HEADER #89    02014B50 (33639248)\n+5F2511 Created Zip Spec      14 (20) '2.0'\n+5F2512 Created OS            00 (0) 'MS-DOS'\n+5F2513 Extract Zip Spec      14 (20) '2.0'\n+5F2514 Extract OS            00 (0) 'MS-DOS'\n+5F2515 General Purpose Flag  0000 (0)\n+5F2517 Compression Method    0000 (0) 'Stored'\n+5F2519 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F251D CRC                   00000000 (0)\n+5F2521 Compressed Size       00000000 (0)\n+5F2525 Uncompressed Size     00000000 (0)\n+5F2529 Filename Length       002F (47)\n+5F252B Extra Length          0009 (9)\n+5F252D Comment Length        0000 (0)\n+5F252F Disk Start            0000 (0)\n+5F2531 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2533 Ext File Attributes   00000000 (0)\n+5F2537 Local Header Offset   00031991 (203153)\n+5F253B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F253B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F256A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F256C   Length              0005 (5)\n+5F256E   Flags               01 (1) 'Modification'\n+5F256F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2573 CENTRAL HEADER #90    02014B50 (33639248)\n+5F2577 Created Zip Spec      14 (20) '2.0'\n+5F2578 Created OS            00 (0) 'MS-DOS'\n+5F2579 Extract Zip Spec      14 (20) '2.0'\n+5F257A Extract OS            00 (0) 'MS-DOS'\n+5F257B General Purpose Flag  0000 (0)\n+5F257D Compression Method    0000 (0) 'Stored'\n+5F257F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2583 CRC                   00000000 (0)\n+5F2587 Compressed Size       00000000 (0)\n+5F258B Uncompressed Size     00000000 (0)\n+5F258F Filename Length       0061 (97)\n+5F2591 Extra Length          0009 (9)\n+5F2593 Comment Length        0000 (0)\n+5F2595 Disk Start            0000 (0)\n+5F2597 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2599 Ext File Attributes   00000000 (0)\n+5F259D Local Header Offset   000319E7 (203239)\n+5F25A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F25A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2602 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2604   Length              0005 (5)\n+5F2606   Flags               01 (1) 'Modification'\n+5F2607   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F260B CENTRAL HEADER #91    02014B50 (33639248)\n+5F260F Created Zip Spec      14 (20) '2.0'\n+5F2610 Created OS            00 (0) 'MS-DOS'\n+5F2611 Extract Zip Spec      14 (20) '2.0'\n+5F2612 Extract OS            00 (0) 'MS-DOS'\n+5F2613 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F2615 Compression Method    0000 (0) 'Stored'\n+5F2617 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F261B CRC                   FE6DB49E (4268602526)\n+5F261F Compressed Size       000007FF (2047)\n+5F2623 Uncompressed Size     000007FF (2047)\n+5F2627 Filename Length       0077 (119)\n+5F2629 Extra Length          0009 (9)\n+5F262B Comment Length        0000 (0)\n+5F262D Disk Start            0000 (0)\n+5F262F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2631 Ext File Attributes   00000000 (0)\n+5F2635 Local Header Offset   00031A6F (203375)\n+5F2639 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2639: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F26B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F26B2   Length              0005 (5)\n+5F26B4   Flags               01 (1) 'Modification'\n+5F26B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F26B9 CENTRAL HEADER #92    02014B50 (33639248)\n+5F26BD Created Zip Spec      14 (20) '2.0'\n+5F26BE Created OS            00 (0) 'MS-DOS'\n+5F26BF Extract Zip Spec      14 (20) '2.0'\n+5F26C0 Extract OS            00 (0) 'MS-DOS'\n+5F26C1 General Purpose Flag  0000 (0)\n+5F26C3 Compression Method    0000 (0) 'Stored'\n+5F26C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F26C9 CRC                   00000000 (0)\n+5F26CD Compressed Size       00000000 (0)\n+5F26D1 Uncompressed Size     00000000 (0)\n+5F26D5 Filename Length       0026 (38)\n+5F26D7 Extra Length          0009 (9)\n+5F26D9 Comment Length        0000 (0)\n+5F26DB Disk Start            0000 (0)\n+5F26DD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F26DF Ext File Attributes   00000000 (0)\n+5F26E3 Local Header Offset   0003231C (205596)\n+5F26E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F26E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F270D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F270F   Length              0005 (5)\n+5F2711   Flags               01 (1) 'Modification'\n+5F2712   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2716 CENTRAL HEADER #93    02014B50 (33639248)\n+5F271A Created Zip Spec      14 (20) '2.0'\n+5F271B Created OS            00 (0) 'MS-DOS'\n+5F271C Extract Zip Spec      14 (20) '2.0'\n+5F271D Extract OS            00 (0) 'MS-DOS'\n+5F271E General Purpose Flag  0000 (0)\n+5F2720 Compression Method    0000 (0) 'Stored'\n+5F2722 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2726 CRC                   00000000 (0)\n+5F272A Compressed Size       00000000 (0)\n+5F272E Uncompressed Size     00000000 (0)\n+5F2732 Filename Length       002D (45)\n+5F2734 Extra Length          0009 (9)\n+5F2736 Comment Length        0000 (0)\n+5F2738 Disk Start            0000 (0)\n+5F273A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F273C Ext File Attributes   00000000 (0)\n+5F2740 Local Header Offset   00032369 (205673)\n+5F2744 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2744: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2773   Length              0005 (5)\n+5F2775   Flags               01 (1) 'Modification'\n+5F2776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F277A CENTRAL HEADER #94    02014B50 (33639248)\n+5F277E Created Zip Spec      14 (20) '2.0'\n+5F277F Created OS            00 (0) 'MS-DOS'\n+5F2780 Extract Zip Spec      14 (20) '2.0'\n+5F2781 Extract OS            00 (0) 'MS-DOS'\n+5F2782 General Purpose Flag  0000 (0)\n+5F2784 Compression Method    0000 (0) 'Stored'\n+5F2786 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F278A CRC                   00000000 (0)\n+5F278E Compressed Size       00000000 (0)\n+5F2792 Uncompressed Size     00000000 (0)\n+5F2796 Filename Length       0064 (100)\n+5F2798 Extra Length          0009 (9)\n+5F279A Comment Length        0000 (0)\n+5F279C Disk Start            0000 (0)\n+5F279E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F27A0 Ext File Attributes   00000000 (0)\n+5F27A4 Local Header Offset   000323BD (205757)\n+5F27A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F27A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F280C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F280E   Length              0005 (5)\n+5F2810   Flags               01 (1) 'Modification'\n+5F2811   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2815 CENTRAL HEADER #95    02014B50 (33639248)\n+5F2819 Created Zip Spec      14 (20) '2.0'\n+5F281A Created OS            00 (0) 'MS-DOS'\n+5F281B Extract Zip Spec      14 (20) '2.0'\n+5F281C Extract OS            00 (0) 'MS-DOS'\n+5F281D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F281F Compression Method    0000 (0) 'Stored'\n+5F2821 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2825 CRC                   FFF8AD9F (4294487455)\n+5F2829 Compressed Size       00000868 (2152)\n+5F282D Uncompressed Size     00000868 (2152)\n+5F2831 Filename Length       007A (122)\n+5F2833 Extra Length          0009 (9)\n+5F2835 Comment Length        0000 (0)\n+5F2837 Disk Start            0000 (0)\n+5F2839 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F283B Ext File Attributes   00000000 (0)\n+5F283F Local Header Offset   00032448 (205896)\n+5F2843 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2843: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F28BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F28BF   Length              0005 (5)\n+5F28C1   Flags               01 (1) 'Modification'\n+5F28C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F28C6 CENTRAL HEADER #96    02014B50 (33639248)\n+5F28CA Created Zip Spec      14 (20) '2.0'\n+5F28CB Created OS            00 (0) 'MS-DOS'\n+5F28CC Extract Zip Spec      14 (20) '2.0'\n+5F28CD Extract OS            00 (0) 'MS-DOS'\n+5F28CE General Purpose Flag  0000 (0)\n+5F28D0 Compression Method    0000 (0) 'Stored'\n+5F28D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F28D6 CRC                   00000000 (0)\n+5F28DA Compressed Size       00000000 (0)\n+5F28DE Uncompressed Size     00000000 (0)\n+5F28E2 Filename Length       002F (47)\n+5F28E4 Extra Length          0009 (9)\n+5F28E6 Comment Length        0000 (0)\n+5F28E8 Disk Start            0000 (0)\n+5F28EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F28EC Ext File Attributes   00000000 (0)\n+5F28F0 Local Header Offset   00032D61 (208225)\n+5F28F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F28F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2925   Length              0005 (5)\n+5F2927   Flags               01 (1) 'Modification'\n+5F2928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F292C CENTRAL HEADER #97    02014B50 (33639248)\n+5F2930 Created Zip Spec      14 (20) '2.0'\n+5F2931 Created OS            00 (0) 'MS-DOS'\n+5F2932 Extract Zip Spec      14 (20) '2.0'\n+5F2933 Extract OS            00 (0) 'MS-DOS'\n+5F2934 General Purpose Flag  0000 (0)\n+5F2936 Compression Method    0000 (0) 'Stored'\n+5F2938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F293C CRC                   00000000 (0)\n+5F2940 Compressed Size       00000000 (0)\n+5F2944 Uncompressed Size     00000000 (0)\n+5F2948 Filename Length       0036 (54)\n+5F294A Extra Length          0009 (9)\n+5F294C Comment Length        0000 (0)\n+5F294E Disk Start            0000 (0)\n+5F2950 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2952 Ext File Attributes   00000000 (0)\n+5F2956 Local Header Offset   00032DB7 (208311)\n+5F295A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F295A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2990 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2992   Length              0005 (5)\n+5F2994   Flags               01 (1) 'Modification'\n+5F2995   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2999 CENTRAL HEADER #98    02014B50 (33639248)\n+5F299D Created Zip Spec      14 (20) '2.0'\n+5F299E Created OS            00 (0) 'MS-DOS'\n+5F299F Extract Zip Spec      14 (20) '2.0'\n+5F29A0 Extract OS            00 (0) 'MS-DOS'\n+5F29A1 General Purpose Flag  0000 (0)\n+5F29A3 Compression Method    0000 (0) 'Stored'\n+5F29A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F29A9 CRC                   00000000 (0)\n+5F29AD Compressed Size       00000000 (0)\n+5F29B1 Uncompressed Size     00000000 (0)\n+5F29B5 Filename Length       0078 (120)\n+5F29B7 Extra Length          0009 (9)\n+5F29B9 Comment Length        0000 (0)\n+5F29BB Disk Start            0000 (0)\n+5F29BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F29BF Ext File Attributes   00000000 (0)\n+5F29C3 Local Header Offset   00032E14 (208404)\n+5F29C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F29C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2A3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2A41   Length              0005 (5)\n+5F2A43   Flags               01 (1) 'Modification'\n+5F2A44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2A48 CENTRAL HEADER #99    02014B50 (33639248)\n+5F2A4C Created Zip Spec      14 (20) '2.0'\n+5F2A4D Created OS            00 (0) 'MS-DOS'\n+5F2A4E Extract Zip Spec      14 (20) '2.0'\n+5F2A4F Extract OS            00 (0) 'MS-DOS'\n+5F2A50 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F2A52 Compression Method    0000 (0) 'Stored'\n+5F2A54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2A58 CRC                   896578EC (2305128684)\n+5F2A5C Compressed Size       00001327 (4903)\n+5F2A60 Uncompressed Size     00001327 (4903)\n+5F2A64 Filename Length       008E (142)\n+5F2A66 Extra Length          0009 (9)\n+5F2A68 Comment Length        0000 (0)\n+5F2A6A Disk Start            0000 (0)\n+5F2A6C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2A6E Ext File Attributes   00000000 (0)\n+5F2A72 Local Header Offset   00032EB3 (208563)\n+5F2A76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F2904: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F2A76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F29A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F29A2   Length              0005 (5)\n-5F29A4   Flags               01 (1) 'Modification'\n-5F29A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F29A9 CENTRAL HEADER #180   02014B50 (33639248)\n-5F29AD Created Zip Spec      14 (20) '2.0'\n-5F29AE Created OS            00 (0) 'MS-DOS'\n-5F29AF Extract Zip Spec      14 (20) '2.0'\n-5F29B0 Extract OS            00 (0) 'MS-DOS'\n-5F29B1 General Purpose Flag  0000 (0)\n-5F29B3 Compression Method    0000 (0) 'Stored'\n-5F29B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F29B9 CRC                   00000000 (0)\n-5F29BD Compressed Size       00000000 (0)\n-5F29C1 Uncompressed Size     00000000 (0)\n-5F29C5 Filename Length       0024 (36)\n-5F29C7 Extra Length          0009 (9)\n-5F29C9 Comment Length        0000 (0)\n-5F29CB Disk Start            0000 (0)\n-5F29CD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F29CF Ext File Attributes   00000000 (0)\n-5F29D3 Local Header Offset   0004FD3F (326975)\n-5F29D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F29D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F29FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F29FD   Length              0005 (5)\n-5F29FF   Flags               01 (1) 'Modification'\n-5F2A00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2A04 CENTRAL HEADER #181   02014B50 (33639248)\n-5F2A08 Created Zip Spec      14 (20) '2.0'\n-5F2A09 Created OS            00 (0) 'MS-DOS'\n-5F2A0A Extract Zip Spec      14 (20) '2.0'\n-5F2A0B Extract OS            00 (0) 'MS-DOS'\n-5F2A0C General Purpose Flag  0000 (0)\n-5F2A0E Compression Method    0000 (0) 'Stored'\n-5F2A10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2A14 CRC                   00000000 (0)\n-5F2A18 Compressed Size       00000000 (0)\n-5F2A1C Uncompressed Size     00000000 (0)\n-5F2A20 Filename Length       002B (43)\n-5F2A22 Extra Length          0009 (9)\n-5F2A24 Comment Length        0000 (0)\n-5F2A26 Disk Start            0000 (0)\n-5F2A28 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2A2A Ext File Attributes   00000000 (0)\n-5F2A2E Local Header Offset   0004FD8A (327050)\n-5F2A32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2A32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2A5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2A5F   Length              0005 (5)\n-5F2A61   Flags               01 (1) 'Modification'\n-5F2A62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2A66 CENTRAL HEADER #182   02014B50 (33639248)\n-5F2A6A Created Zip Spec      14 (20) '2.0'\n-5F2A6B Created OS            00 (0) 'MS-DOS'\n-5F2A6C Extract Zip Spec      14 (20) '2.0'\n-5F2A6D Extract OS            00 (0) 'MS-DOS'\n-5F2A6E General Purpose Flag  0000 (0)\n-5F2A70 Compression Method    0000 (0) 'Stored'\n-5F2A72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2A76 CRC                   00000000 (0)\n-5F2A7A Compressed Size       00000000 (0)\n-5F2A7E Uncompressed Size     00000000 (0)\n-5F2A82 Filename Length       0052 (82)\n-5F2A84 Extra Length          0009 (9)\n-5F2A86 Comment Length        0000 (0)\n-5F2A88 Disk Start            0000 (0)\n-5F2A8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2A8C Ext File Attributes   00000000 (0)\n-5F2A90 Local Header Offset   0004FDDC (327132)\n-5F2A94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2A94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2AE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2AE8   Length              0005 (5)\n-5F2AEA   Flags               01 (1) 'Modification'\n-5F2AEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2AEF CENTRAL HEADER #183   02014B50 (33639248)\n-5F2AF3 Created Zip Spec      14 (20) '2.0'\n-5F2AF4 Created OS            00 (0) 'MS-DOS'\n-5F2AF5 Extract Zip Spec      14 (20) '2.0'\n-5F2AF6 Extract OS            00 (0) 'MS-DOS'\n-5F2AF7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2AF9 Compression Method    0000 (0) 'Stored'\n-5F2AFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2AFF CRC                   A8584B88 (2824358792)\n-5F2B03 Compressed Size       0000070D (1805)\n-5F2B07 Uncompressed Size     0000070D (1805)\n-5F2B0B Filename Length       0068 (104)\n-5F2B0D Extra Length          0009 (9)\n-5F2B0F Comment Length        0000 (0)\n-5F2B11 Disk Start            0000 (0)\n-5F2B13 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2B15 Ext File Attributes   00000000 (0)\n-5F2B19 Local Header Offset   0004FE55 (327253)\n-5F2B1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2B1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2B85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2B87   Length              0005 (5)\n-5F2B89   Flags               01 (1) 'Modification'\n-5F2B8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2B8E CENTRAL HEADER #184   02014B50 (33639248)\n-5F2B92 Created Zip Spec      14 (20) '2.0'\n-5F2B93 Created OS            00 (0) 'MS-DOS'\n-5F2B94 Extract Zip Spec      14 (20) '2.0'\n-5F2B95 Extract OS            00 (0) 'MS-DOS'\n-5F2B96 General Purpose Flag  0000 (0)\n-5F2B98 Compression Method    0000 (0) 'Stored'\n-5F2B9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2B9E CRC                   00000000 (0)\n-5F2BA2 Compressed Size       00000000 (0)\n-5F2BA6 Uncompressed Size     00000000 (0)\n-5F2BAA Filename Length       004E (78)\n-5F2BAC Extra Length          0009 (9)\n-5F2BAE Comment Length        0000 (0)\n-5F2BB0 Disk Start            0000 (0)\n-5F2BB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2BB4 Ext File Attributes   00000000 (0)\n-5F2BB8 Local Header Offset   00050601 (329217)\n-5F2BBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2BBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2C0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2C0C   Length              0005 (5)\n-5F2C0E   Flags               01 (1) 'Modification'\n-5F2C0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2C13 CENTRAL HEADER #185   02014B50 (33639248)\n-5F2C17 Created Zip Spec      14 (20) '2.0'\n-5F2C18 Created OS            00 (0) 'MS-DOS'\n-5F2C19 Extract Zip Spec      14 (20) '2.0'\n-5F2C1A Extract OS            00 (0) 'MS-DOS'\n-5F2C1B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2C1D Compression Method    0000 (0) 'Stored'\n-5F2C1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2C23 CRC                   A8336B4A (2821942090)\n-5F2C27 Compressed Size       00000760 (1888)\n-5F2C2B Uncompressed Size     00000760 (1888)\n-5F2C2F Filename Length       0064 (100)\n-5F2C31 Extra Length          0009 (9)\n-5F2C33 Comment Length        0000 (0)\n-5F2C35 Disk Start            0000 (0)\n-5F2C37 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2C39 Ext File Attributes   00000000 (0)\n-5F2C3D Local Header Offset   00050676 (329334)\n-5F2C41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F2B04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2B06   Length              0005 (5)\n+5F2B08   Flags               01 (1) 'Modification'\n+5F2B09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2B0D CENTRAL HEADER #100   02014B50 (33639248)\n+5F2B11 Created Zip Spec      14 (20) '2.0'\n+5F2B12 Created OS            00 (0) 'MS-DOS'\n+5F2B13 Extract Zip Spec      14 (20) '2.0'\n+5F2B14 Extract OS            00 (0) 'MS-DOS'\n+5F2B15 General Purpose Flag  0000 (0)\n+5F2B17 Compression Method    0000 (0) 'Stored'\n+5F2B19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2B1D CRC                   00000000 (0)\n+5F2B21 Compressed Size       00000000 (0)\n+5F2B25 Uncompressed Size     00000000 (0)\n+5F2B29 Filename Length       003B (59)\n+5F2B2B Extra Length          0009 (9)\n+5F2B2D Comment Length        0000 (0)\n+5F2B2F Disk Start            0000 (0)\n+5F2B31 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2B33 Ext File Attributes   00000000 (0)\n+5F2B37 Local Header Offset   0003429F (213663)\n+5F2B3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2B3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2B76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2B78   Length              0005 (5)\n+5F2B7A   Flags               01 (1) 'Modification'\n+5F2B7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2B7F CENTRAL HEADER #101   02014B50 (33639248)\n+5F2B83 Created Zip Spec      14 (20) '2.0'\n+5F2B84 Created OS            00 (0) 'MS-DOS'\n+5F2B85 Extract Zip Spec      14 (20) '2.0'\n+5F2B86 Extract OS            00 (0) 'MS-DOS'\n+5F2B87 General Purpose Flag  0000 (0)\n+5F2B89 Compression Method    0000 (0) 'Stored'\n+5F2B8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2B8F CRC                   00000000 (0)\n+5F2B93 Compressed Size       00000000 (0)\n+5F2B97 Uncompressed Size     00000000 (0)\n+5F2B9B Filename Length       0042 (66)\n+5F2B9D Extra Length          0009 (9)\n+5F2B9F Comment Length        0000 (0)\n+5F2BA1 Disk Start            0000 (0)\n+5F2BA3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2BA5 Ext File Attributes   00000000 (0)\n+5F2BA9 Local Header Offset   00034301 (213761)\n+5F2BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2BEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2BF1   Length              0005 (5)\n+5F2BF3   Flags               01 (1) 'Modification'\n+5F2BF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2BF8 CENTRAL HEADER #102   02014B50 (33639248)\n+5F2BFC Created Zip Spec      14 (20) '2.0'\n+5F2BFD Created OS            00 (0) 'MS-DOS'\n+5F2BFE Extract Zip Spec      14 (20) '2.0'\n+5F2BFF Extract OS            00 (0) 'MS-DOS'\n+5F2C00 General Purpose Flag  0000 (0)\n+5F2C02 Compression Method    0000 (0) 'Stored'\n+5F2C04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2C08 CRC                   00000000 (0)\n+5F2C0C Compressed Size       00000000 (0)\n+5F2C10 Uncompressed Size     00000000 (0)\n+5F2C14 Filename Length       007F (127)\n+5F2C16 Extra Length          0009 (9)\n+5F2C18 Comment Length        0000 (0)\n+5F2C1A Disk Start            0000 (0)\n+5F2C1C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2C1E Ext File Attributes   00000000 (0)\n+5F2C22 Local Header Offset   0003436A (213866)\n+5F2C26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F2C41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F2C26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5F2CA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5F2CA7   Length              0005 (5)\n 5F2CA9   Flags               01 (1) 'Modification'\n 5F2CAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5F2CAE CENTRAL HEADER #186   02014B50 (33639248)\n+5F2CAE CENTRAL HEADER #103   02014B50 (33639248)\n 5F2CB2 Created Zip Spec      14 (20) '2.0'\n 5F2CB3 Created OS            00 (0) 'MS-DOS'\n 5F2CB4 Extract Zip Spec      14 (20) '2.0'\n 5F2CB5 Extract OS            00 (0) 'MS-DOS'\n-5F2CB6 General Purpose Flag  0000 (0)\n+5F2CB6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n 5F2CB8 Compression Method    0000 (0) 'Stored'\n 5F2CBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2CBE CRC                   00000000 (0)\n-5F2CC2 Compressed Size       00000000 (0)\n-5F2CC6 Uncompressed Size     00000000 (0)\n-5F2CCA Filename Length       004E (78)\n+5F2CBE CRC                   33B19866 (867276902)\n+5F2CC2 Compressed Size       00000A59 (2649)\n+5F2CC6 Uncompressed Size     00000A59 (2649)\n+5F2CCA Filename Length       0095 (149)\n 5F2CCC Extra Length          0009 (9)\n 5F2CCE Comment Length        0000 (0)\n 5F2CD0 Disk Start            0000 (0)\n 5F2CD2 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5F2CD4 Ext File Attributes   00000000 (0)\n-5F2CD8 Local Header Offset   00050E71 (331377)\n-5F2CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F2CD8 Local Header Offset   00034410 (214032)\n+5F2CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F2CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F2CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F2D2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2D2C   Length              0005 (5)\n-5F2D2E   Flags               01 (1) 'Modification'\n-5F2D2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2D33 CENTRAL HEADER #187   02014B50 (33639248)\n-5F2D37 Created Zip Spec      14 (20) '2.0'\n-5F2D38 Created OS            00 (0) 'MS-DOS'\n-5F2D39 Extract Zip Spec      14 (20) '2.0'\n-5F2D3A Extract OS            00 (0) 'MS-DOS'\n-5F2D3B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2D3D Compression Method    0000 (0) 'Stored'\n-5F2D3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2D43 CRC                   7559BE1A (1968815642)\n-5F2D47 Compressed Size       00000764 (1892)\n-5F2D4B Uncompressed Size     00000764 (1892)\n-5F2D4F Filename Length       0064 (100)\n-5F2D51 Extra Length          0009 (9)\n-5F2D53 Comment Length        0000 (0)\n-5F2D55 Disk Start            0000 (0)\n-5F2D57 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2D59 Ext File Attributes   00000000 (0)\n-5F2D5D Local Header Offset   00050EE6 (331494)\n-5F2D61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2D61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2DC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2DC7   Length              0005 (5)\n-5F2DC9   Flags               01 (1) 'Modification'\n-5F2DCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2DCE CENTRAL HEADER #188   02014B50 (33639248)\n-5F2DD2 Created Zip Spec      14 (20) '2.0'\n-5F2DD3 Created OS            00 (0) 'MS-DOS'\n-5F2DD4 Extract Zip Spec      14 (20) '2.0'\n-5F2DD5 Extract OS            00 (0) 'MS-DOS'\n-5F2DD6 General Purpose Flag  0000 (0)\n-5F2DD8 Compression Method    0000 (0) 'Stored'\n-5F2DDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2DDE CRC                   00000000 (0)\n-5F2DE2 Compressed Size       00000000 (0)\n-5F2DE6 Uncompressed Size     00000000 (0)\n-5F2DEA Filename Length       0050 (80)\n-5F2DEC Extra Length          0009 (9)\n-5F2DEE Comment Length        0000 (0)\n-5F2DF0 Disk Start            0000 (0)\n-5F2DF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2DF4 Ext File Attributes   00000000 (0)\n-5F2DF8 Local Header Offset   000516E5 (333541)\n-5F2DFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2DFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2E4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2E4E   Length              0005 (5)\n-5F2E50   Flags               01 (1) 'Modification'\n-5F2E51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2E55 CENTRAL HEADER #189   02014B50 (33639248)\n-5F2E59 Created Zip Spec      14 (20) '2.0'\n-5F2E5A Created OS            00 (0) 'MS-DOS'\n-5F2E5B Extract Zip Spec      14 (20) '2.0'\n-5F2E5C Extract OS            00 (0) 'MS-DOS'\n-5F2E5D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F2E5F Compression Method    0000 (0) 'Stored'\n-5F2E61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2E65 CRC                   F2039839 (4060321849)\n-5F2E69 Compressed Size       00000F35 (3893)\n-5F2E6D Uncompressed Size     00000F35 (3893)\n-5F2E71 Filename Length       0066 (102)\n-5F2E73 Extra Length          0009 (9)\n-5F2E75 Comment Length        0000 (0)\n-5F2E77 Disk Start            0000 (0)\n-5F2E79 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2E7B Ext File Attributes   00000000 (0)\n-5F2E7F Local Header Offset   0005175C (333660)\n-5F2E83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2E83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2EE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2EEB   Length              0005 (5)\n-5F2EED   Flags               01 (1) 'Modification'\n-5F2EEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2EF2 CENTRAL HEADER #190   02014B50 (33639248)\n-5F2EF6 Created Zip Spec      14 (20) '2.0'\n-5F2EF7 Created OS            00 (0) 'MS-DOS'\n-5F2EF8 Extract Zip Spec      14 (20) '2.0'\n-5F2EF9 Extract OS            00 (0) 'MS-DOS'\n-5F2EFA General Purpose Flag  0000 (0)\n-5F2EFC Compression Method    0000 (0) 'Stored'\n-5F2EFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2F02 CRC                   00000000 (0)\n-5F2F06 Compressed Size       00000000 (0)\n-5F2F0A Uncompressed Size     00000000 (0)\n-5F2F0E Filename Length       0026 (38)\n-5F2F10 Extra Length          0009 (9)\n-5F2F12 Comment Length        0000 (0)\n-5F2F14 Disk Start            0000 (0)\n-5F2F16 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2F18 Ext File Attributes   00000000 (0)\n-5F2F1C Local Header Offset   0005272E (337710)\n-5F2F20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2F20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2F46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2F48   Length              0005 (5)\n-5F2F4A   Flags               01 (1) 'Modification'\n-5F2F4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2F4F CENTRAL HEADER #191   02014B50 (33639248)\n-5F2F53 Created Zip Spec      14 (20) '2.0'\n-5F2F54 Created OS            00 (0) 'MS-DOS'\n-5F2F55 Extract Zip Spec      14 (20) '2.0'\n-5F2F56 Extract OS            00 (0) 'MS-DOS'\n-5F2F57 General Purpose Flag  0000 (0)\n-5F2F59 Compression Method    0000 (0) 'Stored'\n-5F2F5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2F5F CRC                   00000000 (0)\n-5F2F63 Compressed Size       00000000 (0)\n-5F2F67 Uncompressed Size     00000000 (0)\n-5F2F6B Filename Length       002D (45)\n-5F2F6D Extra Length          0009 (9)\n-5F2F6F Comment Length        0000 (0)\n-5F2F71 Disk Start            0000 (0)\n-5F2F73 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2F75 Ext File Attributes   00000000 (0)\n-5F2F79 Local Header Offset   0005277B (337787)\n-5F2F7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2F7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F2FAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F2FAC   Length              0005 (5)\n-5F2FAE   Flags               01 (1) 'Modification'\n-5F2FAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F2FB3 CENTRAL HEADER #192   02014B50 (33639248)\n-5F2FB7 Created Zip Spec      14 (20) '2.0'\n-5F2FB8 Created OS            00 (0) 'MS-DOS'\n-5F2FB9 Extract Zip Spec      14 (20) '2.0'\n-5F2FBA Extract OS            00 (0) 'MS-DOS'\n-5F2FBB General Purpose Flag  0000 (0)\n-5F2FBD Compression Method    0000 (0) 'Stored'\n-5F2FBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F2FC3 CRC                   00000000 (0)\n-5F2FC7 Compressed Size       00000000 (0)\n-5F2FCB Uncompressed Size     00000000 (0)\n-5F2FCF Filename Length       005B (91)\n-5F2FD1 Extra Length          0009 (9)\n-5F2FD3 Comment Length        0000 (0)\n-5F2FD5 Disk Start            0000 (0)\n-5F2FD7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F2FD9 Ext File Attributes   00000000 (0)\n-5F2FDD Local Header Offset   000527CF (337871)\n-5F2FE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F2FE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F303C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F303E   Length              0005 (5)\n-5F3040   Flags               01 (1) 'Modification'\n-5F3041   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3045 CENTRAL HEADER #193   02014B50 (33639248)\n-5F3049 Created Zip Spec      14 (20) '2.0'\n-5F304A Created OS            00 (0) 'MS-DOS'\n-5F304B Extract Zip Spec      14 (20) '2.0'\n-5F304C Extract OS            00 (0) 'MS-DOS'\n-5F304D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F304F Compression Method    0000 (0) 'Stored'\n-5F3051 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3055 CRC                   4C048087 (1275363463)\n-5F3059 Compressed Size       00000861 (2145)\n-5F305D Uncompressed Size     00000861 (2145)\n-5F3061 Filename Length       0071 (113)\n-5F3063 Extra Length          0009 (9)\n-5F3065 Comment Length        0000 (0)\n-5F3067 Disk Start            0000 (0)\n-5F3069 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F306B Ext File Attributes   00000000 (0)\n-5F306F Local Header Offset   00052851 (338001)\n-5F3073 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3073: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F30E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F30E6   Length              0005 (5)\n-5F30E8   Flags               01 (1) 'Modification'\n-5F30E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F30ED CENTRAL HEADER #194   02014B50 (33639248)\n-5F30F1 Created Zip Spec      14 (20) '2.0'\n-5F30F2 Created OS            00 (0) 'MS-DOS'\n-5F30F3 Extract Zip Spec      14 (20) '2.0'\n-5F30F4 Extract OS            00 (0) 'MS-DOS'\n-5F30F5 General Purpose Flag  0000 (0)\n-5F30F7 Compression Method    0000 (0) 'Stored'\n-5F30F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F30FD CRC                   00000000 (0)\n-5F3101 Compressed Size       00000000 (0)\n-5F3105 Uncompressed Size     00000000 (0)\n-5F3109 Filename Length       002D (45)\n-5F310B Extra Length          0009 (9)\n-5F310D Comment Length        0000 (0)\n-5F310F Disk Start            0000 (0)\n-5F3111 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3113 Ext File Attributes   00000000 (0)\n-5F3117 Local Header Offset   0005315A (340314)\n-5F311B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F311B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3148 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F314A   Length              0005 (5)\n-5F314C   Flags               01 (1) 'Modification'\n-5F314D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3151 CENTRAL HEADER #195   02014B50 (33639248)\n-5F3155 Created Zip Spec      14 (20) '2.0'\n-5F3156 Created OS            00 (0) 'MS-DOS'\n-5F3157 Extract Zip Spec      14 (20) '2.0'\n-5F3158 Extract OS            00 (0) 'MS-DOS'\n-5F3159 General Purpose Flag  0000 (0)\n-5F315B Compression Method    0000 (0) 'Stored'\n-5F315D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3161 CRC                   00000000 (0)\n-5F3165 Compressed Size       00000000 (0)\n-5F3169 Uncompressed Size     00000000 (0)\n-5F316D Filename Length       0034 (52)\n-5F316F Extra Length          0009 (9)\n-5F3171 Comment Length        0000 (0)\n-5F3173 Disk Start            0000 (0)\n-5F3175 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3177 Ext File Attributes   00000000 (0)\n-5F317B Local Header Offset   000531AE (340398)\n-5F317F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F317F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F31B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F31B5   Length              0005 (5)\n-5F31B7   Flags               01 (1) 'Modification'\n-5F31B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F31BC CENTRAL HEADER #196   02014B50 (33639248)\n-5F31C0 Created Zip Spec      14 (20) '2.0'\n-5F31C1 Created OS            00 (0) 'MS-DOS'\n-5F31C2 Extract Zip Spec      14 (20) '2.0'\n-5F31C3 Extract OS            00 (0) 'MS-DOS'\n-5F31C4 General Purpose Flag  0000 (0)\n-5F31C6 Compression Method    0000 (0) 'Stored'\n-5F31C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F31CC CRC                   00000000 (0)\n-5F31D0 Compressed Size       00000000 (0)\n-5F31D4 Uncompressed Size     00000000 (0)\n-5F31D8 Filename Length       0068 (104)\n-5F31DA Extra Length          0009 (9)\n-5F31DC Comment Length        0000 (0)\n-5F31DE Disk Start            0000 (0)\n-5F31E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F31E2 Ext File Attributes   00000000 (0)\n-5F31E6 Local Header Offset   00053209 (340489)\n-5F31EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F31EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3252 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3254   Length              0005 (5)\n-5F3256   Flags               01 (1) 'Modification'\n-5F3257   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F325B CENTRAL HEADER #197   02014B50 (33639248)\n-5F325F Created Zip Spec      14 (20) '2.0'\n-5F3260 Created OS            00 (0) 'MS-DOS'\n-5F3261 Extract Zip Spec      14 (20) '2.0'\n-5F3262 Extract OS            00 (0) 'MS-DOS'\n-5F3263 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3265 Compression Method    0000 (0) 'Stored'\n-5F3267 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F326B CRC                   877B2EE8 (2272997096)\n-5F326F Compressed Size       0000215E (8542)\n-5F3273 Uncompressed Size     0000215E (8542)\n-5F3277 Filename Length       007E (126)\n-5F3279 Extra Length          0009 (9)\n-5F327B Comment Length        0000 (0)\n-5F327D Disk Start            0000 (0)\n-5F327F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3281 Ext File Attributes   00000000 (0)\n-5F3285 Local Header Offset   00053298 (340632)\n-5F3289 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3289: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3307 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3309   Length              0005 (5)\n-5F330B   Flags               01 (1) 'Modification'\n-5F330C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3310 CENTRAL HEADER #198   02014B50 (33639248)\n-5F3314 Created Zip Spec      14 (20) '2.0'\n-5F3315 Created OS            00 (0) 'MS-DOS'\n-5F3316 Extract Zip Spec      14 (20) '2.0'\n-5F3317 Extract OS            00 (0) 'MS-DOS'\n-5F3318 General Purpose Flag  0000 (0)\n-5F331A Compression Method    0000 (0) 'Stored'\n-5F331C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3320 CRC                   00000000 (0)\n-5F3324 Compressed Size       00000000 (0)\n-5F3328 Uncompressed Size     00000000 (0)\n-5F332C Filename Length       006C (108)\n-5F332E Extra Length          0009 (9)\n-5F3330 Comment Length        0000 (0)\n-5F3332 Disk Start            0000 (0)\n-5F3334 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3336 Ext File Attributes   00000000 (0)\n-5F333A Local Header Offset   000554AB (349355)\n-5F333E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F333E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F33AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F33AC   Length              0005 (5)\n-5F33AE   Flags               01 (1) 'Modification'\n-5F33AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F33B3 CENTRAL HEADER #199   02014B50 (33639248)\n-5F33B7 Created Zip Spec      14 (20) '2.0'\n-5F33B8 Created OS            00 (0) 'MS-DOS'\n-5F33B9 Extract Zip Spec      14 (20) '2.0'\n-5F33BA Extract OS            00 (0) 'MS-DOS'\n-5F33BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F33BD Compression Method    0000 (0) 'Stored'\n-5F33BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F33C3 CRC                   E43D22D5 (3829211861)\n-5F33C7 Compressed Size       0000147F (5247)\n-5F33CB Uncompressed Size     0000147F (5247)\n-5F33CF Filename Length       0082 (130)\n-5F33D1 Extra Length          0009 (9)\n-5F33D3 Comment Length        0000 (0)\n-5F33D5 Disk Start            0000 (0)\n-5F33D7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F33D9 Ext File Attributes   00000000 (0)\n-5F33DD Local Header Offset   0005553E (349502)\n-5F33E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F33E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3463 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3465   Length              0005 (5)\n-5F3467   Flags               01 (1) 'Modification'\n-5F3468   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F346C CENTRAL HEADER #200   02014B50 (33639248)\n-5F3470 Created Zip Spec      14 (20) '2.0'\n-5F3471 Created OS            00 (0) 'MS-DOS'\n-5F3472 Extract Zip Spec      14 (20) '2.0'\n-5F3473 Extract OS            00 (0) 'MS-DOS'\n-5F3474 General Purpose Flag  0000 (0)\n-5F3476 Compression Method    0000 (0) 'Stored'\n-5F3478 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F347C CRC                   00000000 (0)\n-5F3480 Compressed Size       00000000 (0)\n-5F3484 Uncompressed Size     00000000 (0)\n-5F3488 Filename Length       005E (94)\n-5F348A Extra Length          0009 (9)\n-5F348C Comment Length        0000 (0)\n-5F348E Disk Start            0000 (0)\n-5F3490 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3492 Ext File Attributes   00000000 (0)\n-5F3496 Local Header Offset   00056A76 (354934)\n-5F349A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F349A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F34F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F34FA   Length              0005 (5)\n-5F34FC   Flags               01 (1) 'Modification'\n-5F34FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3501 CENTRAL HEADER #201   02014B50 (33639248)\n-5F3505 Created Zip Spec      14 (20) '2.0'\n-5F3506 Created OS            00 (0) 'MS-DOS'\n-5F3507 Extract Zip Spec      14 (20) '2.0'\n-5F3508 Extract OS            00 (0) 'MS-DOS'\n-5F3509 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F350B Compression Method    0000 (0) 'Stored'\n-5F350D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3511 CRC                   D765846F (3613754479)\n-5F3515 Compressed Size       00001060 (4192)\n-5F3519 Uncompressed Size     00001060 (4192)\n-5F351D Filename Length       0074 (116)\n-5F351F Extra Length          0009 (9)\n-5F3521 Comment Length        0000 (0)\n-5F3523 Disk Start            0000 (0)\n-5F3525 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3527 Ext File Attributes   00000000 (0)\n-5F352B Local Header Offset   00056AFB (355067)\n-5F352F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F352F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F35A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F35A5   Length              0005 (5)\n-5F35A7   Flags               01 (1) 'Modification'\n-5F35A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F35AC CENTRAL HEADER #202   02014B50 (33639248)\n-5F35B0 Created Zip Spec      14 (20) '2.0'\n-5F35B1 Created OS            00 (0) 'MS-DOS'\n-5F35B2 Extract Zip Spec      14 (20) '2.0'\n-5F35B3 Extract OS            00 (0) 'MS-DOS'\n-5F35B4 General Purpose Flag  0000 (0)\n-5F35B6 Compression Method    0000 (0) 'Stored'\n-5F35B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F35BC CRC                   00000000 (0)\n-5F35C0 Compressed Size       00000000 (0)\n-5F35C4 Uncompressed Size     00000000 (0)\n-5F35C8 Filename Length       005E (94)\n-5F35CA Extra Length          0009 (9)\n-5F35CC Comment Length        0000 (0)\n-5F35CE Disk Start            0000 (0)\n-5F35D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F35D2 Ext File Attributes   00000000 (0)\n-5F35D6 Local Header Offset   00057C06 (359430)\n-5F35DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F35DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3638 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F363A   Length              0005 (5)\n-5F363C   Flags               01 (1) 'Modification'\n-5F363D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3641 CENTRAL HEADER #203   02014B50 (33639248)\n-5F3645 Created Zip Spec      14 (20) '2.0'\n-5F3646 Created OS            00 (0) 'MS-DOS'\n-5F3647 Extract Zip Spec      14 (20) '2.0'\n-5F3648 Extract OS            00 (0) 'MS-DOS'\n-5F3649 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F364B Compression Method    0000 (0) 'Stored'\n-5F364D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3651 CRC                   57E394F3 (1474532595)\n-5F3655 Compressed Size       0000115C (4444)\n-5F3659 Uncompressed Size     0000115C (4444)\n-5F365D Filename Length       0074 (116)\n-5F365F Extra Length          0009 (9)\n-5F3661 Comment Length        0000 (0)\n-5F3663 Disk Start            0000 (0)\n-5F3665 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3667 Ext File Attributes   00000000 (0)\n-5F366B Local Header Offset   00057C8B (359563)\n-5F366F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F366F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F36E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F36E5   Length              0005 (5)\n-5F36E7   Flags               01 (1) 'Modification'\n-5F36E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F36EC CENTRAL HEADER #204   02014B50 (33639248)\n-5F36F0 Created Zip Spec      14 (20) '2.0'\n-5F36F1 Created OS            00 (0) 'MS-DOS'\n-5F36F2 Extract Zip Spec      14 (20) '2.0'\n-5F36F3 Extract OS            00 (0) 'MS-DOS'\n-5F36F4 General Purpose Flag  0000 (0)\n-5F36F6 Compression Method    0000 (0) 'Stored'\n-5F36F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F36FC CRC                   00000000 (0)\n-5F3700 Compressed Size       00000000 (0)\n-5F3704 Uncompressed Size     00000000 (0)\n-5F3708 Filename Length       0028 (40)\n-5F370A Extra Length          0009 (9)\n-5F370C Comment Length        0000 (0)\n-5F370E Disk Start            0000 (0)\n-5F3710 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3712 Ext File Attributes   00000000 (0)\n-5F3716 Local Header Offset   00058E92 (364178)\n-5F371A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F371A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3742 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3744   Length              0005 (5)\n-5F3746   Flags               01 (1) 'Modification'\n-5F3747   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F374B CENTRAL HEADER #205   02014B50 (33639248)\n-5F374F Created Zip Spec      14 (20) '2.0'\n-5F3750 Created OS            00 (0) 'MS-DOS'\n-5F3751 Extract Zip Spec      14 (20) '2.0'\n-5F3752 Extract OS            00 (0) 'MS-DOS'\n-5F3753 General Purpose Flag  0000 (0)\n-5F3755 Compression Method    0000 (0) 'Stored'\n-5F3757 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F375B CRC                   00000000 (0)\n-5F375F Compressed Size       00000000 (0)\n-5F3763 Uncompressed Size     00000000 (0)\n-5F3767 Filename Length       002F (47)\n-5F3769 Extra Length          0009 (9)\n-5F376B Comment Length        0000 (0)\n-5F376D Disk Start            0000 (0)\n-5F376F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3771 Ext File Attributes   00000000 (0)\n-5F3775 Local Header Offset   00058EE1 (364257)\n-5F3779 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3779: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F37A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F37AA   Length              0005 (5)\n-5F37AC   Flags               01 (1) 'Modification'\n-5F37AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F37B1 CENTRAL HEADER #206   02014B50 (33639248)\n-5F37B5 Created Zip Spec      14 (20) '2.0'\n-5F37B6 Created OS            00 (0) 'MS-DOS'\n-5F37B7 Extract Zip Spec      14 (20) '2.0'\n-5F37B8 Extract OS            00 (0) 'MS-DOS'\n-5F37B9 General Purpose Flag  0000 (0)\n-5F37BB Compression Method    0000 (0) 'Stored'\n-5F37BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F37C1 CRC                   00000000 (0)\n-5F37C5 Compressed Size       00000000 (0)\n-5F37C9 Uncompressed Size     00000000 (0)\n-5F37CD Filename Length       006E (110)\n-5F37CF Extra Length          0009 (9)\n-5F37D1 Comment Length        0000 (0)\n-5F37D3 Disk Start            0000 (0)\n-5F37D5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F37D7 Ext File Attributes   00000000 (0)\n-5F37DB Local Header Offset   00058F37 (364343)\n-5F37DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F37DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F384D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F384F   Length              0005 (5)\n-5F3851   Flags               01 (1) 'Modification'\n-5F3852   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3856 CENTRAL HEADER #207   02014B50 (33639248)\n-5F385A Created Zip Spec      14 (20) '2.0'\n-5F385B Created OS            00 (0) 'MS-DOS'\n-5F385C Extract Zip Spec      14 (20) '2.0'\n-5F385D Extract OS            00 (0) 'MS-DOS'\n-5F385E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3860 Compression Method    0000 (0) 'Stored'\n-5F3862 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3866 CRC                   4293EC30 (1116990512)\n-5F386A Compressed Size       00001A2C (6700)\n-5F386E Uncompressed Size     00001A2C (6700)\n-5F3872 Filename Length       0084 (132)\n-5F3874 Extra Length          0009 (9)\n-5F3876 Comment Length        0000 (0)\n-5F3878 Disk Start            0000 (0)\n-5F387A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F387C Ext File Attributes   00000000 (0)\n-5F3880 Local Header Offset   00058FCC (364492)\n-5F3884 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n+5F2D71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2D73   Length              0005 (5)\n+5F2D75   Flags               01 (1) 'Modification'\n+5F2D76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2D7A CENTRAL HEADER #104   02014B50 (33639248)\n+5F2D7E Created Zip Spec      14 (20) '2.0'\n+5F2D7F Created OS            00 (0) 'MS-DOS'\n+5F2D80 Extract Zip Spec      14 (20) '2.0'\n+5F2D81 Extract OS            00 (0) 'MS-DOS'\n+5F2D82 General Purpose Flag  0000 (0)\n+5F2D84 Compression Method    0000 (0) 'Stored'\n+5F2D86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2D8A CRC                   00000000 (0)\n+5F2D8E Compressed Size       00000000 (0)\n+5F2D92 Uncompressed Size     00000000 (0)\n+5F2D96 Filename Length       007B (123)\n+5F2D98 Extra Length          0009 (9)\n+5F2D9A Comment Length        0000 (0)\n+5F2D9C Disk Start            0000 (0)\n+5F2D9E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2DA0 Ext File Attributes   00000000 (0)\n+5F2DA4 Local Header Offset   00034F35 (216885)\n+5F2DA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2DA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2E23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2E25   Length              0005 (5)\n+5F2E27   Flags               01 (1) 'Modification'\n+5F2E28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2E2C CENTRAL HEADER #105   02014B50 (33639248)\n+5F2E30 Created Zip Spec      14 (20) '2.0'\n+5F2E31 Created OS            00 (0) 'MS-DOS'\n+5F2E32 Extract Zip Spec      14 (20) '2.0'\n+5F2E33 Extract OS            00 (0) 'MS-DOS'\n+5F2E34 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F2E36 Compression Method    0000 (0) 'Stored'\n+5F2E38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2E3C CRC                   2B6EF697 (728692375)\n+5F2E40 Compressed Size       000008CD (2253)\n+5F2E44 Uncompressed Size     000008CD (2253)\n+5F2E48 Filename Length       0091 (145)\n+5F2E4A Extra Length          0009 (9)\n+5F2E4C Comment Length        0000 (0)\n+5F2E4E Disk Start            0000 (0)\n+5F2E50 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2E52 Ext File Attributes   00000000 (0)\n+5F2E56 Local Header Offset   00034FD7 (217047)\n+5F2E5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F3884: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F2E5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F3908 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F390A   Length              0005 (5)\n-5F390C   Flags               01 (1) 'Modification'\n-5F390D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3911 CENTRAL HEADER #208   02014B50 (33639248)\n-5F3915 Created Zip Spec      14 (20) '2.0'\n-5F3916 Created OS            00 (0) 'MS-DOS'\n-5F3917 Extract Zip Spec      14 (20) '2.0'\n-5F3918 Extract OS            00 (0) 'MS-DOS'\n-5F3919 General Purpose Flag  0000 (0)\n-5F391B Compression Method    0000 (0) 'Stored'\n-5F391D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3921 CRC                   00000000 (0)\n-5F3925 Compressed Size       00000000 (0)\n-5F3929 Uncompressed Size     00000000 (0)\n-5F392D Filename Length       0068 (104)\n-5F392F Extra Length          0009 (9)\n-5F3931 Comment Length        0000 (0)\n-5F3933 Disk Start            0000 (0)\n-5F3935 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3937 Ext File Attributes   00000000 (0)\n-5F393B Local Header Offset   0005AAB3 (371379)\n-5F393F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F393F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F39A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F39A9   Length              0005 (5)\n-5F39AB   Flags               01 (1) 'Modification'\n-5F39AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F39B0 CENTRAL HEADER #209   02014B50 (33639248)\n-5F39B4 Created Zip Spec      14 (20) '2.0'\n-5F39B5 Created OS            00 (0) 'MS-DOS'\n-5F39B6 Extract Zip Spec      14 (20) '2.0'\n-5F39B7 Extract OS            00 (0) 'MS-DOS'\n-5F39B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F39BA Compression Method    0000 (0) 'Stored'\n-5F39BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F39C0 CRC                   83659368 (2204472168)\n-5F39C4 Compressed Size       000019EF (6639)\n-5F39C8 Uncompressed Size     000019EF (6639)\n-5F39CC Filename Length       007E (126)\n-5F39CE Extra Length          0009 (9)\n-5F39D0 Comment Length        0000 (0)\n-5F39D2 Disk Start            0000 (0)\n-5F39D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F39D6 Ext File Attributes   00000000 (0)\n-5F39DA Local Header Offset   0005AB42 (371522)\n-5F39DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F39DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3A5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3A5E   Length              0005 (5)\n-5F3A60   Flags               01 (1) 'Modification'\n-5F3A61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3A65 CENTRAL HEADER #210   02014B50 (33639248)\n-5F3A69 Created Zip Spec      14 (20) '2.0'\n-5F3A6A Created OS            00 (0) 'MS-DOS'\n-5F3A6B Extract Zip Spec      14 (20) '2.0'\n-5F3A6C Extract OS            00 (0) 'MS-DOS'\n-5F3A6D General Purpose Flag  0000 (0)\n-5F3A6F Compression Method    0000 (0) 'Stored'\n-5F3A71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3A75 CRC                   00000000 (0)\n-5F3A79 Compressed Size       00000000 (0)\n-5F3A7D Uncompressed Size     00000000 (0)\n-5F3A81 Filename Length       006E (110)\n-5F3A83 Extra Length          0009 (9)\n-5F3A85 Comment Length        0000 (0)\n-5F3A87 Disk Start            0000 (0)\n-5F3A89 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3A8B Ext File Attributes   00000000 (0)\n-5F3A8F Local Header Offset   0005C5E6 (378342)\n-5F3A93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3A93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3B01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3B03   Length              0005 (5)\n-5F3B05   Flags               01 (1) 'Modification'\n-5F3B06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3B0A CENTRAL HEADER #211   02014B50 (33639248)\n-5F3B0E Created Zip Spec      14 (20) '2.0'\n-5F3B0F Created OS            00 (0) 'MS-DOS'\n-5F3B10 Extract Zip Spec      14 (20) '2.0'\n-5F3B11 Extract OS            00 (0) 'MS-DOS'\n-5F3B12 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3B14 Compression Method    0000 (0) 'Stored'\n-5F3B16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3B1A CRC                   73F3DBE5 (1945361381)\n-5F3B1E Compressed Size       00001AFA (6906)\n-5F3B22 Uncompressed Size     00001AFA (6906)\n-5F3B26 Filename Length       0084 (132)\n-5F3B28 Extra Length          0009 (9)\n-5F3B2A Comment Length        0000 (0)\n-5F3B2C Disk Start            0000 (0)\n-5F3B2E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3B30 Ext File Attributes   00000000 (0)\n-5F3B34 Local Header Offset   0005C67B (378491)\n-5F3B38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n+5F2EEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2EED   Length              0005 (5)\n+5F2EEF   Flags               01 (1) 'Modification'\n+5F2EF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2EF4 CENTRAL HEADER #106   02014B50 (33639248)\n+5F2EF8 Created Zip Spec      14 (20) '2.0'\n+5F2EF9 Created OS            00 (0) 'MS-DOS'\n+5F2EFA Extract Zip Spec      14 (20) '2.0'\n+5F2EFB Extract OS            00 (0) 'MS-DOS'\n+5F2EFC General Purpose Flag  0000 (0)\n+5F2EFE Compression Method    0000 (0) 'Stored'\n+5F2F00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2F04 CRC                   00000000 (0)\n+5F2F08 Compressed Size       00000000 (0)\n+5F2F0C Uncompressed Size     00000000 (0)\n+5F2F10 Filename Length       0034 (52)\n+5F2F12 Extra Length          0009 (9)\n+5F2F14 Comment Length        0000 (0)\n+5F2F16 Disk Start            0000 (0)\n+5F2F18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2F1A Ext File Attributes   00000000 (0)\n+5F2F1E Local Header Offset   0003596C (219500)\n+5F2F22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2F22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2F56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2F58   Length              0005 (5)\n+5F2F5A   Flags               01 (1) 'Modification'\n+5F2F5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2F5F CENTRAL HEADER #107   02014B50 (33639248)\n+5F2F63 Created Zip Spec      14 (20) '2.0'\n+5F2F64 Created OS            00 (0) 'MS-DOS'\n+5F2F65 Extract Zip Spec      14 (20) '2.0'\n+5F2F66 Extract OS            00 (0) 'MS-DOS'\n+5F2F67 General Purpose Flag  0000 (0)\n+5F2F69 Compression Method    0000 (0) 'Stored'\n+5F2F6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2F6F CRC                   00000000 (0)\n+5F2F73 Compressed Size       00000000 (0)\n+5F2F77 Uncompressed Size     00000000 (0)\n+5F2F7B Filename Length       003B (59)\n+5F2F7D Extra Length          0009 (9)\n+5F2F7F Comment Length        0000 (0)\n+5F2F81 Disk Start            0000 (0)\n+5F2F83 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2F85 Ext File Attributes   00000000 (0)\n+5F2F89 Local Header Offset   000359C7 (219591)\n+5F2F8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2F8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F2FC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F2FCA   Length              0005 (5)\n+5F2FCC   Flags               01 (1) 'Modification'\n+5F2FCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F2FD1 CENTRAL HEADER #108   02014B50 (33639248)\n+5F2FD5 Created Zip Spec      14 (20) '2.0'\n+5F2FD6 Created OS            00 (0) 'MS-DOS'\n+5F2FD7 Extract Zip Spec      14 (20) '2.0'\n+5F2FD8 Extract OS            00 (0) 'MS-DOS'\n+5F2FD9 General Purpose Flag  0000 (0)\n+5F2FDB Compression Method    0000 (0) 'Stored'\n+5F2FDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F2FE1 CRC                   00000000 (0)\n+5F2FE5 Compressed Size       00000000 (0)\n+5F2FE9 Uncompressed Size     00000000 (0)\n+5F2FED Filename Length       007F (127)\n+5F2FEF Extra Length          0009 (9)\n+5F2FF1 Comment Length        0000 (0)\n+5F2FF3 Disk Start            0000 (0)\n+5F2FF5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F2FF7 Ext File Attributes   00000000 (0)\n+5F2FFB Local Header Offset   00035A29 (219689)\n+5F2FFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F2FFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F307E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3080   Length              0005 (5)\n+5F3082   Flags               01 (1) 'Modification'\n+5F3083   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3087 CENTRAL HEADER #109   02014B50 (33639248)\n+5F308B Created Zip Spec      14 (20) '2.0'\n+5F308C Created OS            00 (0) 'MS-DOS'\n+5F308D Extract Zip Spec      14 (20) '2.0'\n+5F308E Extract OS            00 (0) 'MS-DOS'\n+5F308F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3091 Compression Method    0000 (0) 'Stored'\n+5F3093 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3097 CRC                   9AFFB21B (2600448539)\n+5F309B Compressed Size       0000064E (1614)\n+5F309F Uncompressed Size     0000064E (1614)\n+5F30A3 Filename Length       0095 (149)\n+5F30A5 Extra Length          0009 (9)\n+5F30A7 Comment Length        0000 (0)\n+5F30A9 Disk Start            0000 (0)\n+5F30AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F30AD Ext File Attributes   00000000 (0)\n+5F30B1 Local Header Offset   00035ACF (219855)\n+5F30B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F3B38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F30B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F3BBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3BBE   Length              0005 (5)\n-5F3BC0   Flags               01 (1) 'Modification'\n-5F3BC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3BC5 CENTRAL HEADER #212   02014B50 (33639248)\n-5F3BC9 Created Zip Spec      14 (20) '2.0'\n-5F3BCA Created OS            00 (0) 'MS-DOS'\n-5F3BCB Extract Zip Spec      14 (20) '2.0'\n-5F3BCC Extract OS            00 (0) 'MS-DOS'\n-5F3BCD General Purpose Flag  0000 (0)\n-5F3BCF Compression Method    0000 (0) 'Stored'\n-5F3BD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3BD5 CRC                   00000000 (0)\n-5F3BD9 Compressed Size       00000000 (0)\n-5F3BDD Uncompressed Size     00000000 (0)\n-5F3BE1 Filename Length       0068 (104)\n-5F3BE3 Extra Length          0009 (9)\n-5F3BE5 Comment Length        0000 (0)\n-5F3BE7 Disk Start            0000 (0)\n-5F3BE9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3BEB Ext File Attributes   00000000 (0)\n-5F3BEF Local Header Offset   0005E230 (385584)\n-5F3BF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3BF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3C5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3C5D   Length              0005 (5)\n-5F3C5F   Flags               01 (1) 'Modification'\n-5F3C60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3C64 CENTRAL HEADER #213   02014B50 (33639248)\n-5F3C68 Created Zip Spec      14 (20) '2.0'\n-5F3C69 Created OS            00 (0) 'MS-DOS'\n-5F3C6A Extract Zip Spec      14 (20) '2.0'\n-5F3C6B Extract OS            00 (0) 'MS-DOS'\n-5F3C6C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3C6E Compression Method    0000 (0) 'Stored'\n-5F3C70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3C74 CRC                   847E83D6 (2222883798)\n-5F3C78 Compressed Size       00001E83 (7811)\n-5F3C7C Uncompressed Size     00001E83 (7811)\n-5F3C80 Filename Length       007E (126)\n-5F3C82 Extra Length          0009 (9)\n-5F3C84 Comment Length        0000 (0)\n-5F3C86 Disk Start            0000 (0)\n-5F3C88 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3C8A Ext File Attributes   00000000 (0)\n-5F3C8E Local Header Offset   0005E2BF (385727)\n-5F3C92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3C92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3D10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3D12   Length              0005 (5)\n-5F3D14   Flags               01 (1) 'Modification'\n-5F3D15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3D19 CENTRAL HEADER #214   02014B50 (33639248)\n-5F3D1D Created Zip Spec      14 (20) '2.0'\n-5F3D1E Created OS            00 (0) 'MS-DOS'\n-5F3D1F Extract Zip Spec      14 (20) '2.0'\n-5F3D20 Extract OS            00 (0) 'MS-DOS'\n-5F3D21 General Purpose Flag  0000 (0)\n-5F3D23 Compression Method    0000 (0) 'Stored'\n-5F3D25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3D29 CRC                   00000000 (0)\n-5F3D2D Compressed Size       00000000 (0)\n-5F3D31 Uncompressed Size     00000000 (0)\n-5F3D35 Filename Length       0028 (40)\n-5F3D37 Extra Length          0009 (9)\n-5F3D39 Comment Length        0000 (0)\n-5F3D3B Disk Start            0000 (0)\n-5F3D3D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3D3F Ext File Attributes   00000000 (0)\n-5F3D43 Local Header Offset   000601F7 (393719)\n-5F3D47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3D47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3D6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3D71   Length              0005 (5)\n-5F3D73   Flags               01 (1) 'Modification'\n-5F3D74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3D78 CENTRAL HEADER #215   02014B50 (33639248)\n-5F3D7C Created Zip Spec      14 (20) '2.0'\n-5F3D7D Created OS            00 (0) 'MS-DOS'\n-5F3D7E Extract Zip Spec      14 (20) '2.0'\n-5F3D7F Extract OS            00 (0) 'MS-DOS'\n-5F3D80 General Purpose Flag  0000 (0)\n-5F3D82 Compression Method    0000 (0) 'Stored'\n-5F3D84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3D88 CRC                   00000000 (0)\n-5F3D8C Compressed Size       00000000 (0)\n-5F3D90 Uncompressed Size     00000000 (0)\n-5F3D94 Filename Length       002F (47)\n-5F3D96 Extra Length          0009 (9)\n-5F3D98 Comment Length        0000 (0)\n-5F3D9A Disk Start            0000 (0)\n-5F3D9C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3D9E Ext File Attributes   00000000 (0)\n-5F3DA2 Local Header Offset   00060246 (393798)\n-5F3DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3DD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3DD7   Length              0005 (5)\n-5F3DD9   Flags               01 (1) 'Modification'\n-5F3DDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3DDE CENTRAL HEADER #216   02014B50 (33639248)\n-5F3DE2 Created Zip Spec      14 (20) '2.0'\n-5F3DE3 Created OS            00 (0) 'MS-DOS'\n-5F3DE4 Extract Zip Spec      14 (20) '2.0'\n-5F3DE5 Extract OS            00 (0) 'MS-DOS'\n-5F3DE6 General Purpose Flag  0000 (0)\n-5F3DE8 Compression Method    0000 (0) 'Stored'\n-5F3DEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3DEE CRC                   00000000 (0)\n-5F3DF2 Compressed Size       00000000 (0)\n-5F3DF6 Uncompressed Size     00000000 (0)\n-5F3DFA Filename Length       006E (110)\n-5F3DFC Extra Length          0009 (9)\n-5F3DFE Comment Length        0000 (0)\n-5F3E00 Disk Start            0000 (0)\n-5F3E02 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3E04 Ext File Attributes   00000000 (0)\n-5F3E08 Local Header Offset   0006029C (393884)\n-5F3E0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3E0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3E7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3E7C   Length              0005 (5)\n-5F3E7E   Flags               01 (1) 'Modification'\n-5F3E7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3E83 CENTRAL HEADER #217   02014B50 (33639248)\n-5F3E87 Created Zip Spec      14 (20) '2.0'\n-5F3E88 Created OS            00 (0) 'MS-DOS'\n-5F3E89 Extract Zip Spec      14 (20) '2.0'\n-5F3E8A Extract OS            00 (0) 'MS-DOS'\n-5F3E8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3E8D Compression Method    0000 (0) 'Stored'\n-5F3E8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3E93 CRC                   8DCDE743 (2379081539)\n-5F3E97 Compressed Size       00003DFB (15867)\n-5F3E9B Uncompressed Size     00003DFB (15867)\n-5F3E9F Filename Length       0084 (132)\n-5F3EA1 Extra Length          0009 (9)\n-5F3EA3 Comment Length        0000 (0)\n-5F3EA5 Disk Start            0000 (0)\n-5F3EA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3EA9 Ext File Attributes   00000000 (0)\n-5F3EAD Local Header Offset   00060331 (394033)\n-5F3EB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n+5F314A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F314C   Length              0005 (5)\n+5F314E   Flags               01 (1) 'Modification'\n+5F314F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3153 CENTRAL HEADER #110   02014B50 (33639248)\n+5F3157 Created Zip Spec      14 (20) '2.0'\n+5F3158 Created OS            00 (0) 'MS-DOS'\n+5F3159 Extract Zip Spec      14 (20) '2.0'\n+5F315A Extract OS            00 (0) 'MS-DOS'\n+5F315B General Purpose Flag  0000 (0)\n+5F315D Compression Method    0000 (0) 'Stored'\n+5F315F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3163 CRC                   00000000 (0)\n+5F3167 Compressed Size       00000000 (0)\n+5F316B Uncompressed Size     00000000 (0)\n+5F316F Filename Length       007B (123)\n+5F3171 Extra Length          0009 (9)\n+5F3173 Comment Length        0000 (0)\n+5F3175 Disk Start            0000 (0)\n+5F3177 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3179 Ext File Attributes   00000000 (0)\n+5F317D Local Header Offset   000361E9 (221673)\n+5F3181 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3181: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F31FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F31FE   Length              0005 (5)\n+5F3200   Flags               01 (1) 'Modification'\n+5F3201   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3205 CENTRAL HEADER #111   02014B50 (33639248)\n+5F3209 Created Zip Spec      14 (20) '2.0'\n+5F320A Created OS            00 (0) 'MS-DOS'\n+5F320B Extract Zip Spec      14 (20) '2.0'\n+5F320C Extract OS            00 (0) 'MS-DOS'\n+5F320D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F320F Compression Method    0000 (0) 'Stored'\n+5F3211 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3215 CRC                   88CF36AA (2295281322)\n+5F3219 Compressed Size       00000A4F (2639)\n+5F321D Uncompressed Size     00000A4F (2639)\n+5F3221 Filename Length       0091 (145)\n+5F3223 Extra Length          0009 (9)\n+5F3225 Comment Length        0000 (0)\n+5F3227 Disk Start            0000 (0)\n+5F3229 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F322B Ext File Attributes   00000000 (0)\n+5F322F Local Header Offset   0003628B (221835)\n+5F3233 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F3EB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F3233: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F3F35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3F37   Length              0005 (5)\n-5F3F39   Flags               01 (1) 'Modification'\n-5F3F3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3F3E CENTRAL HEADER #218   02014B50 (33639248)\n-5F3F42 Created Zip Spec      14 (20) '2.0'\n-5F3F43 Created OS            00 (0) 'MS-DOS'\n-5F3F44 Extract Zip Spec      14 (20) '2.0'\n-5F3F45 Extract OS            00 (0) 'MS-DOS'\n-5F3F46 General Purpose Flag  0000 (0)\n-5F3F48 Compression Method    0000 (0) 'Stored'\n-5F3F4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3F4E CRC                   00000000 (0)\n-5F3F52 Compressed Size       00000000 (0)\n-5F3F56 Uncompressed Size     00000000 (0)\n-5F3F5A Filename Length       0068 (104)\n-5F3F5C Extra Length          0009 (9)\n-5F3F5E Comment Length        0000 (0)\n-5F3F60 Disk Start            0000 (0)\n-5F3F62 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F3F64 Ext File Attributes   00000000 (0)\n-5F3F68 Local Header Offset   000641E7 (410087)\n-5F3F6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F3F6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F3FD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F3FD6   Length              0005 (5)\n-5F3FD8   Flags               01 (1) 'Modification'\n-5F3FD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F3FDD CENTRAL HEADER #219   02014B50 (33639248)\n-5F3FE1 Created Zip Spec      14 (20) '2.0'\n-5F3FE2 Created OS            00 (0) 'MS-DOS'\n-5F3FE3 Extract Zip Spec      14 (20) '2.0'\n-5F3FE4 Extract OS            00 (0) 'MS-DOS'\n-5F3FE5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F3FE7 Compression Method    0000 (0) 'Stored'\n-5F3FE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F3FED CRC                   46F84C94 (1190677652)\n-5F3FF1 Compressed Size       00003DB7 (15799)\n-5F3FF5 Uncompressed Size     00003DB7 (15799)\n-5F3FF9 Filename Length       007E (126)\n-5F3FFB Extra Length          0009 (9)\n-5F3FFD Comment Length        0000 (0)\n-5F3FFF Disk Start            0000 (0)\n-5F4001 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4003 Ext File Attributes   00000000 (0)\n-5F4007 Local Header Offset   00064276 (410230)\n-5F400B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F400B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4089 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F408B   Length              0005 (5)\n-5F408D   Flags               01 (1) 'Modification'\n-5F408E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4092 CENTRAL HEADER #220   02014B50 (33639248)\n-5F4096 Created Zip Spec      14 (20) '2.0'\n-5F4097 Created OS            00 (0) 'MS-DOS'\n-5F4098 Extract Zip Spec      14 (20) '2.0'\n-5F4099 Extract OS            00 (0) 'MS-DOS'\n-5F409A General Purpose Flag  0000 (0)\n-5F409C Compression Method    0000 (0) 'Stored'\n-5F409E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F40A2 CRC                   00000000 (0)\n-5F40A6 Compressed Size       00000000 (0)\n-5F40AA Uncompressed Size     00000000 (0)\n-5F40AE Filename Length       006E (110)\n-5F40B0 Extra Length          0009 (9)\n-5F40B2 Comment Length        0000 (0)\n-5F40B4 Disk Start            0000 (0)\n-5F40B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F40B8 Ext File Attributes   00000000 (0)\n-5F40BC Local Header Offset   000680E2 (426210)\n-5F40C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F40C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F412E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4130   Length              0005 (5)\n-5F4132   Flags               01 (1) 'Modification'\n-5F4133   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4137 CENTRAL HEADER #221   02014B50 (33639248)\n-5F413B Created Zip Spec      14 (20) '2.0'\n-5F413C Created OS            00 (0) 'MS-DOS'\n-5F413D Extract Zip Spec      14 (20) '2.0'\n-5F413E Extract OS            00 (0) 'MS-DOS'\n-5F413F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F4141 Compression Method    0000 (0) 'Stored'\n-5F4143 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4147 CRC                   96FAF425 (2533028901)\n-5F414B Compressed Size       000028CF (10447)\n-5F414F Uncompressed Size     000028CF (10447)\n-5F4153 Filename Length       0084 (132)\n-5F4155 Extra Length          0009 (9)\n-5F4157 Comment Length        0000 (0)\n-5F4159 Disk Start            0000 (0)\n-5F415B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F415D Ext File Attributes   00000000 (0)\n-5F4161 Local Header Offset   00068177 (426359)\n-5F4165 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5F32C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F32C6   Length              0005 (5)\n+5F32C8   Flags               01 (1) 'Modification'\n+5F32C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F32CD CENTRAL HEADER #112   02014B50 (33639248)\n+5F32D1 Created Zip Spec      14 (20) '2.0'\n+5F32D2 Created OS            00 (0) 'MS-DOS'\n+5F32D3 Extract Zip Spec      14 (20) '2.0'\n+5F32D4 Extract OS            00 (0) 'MS-DOS'\n+5F32D5 General Purpose Flag  0000 (0)\n+5F32D7 Compression Method    0000 (0) 'Stored'\n+5F32D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F32DD CRC                   00000000 (0)\n+5F32E1 Compressed Size       00000000 (0)\n+5F32E5 Uncompressed Size     00000000 (0)\n+5F32E9 Filename Length       0084 (132)\n+5F32EB Extra Length          0009 (9)\n+5F32ED Comment Length        0000 (0)\n+5F32EF Disk Start            0000 (0)\n+5F32F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F32F3 Ext File Attributes   00000000 (0)\n+5F32F7 Local Header Offset   00036DA2 (224674)\n+5F32FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x5F4165: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F32FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F41E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F41EB   Length              0005 (5)\n-5F41ED   Flags               01 (1) 'Modification'\n-5F41EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F41F2 CENTRAL HEADER #222   02014B50 (33639248)\n-5F41F6 Created Zip Spec      14 (20) '2.0'\n-5F41F7 Created OS            00 (0) 'MS-DOS'\n-5F41F8 Extract Zip Spec      14 (20) '2.0'\n-5F41F9 Extract OS            00 (0) 'MS-DOS'\n-5F41FA General Purpose Flag  0000 (0)\n-5F41FC Compression Method    0000 (0) 'Stored'\n-5F41FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4202 CRC                   00000000 (0)\n-5F4206 Compressed Size       00000000 (0)\n-5F420A Uncompressed Size     00000000 (0)\n-5F420E Filename Length       0068 (104)\n-5F4210 Extra Length          0009 (9)\n-5F4212 Comment Length        0000 (0)\n-5F4214 Disk Start            0000 (0)\n-5F4216 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4218 Ext File Attributes   00000000 (0)\n-5F421C Local Header Offset   0006AB01 (436993)\n-5F4220 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4220: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4288 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F428A   Length              0005 (5)\n-5F428C   Flags               01 (1) 'Modification'\n-5F428D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4291 CENTRAL HEADER #223   02014B50 (33639248)\n-5F4295 Created Zip Spec      14 (20) '2.0'\n-5F4296 Created OS            00 (0) 'MS-DOS'\n-5F4297 Extract Zip Spec      14 (20) '2.0'\n-5F4298 Extract OS            00 (0) 'MS-DOS'\n-5F4299 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F429B Compression Method    0000 (0) 'Stored'\n-5F429D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F42A1 CRC                   77DFCD97 (2011155863)\n-5F42A5 Compressed Size       00002C4A (11338)\n-5F42A9 Uncompressed Size     00002C4A (11338)\n-5F42AD Filename Length       007E (126)\n-5F42AF Extra Length          0009 (9)\n-5F42B1 Comment Length        0000 (0)\n-5F42B3 Disk Start            0000 (0)\n-5F42B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F42B7 Ext File Attributes   00000000 (0)\n-5F42BB Local Header Offset   0006AB90 (437136)\n-5F42BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F42BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F433D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F433F   Length              0005 (5)\n-5F4341   Flags               01 (1) 'Modification'\n-5F4342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4346 CENTRAL HEADER #224   02014B50 (33639248)\n-5F434A Created Zip Spec      14 (20) '2.0'\n-5F434B Created OS            00 (0) 'MS-DOS'\n-5F434C Extract Zip Spec      14 (20) '2.0'\n-5F434D Extract OS            00 (0) 'MS-DOS'\n-5F434E General Purpose Flag  0000 (0)\n-5F4350 Compression Method    0000 (0) 'Stored'\n-5F4352 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4356 CRC                   00000000 (0)\n-5F435A Compressed Size       00000000 (0)\n-5F435E Uncompressed Size     00000000 (0)\n-5F4362 Filename Length       0028 (40)\n-5F4364 Extra Length          0009 (9)\n-5F4366 Comment Length        0000 (0)\n-5F4368 Disk Start            0000 (0)\n-5F436A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F436C Ext File Attributes   00000000 (0)\n-5F4370 Local Header Offset   0006D88F (448655)\n-5F4374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F439C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F439E   Length              0005 (5)\n-5F43A0   Flags               01 (1) 'Modification'\n-5F43A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F43A5 CENTRAL HEADER #225   02014B50 (33639248)\n-5F43A9 Created Zip Spec      14 (20) '2.0'\n-5F43AA Created OS            00 (0) 'MS-DOS'\n-5F43AB Extract Zip Spec      14 (20) '2.0'\n-5F43AC Extract OS            00 (0) 'MS-DOS'\n-5F43AD General Purpose Flag  0000 (0)\n-5F43AF Compression Method    0000 (0) 'Stored'\n-5F43B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F43B5 CRC                   00000000 (0)\n-5F43B9 Compressed Size       00000000 (0)\n-5F43BD Uncompressed Size     00000000 (0)\n-5F43C1 Filename Length       002F (47)\n-5F43C3 Extra Length          0009 (9)\n-5F43C5 Comment Length        0000 (0)\n-5F43C7 Disk Start            0000 (0)\n-5F43C9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F43CB Ext File Attributes   00000000 (0)\n-5F43CF Local Header Offset   0006D8DE (448734)\n-5F43D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F43D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4402 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4404   Length              0005 (5)\n-5F4406   Flags               01 (1) 'Modification'\n-5F4407   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F440B CENTRAL HEADER #226   02014B50 (33639248)\n-5F440F Created Zip Spec      14 (20) '2.0'\n-5F4410 Created OS            00 (0) 'MS-DOS'\n-5F4411 Extract Zip Spec      14 (20) '2.0'\n-5F4412 Extract OS            00 (0) 'MS-DOS'\n-5F4413 General Purpose Flag  0000 (0)\n-5F4415 Compression Method    0000 (0) 'Stored'\n-5F4417 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F441B CRC                   00000000 (0)\n-5F441F Compressed Size       00000000 (0)\n-5F4423 Uncompressed Size     00000000 (0)\n-5F4427 Filename Length       006E (110)\n-5F4429 Extra Length          0009 (9)\n-5F442B Comment Length        0000 (0)\n-5F442D Disk Start            0000 (0)\n-5F442F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4431 Ext File Attributes   00000000 (0)\n-5F4435 Local Header Offset   0006D934 (448820)\n-5F4439 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4439: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F44A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F44A9   Length              0005 (5)\n-5F44AB   Flags               01 (1) 'Modification'\n-5F44AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F44B0 CENTRAL HEADER #227   02014B50 (33639248)\n-5F44B4 Created Zip Spec      14 (20) '2.0'\n-5F44B5 Created OS            00 (0) 'MS-DOS'\n-5F44B6 Extract Zip Spec      14 (20) '2.0'\n-5F44B7 Extract OS            00 (0) 'MS-DOS'\n-5F44B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F44BA Compression Method    0000 (0) 'Stored'\n-5F44BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F44C0 CRC                   249CCFCD (614256589)\n-5F44C4 Compressed Size       00005101 (20737)\n-5F44C8 Uncompressed Size     00005101 (20737)\n-5F44CC Filename Length       0084 (132)\n-5F44CE Extra Length          0009 (9)\n-5F44D0 Comment Length        0000 (0)\n-5F44D2 Disk Start            0000 (0)\n-5F44D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F44D6 Ext File Attributes   00000000 (0)\n-5F44DA Local Header Offset   0006D9C9 (448969)\n-5F44DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n+5F337F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3381   Length              0005 (5)\n+5F3383   Flags               01 (1) 'Modification'\n+5F3384   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3388 CENTRAL HEADER #113   02014B50 (33639248)\n+5F338C Created Zip Spec      14 (20) '2.0'\n+5F338D Created OS            00 (0) 'MS-DOS'\n+5F338E Extract Zip Spec      14 (20) '2.0'\n+5F338F Extract OS            00 (0) 'MS-DOS'\n+5F3390 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3392 Compression Method    0000 (0) 'Stored'\n+5F3394 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3398 CRC                   217E01B2 (561906098)\n+5F339C Compressed Size       00000D09 (3337)\n+5F33A0 Uncompressed Size     00000D09 (3337)\n+5F33A4 Filename Length       009A (154)\n+5F33A6 Extra Length          0009 (9)\n+5F33A8 Comment Length        0000 (0)\n+5F33AA Disk Start            0000 (0)\n+5F33AC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F33AE Ext File Attributes   00000000 (0)\n+5F33B2 Local Header Offset   00036E4D (224845)\n+5F33B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F44DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F33B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F4562 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4564   Length              0005 (5)\n-5F4566   Flags               01 (1) 'Modification'\n-5F4567   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F456B CENTRAL HEADER #228   02014B50 (33639248)\n-5F456F Created Zip Spec      14 (20) '2.0'\n-5F4570 Created OS            00 (0) 'MS-DOS'\n-5F4571 Extract Zip Spec      14 (20) '2.0'\n-5F4572 Extract OS            00 (0) 'MS-DOS'\n-5F4573 General Purpose Flag  0000 (0)\n-5F4575 Compression Method    0000 (0) 'Stored'\n-5F4577 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F457B CRC                   00000000 (0)\n-5F457F Compressed Size       00000000 (0)\n-5F4583 Uncompressed Size     00000000 (0)\n-5F4587 Filename Length       0068 (104)\n-5F4589 Extra Length          0009 (9)\n-5F458B Comment Length        0000 (0)\n-5F458D Disk Start            0000 (0)\n-5F458F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4591 Ext File Attributes   00000000 (0)\n-5F4595 Local Header Offset   00072B85 (469893)\n-5F4599 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4599: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4601 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4603   Length              0005 (5)\n-5F4605   Flags               01 (1) 'Modification'\n-5F4606   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F460A CENTRAL HEADER #229   02014B50 (33639248)\n-5F460E Created Zip Spec      14 (20) '2.0'\n-5F460F Created OS            00 (0) 'MS-DOS'\n-5F4610 Extract Zip Spec      14 (20) '2.0'\n-5F4611 Extract OS            00 (0) 'MS-DOS'\n-5F4612 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F4614 Compression Method    0000 (0) 'Stored'\n-5F4616 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F461A CRC                   46DA6369 (1188717417)\n-5F461E Compressed Size       00003DB7 (15799)\n-5F4622 Uncompressed Size     00003DB7 (15799)\n-5F4626 Filename Length       007E (126)\n-5F4628 Extra Length          0009 (9)\n-5F462A Comment Length        0000 (0)\n-5F462C Disk Start            0000 (0)\n-5F462E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4630 Ext File Attributes   00000000 (0)\n-5F4634 Local Header Offset   00072C14 (470036)\n-5F4638 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4638: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F46B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F46B8   Length              0005 (5)\n-5F46BA   Flags               01 (1) 'Modification'\n-5F46BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F46BF CENTRAL HEADER #230   02014B50 (33639248)\n-5F46C3 Created Zip Spec      14 (20) '2.0'\n-5F46C4 Created OS            00 (0) 'MS-DOS'\n-5F46C5 Extract Zip Spec      14 (20) '2.0'\n-5F46C6 Extract OS            00 (0) 'MS-DOS'\n-5F46C7 General Purpose Flag  0000 (0)\n-5F46C9 Compression Method    0000 (0) 'Stored'\n-5F46CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F46CF CRC                   00000000 (0)\n-5F46D3 Compressed Size       00000000 (0)\n-5F46D7 Uncompressed Size     00000000 (0)\n-5F46DB Filename Length       006E (110)\n-5F46DD Extra Length          0009 (9)\n-5F46DF Comment Length        0000 (0)\n-5F46E1 Disk Start            0000 (0)\n-5F46E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F46E5 Ext File Attributes   00000000 (0)\n-5F46E9 Local Header Offset   00076A80 (486016)\n-5F46ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F46ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F475B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F475D   Length              0005 (5)\n-5F475F   Flags               01 (1) 'Modification'\n-5F4760   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4764 CENTRAL HEADER #231   02014B50 (33639248)\n-5F4768 Created Zip Spec      14 (20) '2.0'\n-5F4769 Created OS            00 (0) 'MS-DOS'\n-5F476A Extract Zip Spec      14 (20) '2.0'\n-5F476B Extract OS            00 (0) 'MS-DOS'\n-5F476C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F476E Compression Method    0000 (0) 'Stored'\n-5F4770 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4774 CRC                   6668C19E (1718141342)\n-5F4778 Compressed Size       00009C3B (39995)\n-5F477C Uncompressed Size     00009C3B (39995)\n-5F4780 Filename Length       0084 (132)\n-5F4782 Extra Length          0009 (9)\n-5F4784 Comment Length        0000 (0)\n-5F4786 Disk Start            0000 (0)\n-5F4788 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F478A Ext File Attributes   00000000 (0)\n-5F478E Local Header Offset   00076B15 (486165)\n-5F4792 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             '\n+5F3450 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3452   Length              0005 (5)\n+5F3454   Flags               01 (1) 'Modification'\n+5F3455   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3459 CENTRAL HEADER #114   02014B50 (33639248)\n+5F345D Created Zip Spec      14 (20) '2.0'\n+5F345E Created OS            00 (0) 'MS-DOS'\n+5F345F Extract Zip Spec      14 (20) '2.0'\n+5F3460 Extract OS            00 (0) 'MS-DOS'\n+5F3461 General Purpose Flag  0000 (0)\n+5F3463 Compression Method    0000 (0) 'Stored'\n+5F3465 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3469 CRC                   00000000 (0)\n+5F346D Compressed Size       00000000 (0)\n+5F3471 Uncompressed Size     00000000 (0)\n+5F3475 Filename Length       0079 (121)\n+5F3477 Extra Length          0009 (9)\n+5F3479 Comment Length        0000 (0)\n+5F347B Disk Start            0000 (0)\n+5F347D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F347F Ext File Attributes   00000000 (0)\n+5F3483 Local Header Offset   00037C27 (228391)\n+5F3487 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3487: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3500 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3502   Length              0005 (5)\n+5F3504   Flags               01 (1) 'Modification'\n+5F3505   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3509 CENTRAL HEADER #115   02014B50 (33639248)\n+5F350D Created Zip Spec      14 (20) '2.0'\n+5F350E Created OS            00 (0) 'MS-DOS'\n+5F350F Extract Zip Spec      14 (20) '2.0'\n+5F3510 Extract OS            00 (0) 'MS-DOS'\n+5F3511 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3513 Compression Method    0000 (0) 'Stored'\n+5F3515 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3519 CRC                   9640338D (2520789901)\n+5F351D Compressed Size       000013DD (5085)\n+5F3521 Uncompressed Size     000013DD (5085)\n+5F3525 Filename Length       008F (143)\n+5F3527 Extra Length          0009 (9)\n+5F3529 Comment Length        0000 (0)\n+5F352B Disk Start            0000 (0)\n+5F352D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F352F Ext File Attributes   00000000 (0)\n+5F3533 Local Header Offset   00037CC7 (228551)\n+5F3537 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3537: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F35C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F35C8   Length              0005 (5)\n+5F35CA   Flags               01 (1) 'Modification'\n+5F35CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F35CF CENTRAL HEADER #116   02014B50 (33639248)\n+5F35D3 Created Zip Spec      14 (20) '2.0'\n+5F35D4 Created OS            00 (0) 'MS-DOS'\n+5F35D5 Extract Zip Spec      14 (20) '2.0'\n+5F35D6 Extract OS            00 (0) 'MS-DOS'\n+5F35D7 General Purpose Flag  0000 (0)\n+5F35D9 Compression Method    0000 (0) 'Stored'\n+5F35DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F35DF CRC                   00000000 (0)\n+5F35E3 Compressed Size       00000000 (0)\n+5F35E7 Uncompressed Size     00000000 (0)\n+5F35EB Filename Length       007B (123)\n+5F35ED Extra Length          0009 (9)\n+5F35EF Comment Length        0000 (0)\n+5F35F1 Disk Start            0000 (0)\n+5F35F3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F35F5 Ext File Attributes   00000000 (0)\n+5F35F9 Local Header Offset   0003916A (233834)\n+5F35FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F35FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3678 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F367A   Length              0005 (5)\n+5F367C   Flags               01 (1) 'Modification'\n+5F367D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3681 CENTRAL HEADER #117   02014B50 (33639248)\n+5F3685 Created Zip Spec      14 (20) '2.0'\n+5F3686 Created OS            00 (0) 'MS-DOS'\n+5F3687 Extract Zip Spec      14 (20) '2.0'\n+5F3688 Extract OS            00 (0) 'MS-DOS'\n+5F3689 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F368B Compression Method    0000 (0) 'Stored'\n+5F368D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3691 CRC                   5232B519 (1379054873)\n+5F3695 Compressed Size       00001C1F (7199)\n+5F3699 Uncompressed Size     00001C1F (7199)\n+5F369D Filename Length       0091 (145)\n+5F369F Extra Length          0009 (9)\n+5F36A1 Comment Length        0000 (0)\n+5F36A3 Disk Start            0000 (0)\n+5F36A5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F36A7 Ext File Attributes   00000000 (0)\n+5F36AB Local Header Offset   0003920C (233996)\n+5F36AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F36AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n #\n-# WARNING: Offset 0x5F4792: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F3740 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3742   Length              0005 (5)\n+5F3744   Flags               01 (1) 'Modification'\n+5F3745   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3749 CENTRAL HEADER #118   02014B50 (33639248)\n+5F374D Created Zip Spec      14 (20) '2.0'\n+5F374E Created OS            00 (0) 'MS-DOS'\n+5F374F Extract Zip Spec      14 (20) '2.0'\n+5F3750 Extract OS            00 (0) 'MS-DOS'\n+5F3751 General Purpose Flag  0000 (0)\n+5F3753 Compression Method    0000 (0) 'Stored'\n+5F3755 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3759 CRC                   00000000 (0)\n+5F375D Compressed Size       00000000 (0)\n+5F3761 Uncompressed Size     00000000 (0)\n+5F3765 Filename Length       0078 (120)\n+5F3767 Extra Length          0009 (9)\n+5F3769 Comment Length        0000 (0)\n+5F376B Disk Start            0000 (0)\n+5F376D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F376F Ext File Attributes   00000000 (0)\n+5F3773 Local Header Offset   0003AEF3 (241395)\n+5F3777 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3777: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F37EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F37F1   Length              0005 (5)\n+5F37F3   Flags               01 (1) 'Modification'\n+5F37F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F37F8 CENTRAL HEADER #119   02014B50 (33639248)\n+5F37FC Created Zip Spec      14 (20) '2.0'\n+5F37FD Created OS            00 (0) 'MS-DOS'\n+5F37FE Extract Zip Spec      14 (20) '2.0'\n+5F37FF Extract OS            00 (0) 'MS-DOS'\n+5F3800 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3802 Compression Method    0000 (0) 'Stored'\n+5F3804 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3808 CRC                   1D7E8FA2 (494833570)\n+5F380C Compressed Size       000011BD (4541)\n+5F3810 Uncompressed Size     000011BD (4541)\n+5F3814 Filename Length       008E (142)\n+5F3816 Extra Length          0009 (9)\n+5F3818 Comment Length        0000 (0)\n+5F381A Disk Start            0000 (0)\n+5F381C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F381E Ext File Attributes   00000000 (0)\n+5F3822 Local Header Offset   0003AF92 (241554)\n+5F3826 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3826: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F38B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F38B6   Length              0005 (5)\n+5F38B8   Flags               01 (1) 'Modification'\n+5F38B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F38BD CENTRAL HEADER #120   02014B50 (33639248)\n+5F38C1 Created Zip Spec      14 (20) '2.0'\n+5F38C2 Created OS            00 (0) 'MS-DOS'\n+5F38C3 Extract Zip Spec      14 (20) '2.0'\n+5F38C4 Extract OS            00 (0) 'MS-DOS'\n+5F38C5 General Purpose Flag  0000 (0)\n+5F38C7 Compression Method    0000 (0) 'Stored'\n+5F38C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F38CD CRC                   00000000 (0)\n+5F38D1 Compressed Size       00000000 (0)\n+5F38D5 Uncompressed Size     00000000 (0)\n+5F38D9 Filename Length       007F (127)\n+5F38DB Extra Length          0009 (9)\n+5F38DD Comment Length        0000 (0)\n+5F38DF Disk Start            0000 (0)\n+5F38E1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F38E3 Ext File Attributes   00000000 (0)\n+5F38E7 Local Header Offset   0003C214 (246292)\n+5F38EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F38EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F396A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F396C   Length              0005 (5)\n+5F396E   Flags               01 (1) 'Modification'\n+5F396F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3973 CENTRAL HEADER #121   02014B50 (33639248)\n+5F3977 Created Zip Spec      14 (20) '2.0'\n+5F3978 Created OS            00 (0) 'MS-DOS'\n+5F3979 Extract Zip Spec      14 (20) '2.0'\n+5F397A Extract OS            00 (0) 'MS-DOS'\n+5F397B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F397D Compression Method    0000 (0) 'Stored'\n+5F397F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3983 CRC                   333FC2BB (859816635)\n+5F3987 Compressed Size       00000736 (1846)\n+5F398B Uncompressed Size     00000736 (1846)\n+5F398F Filename Length       0095 (149)\n+5F3991 Extra Length          0009 (9)\n+5F3993 Comment Length        0000 (0)\n+5F3995 Disk Start            0000 (0)\n+5F3997 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3999 Ext File Attributes   00000000 (0)\n+5F399D Local Header Offset   0003C2BA (246458)\n+5F39A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F39A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F4816 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4818   Length              0005 (5)\n-5F481A   Flags               01 (1) 'Modification'\n-5F481B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F481F CENTRAL HEADER #232   02014B50 (33639248)\n-5F4823 Created Zip Spec      14 (20) '2.0'\n-5F4824 Created OS            00 (0) 'MS-DOS'\n-5F4825 Extract Zip Spec      14 (20) '2.0'\n-5F4826 Extract OS            00 (0) 'MS-DOS'\n-5F4827 General Purpose Flag  0000 (0)\n-5F4829 Compression Method    0000 (0) 'Stored'\n-5F482B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F482F CRC                   00000000 (0)\n-5F4833 Compressed Size       00000000 (0)\n-5F4837 Uncompressed Size     00000000 (0)\n-5F483B Filename Length       0068 (104)\n-5F483D Extra Length          0009 (9)\n-5F483F Comment Length        0000 (0)\n-5F4841 Disk Start            0000 (0)\n-5F4843 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4845 Ext File Attributes   00000000 (0)\n-5F4849 Local Header Offset   0008080B (526347)\n-5F484D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F484D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F48B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F48B7   Length              0005 (5)\n-5F48B9   Flags               01 (1) 'Modification'\n-5F48BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F48BE CENTRAL HEADER #233   02014B50 (33639248)\n-5F48C2 Created Zip Spec      14 (20) '2.0'\n-5F48C3 Created OS            00 (0) 'MS-DOS'\n-5F48C4 Extract Zip Spec      14 (20) '2.0'\n-5F48C5 Extract OS            00 (0) 'MS-DOS'\n-5F48C6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F48C8 Compression Method    0000 (0) 'Stored'\n-5F48CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F48CE CRC                   23E20FDA (602017754)\n-5F48D2 Compressed Size       00002C4A (11338)\n-5F48D6 Uncompressed Size     00002C4A (11338)\n-5F48DA Filename Length       007E (126)\n-5F48DC Extra Length          0009 (9)\n-5F48DE Comment Length        0000 (0)\n-5F48E0 Disk Start            0000 (0)\n-5F48E2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F48E4 Ext File Attributes   00000000 (0)\n-5F48E8 Local Header Offset   0008089A (526490)\n-5F48EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F48EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F496A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F496C   Length              0005 (5)\n-5F496E   Flags               01 (1) 'Modification'\n-5F496F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4973 CENTRAL HEADER #234   02014B50 (33639248)\n-5F4977 Created Zip Spec      14 (20) '2.0'\n-5F4978 Created OS            00 (0) 'MS-DOS'\n-5F4979 Extract Zip Spec      14 (20) '2.0'\n-5F497A Extract OS            00 (0) 'MS-DOS'\n-5F497B General Purpose Flag  0000 (0)\n-5F497D Compression Method    0000 (0) 'Stored'\n-5F497F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4983 CRC                   00000000 (0)\n-5F4987 Compressed Size       00000000 (0)\n-5F498B Uncompressed Size     00000000 (0)\n-5F498F Filename Length       0023 (35)\n-5F4991 Extra Length          0009 (9)\n-5F4993 Comment Length        0000 (0)\n-5F4995 Disk Start            0000 (0)\n-5F4997 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4999 Ext File Attributes   00000000 (0)\n-5F499D Local Header Offset   00083599 (538009)\n-5F49A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F49A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F49C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F49C6   Length              0005 (5)\n-5F49C8   Flags               01 (1) 'Modification'\n-5F49C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F49CD CENTRAL HEADER #235   02014B50 (33639248)\n-5F49D1 Created Zip Spec      14 (20) '2.0'\n-5F49D2 Created OS            00 (0) 'MS-DOS'\n-5F49D3 Extract Zip Spec      14 (20) '2.0'\n-5F49D4 Extract OS            00 (0) 'MS-DOS'\n-5F49D5 General Purpose Flag  0000 (0)\n-5F49D7 Compression Method    0000 (0) 'Stored'\n-5F49D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F49DD CRC                   00000000 (0)\n-5F49E1 Compressed Size       00000000 (0)\n-5F49E5 Uncompressed Size     00000000 (0)\n-5F49E9 Filename Length       002A (42)\n-5F49EB Extra Length          0009 (9)\n-5F49ED Comment Length        0000 (0)\n-5F49EF Disk Start            0000 (0)\n-5F49F1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F49F3 Ext File Attributes   00000000 (0)\n-5F49F7 Local Header Offset   000835E3 (538083)\n-5F49FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F49FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4A25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4A27   Length              0005 (5)\n-5F4A29   Flags               01 (1) 'Modification'\n-5F4A2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4A2E CENTRAL HEADER #236   02014B50 (33639248)\n-5F4A32 Created Zip Spec      14 (20) '2.0'\n-5F4A33 Created OS            00 (0) 'MS-DOS'\n-5F4A34 Extract Zip Spec      14 (20) '2.0'\n-5F4A35 Extract OS            00 (0) 'MS-DOS'\n-5F4A36 General Purpose Flag  0000 (0)\n-5F4A38 Compression Method    0000 (0) 'Stored'\n-5F4A3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4A3E CRC                   00000000 (0)\n-5F4A42 Compressed Size       00000000 (0)\n-5F4A46 Uncompressed Size     00000000 (0)\n-5F4A4A Filename Length       0052 (82)\n-5F4A4C Extra Length          0009 (9)\n-5F4A4E Comment Length        0000 (0)\n-5F4A50 Disk Start            0000 (0)\n-5F4A52 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4A54 Ext File Attributes   00000000 (0)\n-5F4A58 Local Header Offset   00083634 (538164)\n-5F4A5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4A5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4AAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4AB0   Length              0005 (5)\n-5F4AB2   Flags               01 (1) 'Modification'\n-5F4AB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4AB7 CENTRAL HEADER #237   02014B50 (33639248)\n-5F4ABB Created Zip Spec      14 (20) '2.0'\n-5F4ABC Created OS            00 (0) 'MS-DOS'\n-5F4ABD Extract Zip Spec      14 (20) '2.0'\n-5F4ABE Extract OS            00 (0) 'MS-DOS'\n-5F4ABF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F4AC1 Compression Method    0000 (0) 'Stored'\n-5F4AC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4AC7 CRC                   90D14EC3 (2429636291)\n-5F4ACB Compressed Size       00001ABD (6845)\n-5F4ACF Uncompressed Size     00001ABD (6845)\n-5F4AD3 Filename Length       0068 (104)\n-5F4AD5 Extra Length          0009 (9)\n-5F4AD7 Comment Length        0000 (0)\n-5F4AD9 Disk Start            0000 (0)\n-5F4ADB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4ADD Ext File Attributes   00000000 (0)\n-5F4AE1 Local Header Offset   000836AD (538285)\n-5F4AE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4AE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4B4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4B4F   Length              0005 (5)\n-5F4B51   Flags               01 (1) 'Modification'\n-5F4B52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4B56 CENTRAL HEADER #238   02014B50 (33639248)\n-5F4B5A Created Zip Spec      14 (20) '2.0'\n-5F4B5B Created OS            00 (0) 'MS-DOS'\n-5F4B5C Extract Zip Spec      14 (20) '2.0'\n-5F4B5D Extract OS            00 (0) 'MS-DOS'\n-5F4B5E General Purpose Flag  0000 (0)\n-5F4B60 Compression Method    0000 (0) 'Stored'\n-5F4B62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4B66 CRC                   00000000 (0)\n-5F4B6A Compressed Size       00000000 (0)\n-5F4B6E Uncompressed Size     00000000 (0)\n-5F4B72 Filename Length       002E (46)\n-5F4B74 Extra Length          0009 (9)\n-5F4B76 Comment Length        0000 (0)\n-5F4B78 Disk Start            0000 (0)\n-5F4B7A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4B7C Ext File Attributes   00000000 (0)\n-5F4B80 Local Header Offset   00085209 (545289)\n-5F4B84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4B84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4BB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4BB4   Length              0005 (5)\n-5F4BB6   Flags               01 (1) 'Modification'\n-5F4BB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4BBB CENTRAL HEADER #239   02014B50 (33639248)\n-5F4BBF Created Zip Spec      14 (20) '2.0'\n-5F4BC0 Created OS            00 (0) 'MS-DOS'\n-5F4BC1 Extract Zip Spec      14 (20) '2.0'\n-5F4BC2 Extract OS            00 (0) 'MS-DOS'\n-5F4BC3 General Purpose Flag  0000 (0)\n-5F4BC5 Compression Method    0000 (0) 'Stored'\n-5F4BC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4BCB CRC                   00000000 (0)\n-5F4BCF Compressed Size       00000000 (0)\n-5F4BD3 Uncompressed Size     00000000 (0)\n-5F4BD7 Filename Length       0035 (53)\n-5F4BD9 Extra Length          0009 (9)\n-5F4BDB Comment Length        0000 (0)\n-5F4BDD Disk Start            0000 (0)\n-5F4BDF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4BE1 Ext File Attributes   00000000 (0)\n-5F4BE5 Local Header Offset   0008525E (545374)\n-5F4BE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4BE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4C1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4C20   Length              0005 (5)\n-5F4C22   Flags               01 (1) 'Modification'\n-5F4C23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4C27 CENTRAL HEADER #240   02014B50 (33639248)\n-5F4C2B Created Zip Spec      14 (20) '2.0'\n-5F4C2C Created OS            00 (0) 'MS-DOS'\n-5F4C2D Extract Zip Spec      14 (20) '2.0'\n-5F4C2E Extract OS            00 (0) 'MS-DOS'\n-5F4C2F General Purpose Flag  0000 (0)\n-5F4C31 Compression Method    0000 (0) 'Stored'\n-5F4C33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4C37 CRC                   00000000 (0)\n-5F4C3B Compressed Size       00000000 (0)\n-5F4C3F Uncompressed Size     00000000 (0)\n-5F4C43 Filename Length       005E (94)\n-5F4C45 Extra Length          0009 (9)\n-5F4C47 Comment Length        0000 (0)\n-5F4C49 Disk Start            0000 (0)\n-5F4C4B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4C4D Ext File Attributes   00000000 (0)\n-5F4C51 Local Header Offset   000852BA (545466)\n-5F4C55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4C55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4CB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4CB5   Length              0005 (5)\n-5F4CB7   Flags               01 (1) 'Modification'\n-5F4CB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4CBC CENTRAL HEADER #241   02014B50 (33639248)\n-5F4CC0 Created Zip Spec      14 (20) '2.0'\n-5F4CC1 Created OS            00 (0) 'MS-DOS'\n-5F4CC2 Extract Zip Spec      14 (20) '2.0'\n-5F4CC3 Extract OS            00 (0) 'MS-DOS'\n-5F4CC4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F4CC6 Compression Method    0000 (0) 'Stored'\n-5F4CC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4CCC CRC                   F19E6303 (4053689091)\n-5F4CD0 Compressed Size       00000ED8 (3800)\n-5F4CD4 Uncompressed Size     00000ED8 (3800)\n-5F4CD8 Filename Length       0074 (116)\n-5F4CDA Extra Length          0009 (9)\n-5F4CDC Comment Length        0000 (0)\n-5F4CDE Disk Start            0000 (0)\n-5F4CE0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4CE2 Ext File Attributes   00000000 (0)\n-5F4CE6 Local Header Offset   0008533F (545599)\n-5F4CEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4CEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4D5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4D60   Length              0005 (5)\n-5F4D62   Flags               01 (1) 'Modification'\n-5F4D63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4D67 CENTRAL HEADER #242   02014B50 (33639248)\n-5F4D6B Created Zip Spec      14 (20) '2.0'\n-5F4D6C Created OS            00 (0) 'MS-DOS'\n-5F4D6D Extract Zip Spec      14 (20) '2.0'\n-5F4D6E Extract OS            00 (0) 'MS-DOS'\n-5F4D6F General Purpose Flag  0000 (0)\n-5F4D71 Compression Method    0000 (0) 'Stored'\n-5F4D73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4D77 CRC                   00000000 (0)\n-5F4D7B Compressed Size       00000000 (0)\n-5F4D7F Uncompressed Size     00000000 (0)\n-5F4D83 Filename Length       0064 (100)\n-5F4D85 Extra Length          0009 (9)\n-5F4D87 Comment Length        0000 (0)\n-5F4D89 Disk Start            0000 (0)\n-5F4D8B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4D8D Ext File Attributes   00000000 (0)\n-5F4D91 Local Header Offset   000862C2 (549570)\n-5F4D95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4D95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4DF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4DFB   Length              0005 (5)\n-5F4DFD   Flags               01 (1) 'Modification'\n-5F4DFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4E02 CENTRAL HEADER #243   02014B50 (33639248)\n-5F4E06 Created Zip Spec      14 (20) '2.0'\n-5F4E07 Created OS            00 (0) 'MS-DOS'\n-5F4E08 Extract Zip Spec      14 (20) '2.0'\n-5F4E09 Extract OS            00 (0) 'MS-DOS'\n-5F4E0A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F4E0C Compression Method    0000 (0) 'Stored'\n-5F4E0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4E12 CRC                   51B4F745 (1370814277)\n-5F4E16 Compressed Size       000016D7 (5847)\n-5F4E1A Uncompressed Size     000016D7 (5847)\n-5F4E1E Filename Length       007A (122)\n-5F4E20 Extra Length          0009 (9)\n-5F4E22 Comment Length        0000 (0)\n-5F4E24 Disk Start            0000 (0)\n-5F4E26 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4E28 Ext File Attributes   00000000 (0)\n-5F4E2C Local Header Offset   0008634D (549709)\n-5F4E30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4E30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4EAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4EAC   Length              0005 (5)\n-5F4EAE   Flags               01 (1) 'Modification'\n-5F4EAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4EB3 CENTRAL HEADER #244   02014B50 (33639248)\n-5F4EB7 Created Zip Spec      14 (20) '2.0'\n-5F4EB8 Created OS            00 (0) 'MS-DOS'\n-5F4EB9 Extract Zip Spec      14 (20) '2.0'\n-5F4EBA Extract OS            00 (0) 'MS-DOS'\n-5F4EBB General Purpose Flag  0000 (0)\n-5F4EBD Compression Method    0000 (0) 'Stored'\n-5F4EBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4EC3 CRC                   00000000 (0)\n-5F4EC7 Compressed Size       00000000 (0)\n-5F4ECB Uncompressed Size     00000000 (0)\n-5F4ECF Filename Length       0026 (38)\n-5F4ED1 Extra Length          0009 (9)\n-5F4ED3 Comment Length        0000 (0)\n-5F4ED5 Disk Start            0000 (0)\n-5F4ED7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4ED9 Ext File Attributes   00000000 (0)\n-5F4EDD Local Header Offset   00087AD5 (555733)\n-5F4EE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4EE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4F09   Length              0005 (5)\n-5F4F0B   Flags               01 (1) 'Modification'\n-5F4F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4F10 CENTRAL HEADER #245   02014B50 (33639248)\n-5F4F14 Created Zip Spec      14 (20) '2.0'\n-5F4F15 Created OS            00 (0) 'MS-DOS'\n-5F4F16 Extract Zip Spec      14 (20) '2.0'\n-5F4F17 Extract OS            00 (0) 'MS-DOS'\n-5F4F18 General Purpose Flag  0000 (0)\n-5F4F1A Compression Method    0000 (0) 'Stored'\n-5F4F1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4F20 CRC                   00000000 (0)\n-5F4F24 Compressed Size       00000000 (0)\n-5F4F28 Uncompressed Size     00000000 (0)\n-5F4F2C Filename Length       002D (45)\n-5F4F2E Extra Length          0009 (9)\n-5F4F30 Comment Length        0000 (0)\n-5F4F32 Disk Start            0000 (0)\n-5F4F34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4F36 Ext File Attributes   00000000 (0)\n-5F4F3A Local Header Offset   00087B22 (555810)\n-5F4F3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4F3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4F6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F4F6D   Length              0005 (5)\n-5F4F6F   Flags               01 (1) 'Modification'\n-5F4F70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F4F74 CENTRAL HEADER #246   02014B50 (33639248)\n-5F4F78 Created Zip Spec      14 (20) '2.0'\n-5F4F79 Created OS            00 (0) 'MS-DOS'\n-5F4F7A Extract Zip Spec      14 (20) '2.0'\n-5F4F7B Extract OS            00 (0) 'MS-DOS'\n-5F4F7C General Purpose Flag  0000 (0)\n-5F4F7E Compression Method    0000 (0) 'Stored'\n-5F4F80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F4F84 CRC                   00000000 (0)\n-5F4F88 Compressed Size       00000000 (0)\n-5F4F8C Uncompressed Size     00000000 (0)\n-5F4F90 Filename Length       005C (92)\n-5F4F92 Extra Length          0009 (9)\n-5F4F94 Comment Length        0000 (0)\n-5F4F96 Disk Start            0000 (0)\n-5F4F98 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F4F9A Ext File Attributes   00000000 (0)\n-5F4F9E Local Header Offset   00087B76 (555894)\n-5F4FA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4FA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4FFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5000   Length              0005 (5)\n-5F5002   Flags               01 (1) 'Modification'\n-5F5003   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5007 CENTRAL HEADER #247   02014B50 (33639248)\n-5F500B Created Zip Spec      14 (20) '2.0'\n-5F500C Created OS            00 (0) 'MS-DOS'\n-5F500D Extract Zip Spec      14 (20) '2.0'\n-5F500E Extract OS            00 (0) 'MS-DOS'\n-5F500F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5011 Compression Method    0000 (0) 'Stored'\n-5F5013 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5017 CRC                   357DA477 (897426551)\n-5F501B Compressed Size       000006C6 (1734)\n-5F501F Uncompressed Size     000006C6 (1734)\n-5F5023 Filename Length       0072 (114)\n-5F5025 Extra Length          0009 (9)\n-5F5027 Comment Length        0000 (0)\n-5F5029 Disk Start            0000 (0)\n-5F502B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F502D Ext File Attributes   00000000 (0)\n-5F5031 Local Header Offset   00087BF9 (556025)\n-5F5035 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5035: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F50A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F50A9   Length              0005 (5)\n-5F50AB   Flags               01 (1) 'Modification'\n-5F50AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F50B0 CENTRAL HEADER #248   02014B50 (33639248)\n-5F50B4 Created Zip Spec      14 (20) '2.0'\n-5F50B5 Created OS            00 (0) 'MS-DOS'\n-5F50B6 Extract Zip Spec      14 (20) '2.0'\n-5F50B7 Extract OS            00 (0) 'MS-DOS'\n-5F50B8 General Purpose Flag  0000 (0)\n-5F50BA Compression Method    0000 (0) 'Stored'\n-5F50BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F50C0 CRC                   00000000 (0)\n-5F50C4 Compressed Size       00000000 (0)\n-5F50C8 Uncompressed Size     00000000 (0)\n-5F50CC Filename Length       0059 (89)\n-5F50CE Extra Length          0009 (9)\n-5F50D0 Comment Length        0000 (0)\n-5F50D2 Disk Start            0000 (0)\n-5F50D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F50D6 Ext File Attributes   00000000 (0)\n-5F50DA Local Header Offset   00088368 (557928)\n-5F50DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F50DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5137 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5139   Length              0005 (5)\n-5F513B   Flags               01 (1) 'Modification'\n-5F513C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5140 CENTRAL HEADER #249   02014B50 (33639248)\n-5F5144 Created Zip Spec      14 (20) '2.0'\n-5F5145 Created OS            00 (0) 'MS-DOS'\n-5F5146 Extract Zip Spec      14 (20) '2.0'\n-5F5147 Extract OS            00 (0) 'MS-DOS'\n-5F5148 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F514A Compression Method    0000 (0) 'Stored'\n-5F514C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5150 CRC                   F9CAC97B (4190816635)\n-5F5154 Compressed Size       000009BC (2492)\n-5F5158 Uncompressed Size     000009BC (2492)\n-5F515C Filename Length       006F (111)\n-5F515E Extra Length          0009 (9)\n-5F5160 Comment Length        0000 (0)\n-5F5162 Disk Start            0000 (0)\n-5F5164 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5166 Ext File Attributes   00000000 (0)\n-5F516A Local Header Offset   000883E8 (558056)\n-5F516E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F516E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F51DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F51DF   Length              0005 (5)\n-5F51E1   Flags               01 (1) 'Modification'\n-5F51E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F51E6 CENTRAL HEADER #250   02014B50 (33639248)\n-5F51EA Created Zip Spec      14 (20) '2.0'\n-5F51EB Created OS            00 (0) 'MS-DOS'\n-5F51EC Extract Zip Spec      14 (20) '2.0'\n-5F51ED Extract OS            00 (0) 'MS-DOS'\n-5F51EE General Purpose Flag  0000 (0)\n-5F51F0 Compression Method    0000 (0) 'Stored'\n-5F51F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F51F6 CRC                   00000000 (0)\n-5F51FA Compressed Size       00000000 (0)\n-5F51FE Uncompressed Size     00000000 (0)\n-5F5202 Filename Length       005F (95)\n-5F5204 Extra Length          0009 (9)\n-5F5206 Comment Length        0000 (0)\n-5F5208 Disk Start            0000 (0)\n-5F520A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F520C Ext File Attributes   00000000 (0)\n-5F5210 Local Header Offset   00088E4A (560714)\n-5F5214 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5214: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5273 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5275   Length              0005 (5)\n-5F5277   Flags               01 (1) 'Modification'\n-5F5278   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F527C CENTRAL HEADER #251   02014B50 (33639248)\n-5F5280 Created Zip Spec      14 (20) '2.0'\n-5F5281 Created OS            00 (0) 'MS-DOS'\n-5F5282 Extract Zip Spec      14 (20) '2.0'\n-5F5283 Extract OS            00 (0) 'MS-DOS'\n-5F5284 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5286 Compression Method    0000 (0) 'Stored'\n-5F5288 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F528C CRC                   9DEB8C8B (2649459851)\n-5F5290 Compressed Size       00000A07 (2567)\n-5F5294 Uncompressed Size     00000A07 (2567)\n-5F5298 Filename Length       0075 (117)\n-5F529A Extra Length          0009 (9)\n-5F529C Comment Length        0000 (0)\n-5F529E Disk Start            0000 (0)\n-5F52A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F52A2 Ext File Attributes   00000000 (0)\n-5F52A6 Local Header Offset   00088ED0 (560848)\n-5F52AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F52AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F531F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5321   Length              0005 (5)\n-5F5323   Flags               01 (1) 'Modification'\n-5F5324   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5328 CENTRAL HEADER #252   02014B50 (33639248)\n-5F532C Created Zip Spec      14 (20) '2.0'\n-5F532D Created OS            00 (0) 'MS-DOS'\n-5F532E Extract Zip Spec      14 (20) '2.0'\n-5F532F Extract OS            00 (0) 'MS-DOS'\n-5F5330 General Purpose Flag  0000 (0)\n-5F5332 Compression Method    0000 (0) 'Stored'\n-5F5334 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5338 CRC                   00000000 (0)\n-5F533C Compressed Size       00000000 (0)\n-5F5340 Uncompressed Size     00000000 (0)\n-5F5344 Filename Length       0059 (89)\n-5F5346 Extra Length          0009 (9)\n-5F5348 Comment Length        0000 (0)\n-5F534A Disk Start            0000 (0)\n-5F534C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F534E Ext File Attributes   00000000 (0)\n-5F5352 Local Header Offset   00089983 (563587)\n-5F5356 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5356: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F53AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F53B1   Length              0005 (5)\n-5F53B3   Flags               01 (1) 'Modification'\n-5F53B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F53B8 CENTRAL HEADER #253   02014B50 (33639248)\n-5F53BC Created Zip Spec      14 (20) '2.0'\n-5F53BD Created OS            00 (0) 'MS-DOS'\n-5F53BE Extract Zip Spec      14 (20) '2.0'\n-5F53BF Extract OS            00 (0) 'MS-DOS'\n-5F53C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F53C2 Compression Method    0000 (0) 'Stored'\n-5F53C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F53C8 CRC                   85B17459 (2242999385)\n-5F53CC Compressed Size       00000DDE (3550)\n-5F53D0 Uncompressed Size     00000DDE (3550)\n-5F53D4 Filename Length       006F (111)\n-5F53D6 Extra Length          0009 (9)\n-5F53D8 Comment Length        0000 (0)\n-5F53DA Disk Start            0000 (0)\n-5F53DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F53DE Ext File Attributes   00000000 (0)\n-5F53E2 Local Header Offset   00089A03 (563715)\n-5F53E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F53E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5455 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5457   Length              0005 (5)\n-5F5459   Flags               01 (1) 'Modification'\n-5F545A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F545E CENTRAL HEADER #254   02014B50 (33639248)\n-5F5462 Created Zip Spec      14 (20) '2.0'\n-5F5463 Created OS            00 (0) 'MS-DOS'\n-5F5464 Extract Zip Spec      14 (20) '2.0'\n-5F5465 Extract OS            00 (0) 'MS-DOS'\n-5F5466 General Purpose Flag  0000 (0)\n-5F5468 Compression Method    0000 (0) 'Stored'\n-5F546A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F546E CRC                   00000000 (0)\n-5F5472 Compressed Size       00000000 (0)\n-5F5476 Uncompressed Size     00000000 (0)\n-5F547A Filename Length       0064 (100)\n-5F547C Extra Length          0009 (9)\n-5F547E Comment Length        0000 (0)\n-5F5480 Disk Start            0000 (0)\n-5F5482 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5484 Ext File Attributes   00000000 (0)\n-5F5488 Local Header Offset   0008A887 (567431)\n-5F548C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F548C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F54F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F54F2   Length              0005 (5)\n-5F54F4   Flags               01 (1) 'Modification'\n-5F54F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F54F9 CENTRAL HEADER #255   02014B50 (33639248)\n-5F54FD Created Zip Spec      14 (20) '2.0'\n-5F54FE Created OS            00 (0) 'MS-DOS'\n-5F54FF Extract Zip Spec      14 (20) '2.0'\n-5F5500 Extract OS            00 (0) 'MS-DOS'\n-5F5501 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5503 Compression Method    0000 (0) 'Stored'\n-5F5505 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5509 CRC                   9C229073 (2619510899)\n-5F550D Compressed Size       000005CF (1487)\n-5F5511 Uncompressed Size     000005CF (1487)\n-5F5515 Filename Length       007A (122)\n-5F5517 Extra Length          0009 (9)\n-5F5519 Comment Length        0000 (0)\n-5F551B Disk Start            0000 (0)\n-5F551D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F551F Ext File Attributes   00000000 (0)\n-5F5523 Local Header Offset   0008A912 (567570)\n-5F5527 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5527: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F55A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F55A3   Length              0005 (5)\n-5F55A5   Flags               01 (1) 'Modification'\n-5F55A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F55AA CENTRAL HEADER #256   02014B50 (33639248)\n-5F55AE Created Zip Spec      14 (20) '2.0'\n-5F55AF Created OS            00 (0) 'MS-DOS'\n-5F55B0 Extract Zip Spec      14 (20) '2.0'\n-5F55B1 Extract OS            00 (0) 'MS-DOS'\n-5F55B2 General Purpose Flag  0000 (0)\n-5F55B4 Compression Method    0000 (0) 'Stored'\n-5F55B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F55BA CRC                   00000000 (0)\n-5F55BE Compressed Size       00000000 (0)\n-5F55C2 Uncompressed Size     00000000 (0)\n-5F55C6 Filename Length       0064 (100)\n-5F55C8 Extra Length          0009 (9)\n-5F55CA Comment Length        0000 (0)\n-5F55CC Disk Start            0000 (0)\n-5F55CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F55D0 Ext File Attributes   00000000 (0)\n-5F55D4 Local Header Offset   0008AF92 (569234)\n-5F55D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F55D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F563C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F563E   Length              0005 (5)\n-5F5640   Flags               01 (1) 'Modification'\n-5F5641   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5645 CENTRAL HEADER #257   02014B50 (33639248)\n-5F5649 Created Zip Spec      14 (20) '2.0'\n-5F564A Created OS            00 (0) 'MS-DOS'\n-5F564B Extract Zip Spec      14 (20) '2.0'\n-5F564C Extract OS            00 (0) 'MS-DOS'\n-5F564D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F564F Compression Method    0000 (0) 'Stored'\n-5F5651 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5655 CRC                   A57691CD (2776011213)\n-5F5659 Compressed Size       000005C2 (1474)\n-5F565D Uncompressed Size     000005C2 (1474)\n-5F5661 Filename Length       007A (122)\n-5F5663 Extra Length          0009 (9)\n-5F5665 Comment Length        0000 (0)\n-5F5667 Disk Start            0000 (0)\n-5F5669 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F566B Ext File Attributes   00000000 (0)\n-5F566F Local Header Offset   0008B01D (569373)\n-5F5673 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5673: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F56ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F56EF   Length              0005 (5)\n-5F56F1   Flags               01 (1) 'Modification'\n-5F56F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F56F6 CENTRAL HEADER #258   02014B50 (33639248)\n-5F56FA Created Zip Spec      14 (20) '2.0'\n-5F56FB Created OS            00 (0) 'MS-DOS'\n-5F56FC Extract Zip Spec      14 (20) '2.0'\n-5F56FD Extract OS            00 (0) 'MS-DOS'\n-5F56FE General Purpose Flag  0000 (0)\n-5F5700 Compression Method    0000 (0) 'Stored'\n-5F5702 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5706 CRC                   00000000 (0)\n-5F570A Compressed Size       00000000 (0)\n-5F570E Uncompressed Size     00000000 (0)\n-5F5712 Filename Length       0063 (99)\n-5F5714 Extra Length          0009 (9)\n-5F5716 Comment Length        0000 (0)\n-5F5718 Disk Start            0000 (0)\n-5F571A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F571C Ext File Attributes   00000000 (0)\n-5F5720 Local Header Offset   0008B690 (571024)\n-5F5724 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5724: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5787 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5789   Length              0005 (5)\n-5F578B   Flags               01 (1) 'Modification'\n-5F578C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5790 CENTRAL HEADER #259   02014B50 (33639248)\n-5F5794 Created Zip Spec      14 (20) '2.0'\n-5F5795 Created OS            00 (0) 'MS-DOS'\n-5F5796 Extract Zip Spec      14 (20) '2.0'\n-5F5797 Extract OS            00 (0) 'MS-DOS'\n-5F5798 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F579A Compression Method    0000 (0) 'Stored'\n-5F579C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F57A0 CRC                   6CD31445 (1825772613)\n-5F57A4 Compressed Size       0000073A (1850)\n-5F57A8 Uncompressed Size     0000073A (1850)\n-5F57AC Filename Length       0079 (121)\n-5F57AE Extra Length          0009 (9)\n-5F57B0 Comment Length        0000 (0)\n-5F57B2 Disk Start            0000 (0)\n-5F57B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F57B6 Ext File Attributes   00000000 (0)\n-5F57BA Local Header Offset   0008B71A (571162)\n-5F57BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F57BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5837 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5839   Length              0005 (5)\n-5F583B   Flags               01 (1) 'Modification'\n-5F583C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5840 CENTRAL HEADER #260   02014B50 (33639248)\n-5F5844 Created Zip Spec      14 (20) '2.0'\n-5F5845 Created OS            00 (0) 'MS-DOS'\n-5F5846 Extract Zip Spec      14 (20) '2.0'\n-5F5847 Extract OS            00 (0) 'MS-DOS'\n-5F5848 General Purpose Flag  0000 (0)\n-5F584A Compression Method    0000 (0) 'Stored'\n-5F584C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5850 CRC                   00000000 (0)\n-5F5854 Compressed Size       00000000 (0)\n-5F5858 Uncompressed Size     00000000 (0)\n-5F585C Filename Length       0061 (97)\n-5F585E Extra Length          0009 (9)\n-5F5860 Comment Length        0000 (0)\n-5F5862 Disk Start            0000 (0)\n-5F5864 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5866 Ext File Attributes   00000000 (0)\n-5F586A Local Header Offset   0008BF04 (573188)\n-5F586E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F586E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F58CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F58D1   Length              0005 (5)\n-5F58D3   Flags               01 (1) 'Modification'\n-5F58D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F58D8 CENTRAL HEADER #261   02014B50 (33639248)\n-5F58DC Created Zip Spec      14 (20) '2.0'\n-5F58DD Created OS            00 (0) 'MS-DOS'\n-5F58DE Extract Zip Spec      14 (20) '2.0'\n-5F58DF Extract OS            00 (0) 'MS-DOS'\n-5F58E0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F58E2 Compression Method    0000 (0) 'Stored'\n-5F58E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F58E8 CRC                   C97DF8D6 (3380476118)\n-5F58EC Compressed Size       00000A92 (2706)\n-5F58F0 Uncompressed Size     00000A92 (2706)\n-5F58F4 Filename Length       0077 (119)\n-5F58F6 Extra Length          0009 (9)\n-5F58F8 Comment Length        0000 (0)\n-5F58FA Disk Start            0000 (0)\n-5F58FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F58FE Ext File Attributes   00000000 (0)\n-5F5902 Local Header Offset   0008BF8C (573324)\n-5F5906 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5906: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F597D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F597F   Length              0005 (5)\n-5F5981   Flags               01 (1) 'Modification'\n-5F5982   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5986 CENTRAL HEADER #262   02014B50 (33639248)\n-5F598A Created Zip Spec      14 (20) '2.0'\n-5F598B Created OS            00 (0) 'MS-DOS'\n-5F598C Extract Zip Spec      14 (20) '2.0'\n-5F598D Extract OS            00 (0) 'MS-DOS'\n-5F598E General Purpose Flag  0000 (0)\n-5F5990 Compression Method    0000 (0) 'Stored'\n-5F5992 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5996 CRC                   00000000 (0)\n-5F599A Compressed Size       00000000 (0)\n-5F599E Uncompressed Size     00000000 (0)\n-5F59A2 Filename Length       0023 (35)\n-5F59A4 Extra Length          0009 (9)\n-5F59A6 Comment Length        0000 (0)\n-5F59A8 Disk Start            0000 (0)\n-5F59AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F59AC Ext File Attributes   00000000 (0)\n-5F59B0 Local Header Offset   0008CACC (576204)\n-5F59B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F59B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F59D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F59D9   Length              0005 (5)\n-5F59DB   Flags               01 (1) 'Modification'\n-5F59DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F59E0 CENTRAL HEADER #263   02014B50 (33639248)\n-5F59E4 Created Zip Spec      14 (20) '2.0'\n-5F59E5 Created OS            00 (0) 'MS-DOS'\n-5F59E6 Extract Zip Spec      14 (20) '2.0'\n-5F59E7 Extract OS            00 (0) 'MS-DOS'\n-5F59E8 General Purpose Flag  0000 (0)\n-5F59EA Compression Method    0000 (0) 'Stored'\n-5F59EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F59F0 CRC                   00000000 (0)\n-5F59F4 Compressed Size       00000000 (0)\n-5F59F8 Uncompressed Size     00000000 (0)\n-5F59FC Filename Length       002A (42)\n-5F59FE Extra Length          0009 (9)\n-5F5A00 Comment Length        0000 (0)\n-5F5A02 Disk Start            0000 (0)\n-5F5A04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5A06 Ext File Attributes   00000000 (0)\n-5F5A0A Local Header Offset   0008CB16 (576278)\n-5F5A0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5A0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5A38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5A3A   Length              0005 (5)\n-5F5A3C   Flags               01 (1) 'Modification'\n-5F5A3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5A41 CENTRAL HEADER #264   02014B50 (33639248)\n-5F5A45 Created Zip Spec      14 (20) '2.0'\n-5F5A46 Created OS            00 (0) 'MS-DOS'\n-5F5A47 Extract Zip Spec      14 (20) '2.0'\n-5F5A48 Extract OS            00 (0) 'MS-DOS'\n-5F5A49 General Purpose Flag  0000 (0)\n-5F5A4B Compression Method    0000 (0) 'Stored'\n-5F5A4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5A51 CRC                   00000000 (0)\n-5F5A55 Compressed Size       00000000 (0)\n-5F5A59 Uncompressed Size     00000000 (0)\n-5F5A5D Filename Length       0056 (86)\n-5F5A5F Extra Length          0009 (9)\n-5F5A61 Comment Length        0000 (0)\n-5F5A63 Disk Start            0000 (0)\n-5F5A65 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5A67 Ext File Attributes   00000000 (0)\n-5F5A6B Local Header Offset   0008CB67 (576359)\n-5F5A6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5A6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5AC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5AC7   Length              0005 (5)\n-5F5AC9   Flags               01 (1) 'Modification'\n-5F5ACA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5ACE CENTRAL HEADER #265   02014B50 (33639248)\n-5F5AD2 Created Zip Spec      14 (20) '2.0'\n-5F5AD3 Created OS            00 (0) 'MS-DOS'\n-5F5AD4 Extract Zip Spec      14 (20) '2.0'\n-5F5AD5 Extract OS            00 (0) 'MS-DOS'\n-5F5AD6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5AD8 Compression Method    0000 (0) 'Stored'\n-5F5ADA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5ADE CRC                   0B04A112 (184852754)\n-5F5AE2 Compressed Size       00000795 (1941)\n-5F5AE6 Uncompressed Size     00000795 (1941)\n-5F5AEA Filename Length       006C (108)\n-5F5AEC Extra Length          0009 (9)\n-5F5AEE Comment Length        0000 (0)\n-5F5AF0 Disk Start            0000 (0)\n-5F5AF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5AF4 Ext File Attributes   00000000 (0)\n-5F5AF8 Local Header Offset   0008CBE4 (576484)\n-5F5AFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5AFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5B68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5B6A   Length              0005 (5)\n-5F5B6C   Flags               01 (1) 'Modification'\n-5F5B6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5B71 CENTRAL HEADER #266   02014B50 (33639248)\n-5F5B75 Created Zip Spec      14 (20) '2.0'\n-5F5B76 Created OS            00 (0) 'MS-DOS'\n-5F5B77 Extract Zip Spec      14 (20) '2.0'\n-5F5B78 Extract OS            00 (0) 'MS-DOS'\n-5F5B79 General Purpose Flag  0000 (0)\n-5F5B7B Compression Method    0000 (0) 'Stored'\n-5F5B7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5B81 CRC                   00000000 (0)\n-5F5B85 Compressed Size       00000000 (0)\n-5F5B89 Uncompressed Size     00000000 (0)\n-5F5B8D Filename Length       0031 (49)\n-5F5B8F Extra Length          0009 (9)\n-5F5B91 Comment Length        0000 (0)\n-5F5B93 Disk Start            0000 (0)\n-5F5B95 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5B97 Ext File Attributes   00000000 (0)\n-5F5B9B Local Header Offset   0008D41C (578588)\n-5F5B9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5B9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5BD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5BD2   Length              0005 (5)\n-5F5BD4   Flags               01 (1) 'Modification'\n-5F5BD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5BD9 CENTRAL HEADER #267   02014B50 (33639248)\n-5F5BDD Created Zip Spec      14 (20) '2.0'\n-5F5BDE Created OS            00 (0) 'MS-DOS'\n-5F5BDF Extract Zip Spec      14 (20) '2.0'\n-5F5BE0 Extract OS            00 (0) 'MS-DOS'\n-5F5BE1 General Purpose Flag  0000 (0)\n-5F5BE3 Compression Method    0000 (0) 'Stored'\n-5F5BE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5BE9 CRC                   00000000 (0)\n-5F5BED Compressed Size       00000000 (0)\n-5F5BF1 Uncompressed Size     00000000 (0)\n-5F5BF5 Filename Length       0038 (56)\n-5F5BF7 Extra Length          0009 (9)\n-5F5BF9 Comment Length        0000 (0)\n-5F5BFB Disk Start            0000 (0)\n-5F5BFD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5BFF Ext File Attributes   00000000 (0)\n-5F5C03 Local Header Offset   0008D474 (578676)\n-5F5C07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5C07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5C3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5C41   Length              0005 (5)\n-5F5C43   Flags               01 (1) 'Modification'\n-5F5C44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5C48 CENTRAL HEADER #268   02014B50 (33639248)\n-5F5C4C Created Zip Spec      14 (20) '2.0'\n-5F5C4D Created OS            00 (0) 'MS-DOS'\n-5F5C4E Extract Zip Spec      14 (20) '2.0'\n-5F5C4F Extract OS            00 (0) 'MS-DOS'\n-5F5C50 General Purpose Flag  0000 (0)\n-5F5C52 Compression Method    0000 (0) 'Stored'\n-5F5C54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5C58 CRC                   00000000 (0)\n-5F5C5C Compressed Size       00000000 (0)\n-5F5C60 Uncompressed Size     00000000 (0)\n-5F5C64 Filename Length       006A (106)\n-5F5C66 Extra Length          0009 (9)\n-5F5C68 Comment Length        0000 (0)\n-5F5C6A Disk Start            0000 (0)\n-5F5C6C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5C6E Ext File Attributes   00000000 (0)\n-5F5C72 Local Header Offset   0008D4D3 (578771)\n-5F5C76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5C76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5CE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5CE2   Length              0005 (5)\n-5F5CE4   Flags               01 (1) 'Modification'\n-5F5CE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5CE9 CENTRAL HEADER #269   02014B50 (33639248)\n-5F5CED Created Zip Spec      14 (20) '2.0'\n-5F5CEE Created OS            00 (0) 'MS-DOS'\n-5F5CEF Extract Zip Spec      14 (20) '2.0'\n-5F5CF0 Extract OS            00 (0) 'MS-DOS'\n-5F5CF1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5CF3 Compression Method    0000 (0) 'Stored'\n-5F5CF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5CF9 CRC                   9A51A289 (2589041289)\n-5F5CFD Compressed Size       000008AB (2219)\n-5F5D01 Uncompressed Size     000008AB (2219)\n-5F5D05 Filename Length       0080 (128)\n-5F5D07 Extra Length          0009 (9)\n-5F5D09 Comment Length        0000 (0)\n-5F5D0B Disk Start            0000 (0)\n-5F5D0D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5D0F Ext File Attributes   00000000 (0)\n-5F5D13 Local Header Offset   0008D564 (578916)\n-5F5D17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5D17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5D97 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5D99   Length              0005 (5)\n-5F5D9B   Flags               01 (1) 'Modification'\n-5F5D9C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5DA0 CENTRAL HEADER #270   02014B50 (33639248)\n-5F5DA4 Created Zip Spec      14 (20) '2.0'\n-5F5DA5 Created OS            00 (0) 'MS-DOS'\n-5F5DA6 Extract Zip Spec      14 (20) '2.0'\n-5F5DA7 Extract OS            00 (0) 'MS-DOS'\n-5F5DA8 General Purpose Flag  0000 (0)\n-5F5DAA Compression Method    0000 (0) 'Stored'\n-5F5DAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5DB0 CRC                   00000000 (0)\n-5F5DB4 Compressed Size       00000000 (0)\n-5F5DB8 Uncompressed Size     00000000 (0)\n-5F5DBC Filename Length       0022 (34)\n-5F5DBE Extra Length          0009 (9)\n-5F5DC0 Comment Length        0000 (0)\n-5F5DC2 Disk Start            0000 (0)\n-5F5DC4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5DC6 Ext File Attributes   00000000 (0)\n-5F5DCA Local Header Offset   0008DEC6 (581318)\n-5F5DCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5DCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5DF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5DF2   Length              0005 (5)\n-5F5DF4   Flags               01 (1) 'Modification'\n-5F5DF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5DF9 CENTRAL HEADER #271   02014B50 (33639248)\n-5F5DFD Created Zip Spec      14 (20) '2.0'\n-5F5DFE Created OS            00 (0) 'MS-DOS'\n-5F5DFF Extract Zip Spec      14 (20) '2.0'\n-5F5E00 Extract OS            00 (0) 'MS-DOS'\n-5F5E01 General Purpose Flag  0000 (0)\n-5F5E03 Compression Method    0000 (0) 'Stored'\n-5F5E05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5E09 CRC                   00000000 (0)\n-5F5E0D Compressed Size       00000000 (0)\n-5F5E11 Uncompressed Size     00000000 (0)\n-5F5E15 Filename Length       0029 (41)\n-5F5E17 Extra Length          0009 (9)\n-5F5E19 Comment Length        0000 (0)\n-5F5E1B Disk Start            0000 (0)\n-5F5E1D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5E1F Ext File Attributes   00000000 (0)\n-5F5E23 Local Header Offset   0008DF0F (581391)\n-5F5E27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5E27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5E50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5E52   Length              0005 (5)\n-5F5E54   Flags               01 (1) 'Modification'\n-5F5E55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5E59 CENTRAL HEADER #272   02014B50 (33639248)\n-5F5E5D Created Zip Spec      14 (20) '2.0'\n-5F5E5E Created OS            00 (0) 'MS-DOS'\n-5F5E5F Extract Zip Spec      14 (20) '2.0'\n-5F5E60 Extract OS            00 (0) 'MS-DOS'\n-5F5E61 General Purpose Flag  0000 (0)\n-5F5E63 Compression Method    0000 (0) 'Stored'\n-5F5E65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5E69 CRC                   00000000 (0)\n-5F5E6D Compressed Size       00000000 (0)\n-5F5E71 Uncompressed Size     00000000 (0)\n-5F5E75 Filename Length       0063 (99)\n-5F5E77 Extra Length          0009 (9)\n-5F5E79 Comment Length        0000 (0)\n-5F5E7B Disk Start            0000 (0)\n-5F5E7D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5E7F Ext File Attributes   00000000 (0)\n-5F5E83 Local Header Offset   0008DF5F (581471)\n-5F5E87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5E87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5EEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5EEC   Length              0005 (5)\n-5F5EEE   Flags               01 (1) 'Modification'\n-5F5EEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5EF3 CENTRAL HEADER #273   02014B50 (33639248)\n-5F5EF7 Created Zip Spec      14 (20) '2.0'\n-5F5EF8 Created OS            00 (0) 'MS-DOS'\n-5F5EF9 Extract Zip Spec      14 (20) '2.0'\n-5F5EFA Extract OS            00 (0) 'MS-DOS'\n-5F5EFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F5EFD Compression Method    0000 (0) 'Stored'\n-5F5EFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5F03 CRC                   28034B81 (671304577)\n-5F5F07 Compressed Size       00000E44 (3652)\n-5F5F0B Uncompressed Size     00000E44 (3652)\n-5F5F0F Filename Length       0079 (121)\n-5F5F11 Extra Length          0009 (9)\n-5F5F13 Comment Length        0000 (0)\n-5F5F15 Disk Start            0000 (0)\n-5F5F17 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5F19 Ext File Attributes   00000000 (0)\n-5F5F1D Local Header Offset   0008DFE9 (581609)\n-5F5F21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5F21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F5F9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F5F9C   Length              0005 (5)\n-5F5F9E   Flags               01 (1) 'Modification'\n-5F5F9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F5FA3 CENTRAL HEADER #274   02014B50 (33639248)\n-5F5FA7 Created Zip Spec      14 (20) '2.0'\n-5F5FA8 Created OS            00 (0) 'MS-DOS'\n-5F5FA9 Extract Zip Spec      14 (20) '2.0'\n-5F5FAA Extract OS            00 (0) 'MS-DOS'\n-5F5FAB General Purpose Flag  0000 (0)\n-5F5FAD Compression Method    0000 (0) 'Stored'\n-5F5FAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F5FB3 CRC                   00000000 (0)\n-5F5FB7 Compressed Size       00000000 (0)\n-5F5FBB Uncompressed Size     00000000 (0)\n-5F5FBF Filename Length       003C (60)\n-5F5FC1 Extra Length          0009 (9)\n-5F5FC3 Comment Length        0000 (0)\n-5F5FC5 Disk Start            0000 (0)\n-5F5FC7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F5FC9 Ext File Attributes   00000000 (0)\n-5F5FCD Local Header Offset   0008EEDD (585437)\n-5F5FD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F5FD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F600D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F600F   Length              0005 (5)\n-5F6011   Flags               01 (1) 'Modification'\n-5F6012   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6016 CENTRAL HEADER #275   02014B50 (33639248)\n-5F601A Created Zip Spec      14 (20) '2.0'\n-5F601B Created OS            00 (0) 'MS-DOS'\n-5F601C Extract Zip Spec      14 (20) '2.0'\n-5F601D Extract OS            00 (0) 'MS-DOS'\n-5F601E General Purpose Flag  0000 (0)\n-5F6020 Compression Method    0000 (0) 'Stored'\n-5F6022 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6026 CRC                   00000000 (0)\n-5F602A Compressed Size       00000000 (0)\n-5F602E Uncompressed Size     00000000 (0)\n-5F6032 Filename Length       0043 (67)\n-5F6034 Extra Length          0009 (9)\n-5F6036 Comment Length        0000 (0)\n-5F6038 Disk Start            0000 (0)\n-5F603A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F603C Ext File Attributes   00000000 (0)\n-5F6040 Local Header Offset   0008EF40 (585536)\n-5F6044 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6044: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6087 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6089   Length              0005 (5)\n-5F608B   Flags               01 (1) 'Modification'\n-5F608C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6090 CENTRAL HEADER #276   02014B50 (33639248)\n-5F6094 Created Zip Spec      14 (20) '2.0'\n-5F6095 Created OS            00 (0) 'MS-DOS'\n-5F6096 Extract Zip Spec      14 (20) '2.0'\n-5F6097 Extract OS            00 (0) 'MS-DOS'\n-5F6098 General Purpose Flag  0000 (0)\n-5F609A Compression Method    0000 (0) 'Stored'\n-5F609C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F60A0 CRC                   00000000 (0)\n-5F60A4 Compressed Size       00000000 (0)\n-5F60A8 Uncompressed Size     00000000 (0)\n-5F60AC Filename Length       0061 (97)\n-5F60AE Extra Length          0009 (9)\n-5F60B0 Comment Length        0000 (0)\n-5F60B2 Disk Start            0000 (0)\n-5F60B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F60B6 Ext File Attributes   00000000 (0)\n-5F60BA Local Header Offset   0008EFAA (585642)\n-5F60BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F60BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F611F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6121   Length              0005 (5)\n-5F6123   Flags               01 (1) 'Modification'\n-5F6124   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6128 CENTRAL HEADER #277   02014B50 (33639248)\n-5F612C Created Zip Spec      14 (20) '2.0'\n-5F612D Created OS            00 (0) 'MS-DOS'\n-5F612E Extract Zip Spec      14 (20) '2.0'\n-5F612F Extract OS            00 (0) 'MS-DOS'\n-5F6130 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6132 Compression Method    0000 (0) 'Stored'\n-5F6134 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6138 CRC                   9ED7BE90 (2664939152)\n-5F613C Compressed Size       000036E7 (14055)\n-5F6140 Uncompressed Size     000036E7 (14055)\n-5F6144 Filename Length       0077 (119)\n-5F6146 Extra Length          0009 (9)\n-5F6148 Comment Length        0000 (0)\n-5F614A Disk Start            0000 (0)\n-5F614C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F614E Ext File Attributes   00000000 (0)\n-5F6152 Local Header Offset   0008F032 (585778)\n-5F6156 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6156: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F61CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F61CF   Length              0005 (5)\n-5F61D1   Flags               01 (1) 'Modification'\n-5F61D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F61D6 CENTRAL HEADER #278   02014B50 (33639248)\n-5F61DA Created Zip Spec      14 (20) '2.0'\n-5F61DB Created OS            00 (0) 'MS-DOS'\n-5F61DC Extract Zip Spec      14 (20) '2.0'\n-5F61DD Extract OS            00 (0) 'MS-DOS'\n-5F61DE General Purpose Flag  0000 (0)\n-5F61E0 Compression Method    0000 (0) 'Stored'\n-5F61E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F61E6 CRC                   00000000 (0)\n-5F61EA Compressed Size       00000000 (0)\n-5F61EE Uncompressed Size     00000000 (0)\n-5F61F2 Filename Length       0061 (97)\n-5F61F4 Extra Length          0009 (9)\n-5F61F6 Comment Length        0000 (0)\n-5F61F8 Disk Start            0000 (0)\n-5F61FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F61FC Ext File Attributes   00000000 (0)\n-5F6200 Local Header Offset   000927C7 (600007)\n-5F6204 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6204: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6265 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6267   Length              0005 (5)\n-5F6269   Flags               01 (1) 'Modification'\n-5F626A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F626E CENTRAL HEADER #279   02014B50 (33639248)\n-5F6272 Created Zip Spec      14 (20) '2.0'\n-5F6273 Created OS            00 (0) 'MS-DOS'\n-5F6274 Extract Zip Spec      14 (20) '2.0'\n-5F6275 Extract OS            00 (0) 'MS-DOS'\n-5F6276 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6278 Compression Method    0000 (0) 'Stored'\n-5F627A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F627E CRC                   DF1BCC3E (3743140926)\n-5F6282 Compressed Size       00004792 (18322)\n-5F6286 Uncompressed Size     00004792 (18322)\n-5F628A Filename Length       0077 (119)\n-5F628C Extra Length          0009 (9)\n-5F628E Comment Length        0000 (0)\n-5F6290 Disk Start            0000 (0)\n-5F6292 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6294 Ext File Attributes   00000000 (0)\n-5F6298 Local Header Offset   0009284F (600143)\n-5F629C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F629C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6313 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6315   Length              0005 (5)\n-5F6317   Flags               01 (1) 'Modification'\n-5F6318   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F631C CENTRAL HEADER #280   02014B50 (33639248)\n-5F6320 Created Zip Spec      14 (20) '2.0'\n-5F6321 Created OS            00 (0) 'MS-DOS'\n-5F6322 Extract Zip Spec      14 (20) '2.0'\n-5F6323 Extract OS            00 (0) 'MS-DOS'\n-5F6324 General Purpose Flag  0000 (0)\n-5F6326 Compression Method    0000 (0) 'Stored'\n-5F6328 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F632C CRC                   00000000 (0)\n-5F6330 Compressed Size       00000000 (0)\n-5F6334 Uncompressed Size     00000000 (0)\n-5F6338 Filename Length       0063 (99)\n-5F633A Extra Length          0009 (9)\n-5F633C Comment Length        0000 (0)\n-5F633E Disk Start            0000 (0)\n-5F6340 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6342 Ext File Attributes   00000000 (0)\n-5F6346 Local Header Offset   0009708F (618639)\n-5F634A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F634A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F63AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F63AF   Length              0005 (5)\n-5F63B1   Flags               01 (1) 'Modification'\n-5F63B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F63B6 CENTRAL HEADER #281   02014B50 (33639248)\n-5F63BA Created Zip Spec      14 (20) '2.0'\n-5F63BB Created OS            00 (0) 'MS-DOS'\n-5F63BC Extract Zip Spec      14 (20) '2.0'\n-5F63BD Extract OS            00 (0) 'MS-DOS'\n-5F63BE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F63C0 Compression Method    0000 (0) 'Stored'\n-5F63C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F63C6 CRC                   27CFA48B (667919499)\n-5F63CA Compressed Size       00005DDC (24028)\n-5F63CE Uncompressed Size     00005DDC (24028)\n-5F63D2 Filename Length       0079 (121)\n-5F63D4 Extra Length          0009 (9)\n-5F63D6 Comment Length        0000 (0)\n-5F63D8 Disk Start            0000 (0)\n-5F63DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F63DC Ext File Attributes   00000000 (0)\n-5F63E0 Local Header Offset   00097119 (618777)\n-5F63E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F63E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F645D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F645F   Length              0005 (5)\n-5F6461   Flags               01 (1) 'Modification'\n-5F6462   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6466 CENTRAL HEADER #282   02014B50 (33639248)\n-5F646A Created Zip Spec      14 (20) '2.0'\n-5F646B Created OS            00 (0) 'MS-DOS'\n-5F646C Extract Zip Spec      14 (20) '2.0'\n-5F646D Extract OS            00 (0) 'MS-DOS'\n-5F646E General Purpose Flag  0000 (0)\n-5F6470 Compression Method    0000 (0) 'Stored'\n-5F6472 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6476 CRC                   00000000 (0)\n-5F647A Compressed Size       00000000 (0)\n-5F647E Uncompressed Size     00000000 (0)\n-5F6482 Filename Length       0067 (103)\n-5F6484 Extra Length          0009 (9)\n-5F6486 Comment Length        0000 (0)\n-5F6488 Disk Start            0000 (0)\n-5F648A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F648C Ext File Attributes   00000000 (0)\n-5F6490 Local Header Offset   0009CFA5 (642981)\n-5F6494 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6494: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F64FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F64FD   Length              0005 (5)\n-5F64FF   Flags               01 (1) 'Modification'\n-5F6500   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6504 CENTRAL HEADER #283   02014B50 (33639248)\n-5F6508 Created Zip Spec      14 (20) '2.0'\n-5F6509 Created OS            00 (0) 'MS-DOS'\n-5F650A Extract Zip Spec      14 (20) '2.0'\n-5F650B Extract OS            00 (0) 'MS-DOS'\n-5F650C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F650E Compression Method    0000 (0) 'Stored'\n-5F6510 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6514 CRC                   620AB78F (1644869519)\n-5F6518 Compressed Size       00003B3A (15162)\n-5F651C Uncompressed Size     00003B3A (15162)\n-5F6520 Filename Length       007D (125)\n-5F6522 Extra Length          0009 (9)\n-5F6524 Comment Length        0000 (0)\n-5F6526 Disk Start            0000 (0)\n-5F6528 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F652A Ext File Attributes   00000000 (0)\n-5F652E Local Header Offset   0009D033 (643123)\n-5F6532 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6532: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F65AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F65B1   Length              0005 (5)\n-5F65B3   Flags               01 (1) 'Modification'\n-5F65B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F65B8 CENTRAL HEADER #284   02014B50 (33639248)\n-5F65BC Created Zip Spec      14 (20) '2.0'\n-5F65BD Created OS            00 (0) 'MS-DOS'\n-5F65BE Extract Zip Spec      14 (20) '2.0'\n-5F65BF Extract OS            00 (0) 'MS-DOS'\n-5F65C0 General Purpose Flag  0000 (0)\n-5F65C2 Compression Method    0000 (0) 'Stored'\n-5F65C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F65C8 CRC                   00000000 (0)\n-5F65CC Compressed Size       00000000 (0)\n-5F65D0 Uncompressed Size     00000000 (0)\n-5F65D4 Filename Length       0067 (103)\n-5F65D6 Extra Length          0009 (9)\n-5F65D8 Comment Length        0000 (0)\n-5F65DA Disk Start            0000 (0)\n-5F65DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F65DE Ext File Attributes   00000000 (0)\n-5F65E2 Local Header Offset   000A0C21 (658465)\n-5F65E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F65E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F664D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F664F   Length              0005 (5)\n-5F6651   Flags               01 (1) 'Modification'\n-5F6652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6656 CENTRAL HEADER #285   02014B50 (33639248)\n-5F665A Created Zip Spec      14 (20) '2.0'\n-5F665B Created OS            00 (0) 'MS-DOS'\n-5F665C Extract Zip Spec      14 (20) '2.0'\n-5F665D Extract OS            00 (0) 'MS-DOS'\n-5F665E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6660 Compression Method    0000 (0) 'Stored'\n-5F6662 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6666 CRC                   1E08683A (503867450)\n-5F666A Compressed Size       00004865 (18533)\n-5F666E Uncompressed Size     00004865 (18533)\n-5F6672 Filename Length       007D (125)\n-5F6674 Extra Length          0009 (9)\n-5F6676 Comment Length        0000 (0)\n-5F6678 Disk Start            0000 (0)\n-5F667A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F667C Ext File Attributes   00000000 (0)\n-5F6680 Local Header Offset   000A0CAF (658607)\n-5F6684 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F3A36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3A38   Length              0005 (5)\n+5F3A3A   Flags               01 (1) 'Modification'\n+5F3A3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3A3F CENTRAL HEADER #122   02014B50 (33639248)\n+5F3A43 Created Zip Spec      14 (20) '2.0'\n+5F3A44 Created OS            00 (0) 'MS-DOS'\n+5F3A45 Extract Zip Spec      14 (20) '2.0'\n+5F3A46 Extract OS            00 (0) 'MS-DOS'\n+5F3A47 General Purpose Flag  0000 (0)\n+5F3A49 Compression Method    0000 (0) 'Stored'\n+5F3A4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3A4F CRC                   00000000 (0)\n+5F3A53 Compressed Size       00000000 (0)\n+5F3A57 Uncompressed Size     00000000 (0)\n+5F3A5B Filename Length       0024 (36)\n+5F3A5D Extra Length          0009 (9)\n+5F3A5F Comment Length        0000 (0)\n+5F3A61 Disk Start            0000 (0)\n+5F3A63 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3A65 Ext File Attributes   00000000 (0)\n+5F3A69 Local Header Offset   0003CABC (248508)\n+5F3A6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3A6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3A91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3A93   Length              0005 (5)\n+5F3A95   Flags               01 (1) 'Modification'\n+5F3A96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3A9A CENTRAL HEADER #123   02014B50 (33639248)\n+5F3A9E Created Zip Spec      14 (20) '2.0'\n+5F3A9F Created OS            00 (0) 'MS-DOS'\n+5F3AA0 Extract Zip Spec      14 (20) '2.0'\n+5F3AA1 Extract OS            00 (0) 'MS-DOS'\n+5F3AA2 General Purpose Flag  0000 (0)\n+5F3AA4 Compression Method    0000 (0) 'Stored'\n+5F3AA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3AAA CRC                   00000000 (0)\n+5F3AAE Compressed Size       00000000 (0)\n+5F3AB2 Uncompressed Size     00000000 (0)\n+5F3AB6 Filename Length       002B (43)\n+5F3AB8 Extra Length          0009 (9)\n+5F3ABA Comment Length        0000 (0)\n+5F3ABC Disk Start            0000 (0)\n+5F3ABE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3AC0 Ext File Attributes   00000000 (0)\n+5F3AC4 Local Header Offset   0003CB07 (248583)\n+5F3AC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3AC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3AF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3AF5   Length              0005 (5)\n+5F3AF7   Flags               01 (1) 'Modification'\n+5F3AF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3AFC CENTRAL HEADER #124   02014B50 (33639248)\n+5F3B00 Created Zip Spec      14 (20) '2.0'\n+5F3B01 Created OS            00 (0) 'MS-DOS'\n+5F3B02 Extract Zip Spec      14 (20) '2.0'\n+5F3B03 Extract OS            00 (0) 'MS-DOS'\n+5F3B04 General Purpose Flag  0000 (0)\n+5F3B06 Compression Method    0000 (0) 'Stored'\n+5F3B08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3B0C CRC                   00000000 (0)\n+5F3B10 Compressed Size       00000000 (0)\n+5F3B14 Uncompressed Size     00000000 (0)\n+5F3B18 Filename Length       0058 (88)\n+5F3B1A Extra Length          0009 (9)\n+5F3B1C Comment Length        0000 (0)\n+5F3B1E Disk Start            0000 (0)\n+5F3B20 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3B22 Ext File Attributes   00000000 (0)\n+5F3B26 Local Header Offset   0003CB59 (248665)\n+5F3B2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3B2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3B82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3B84   Length              0005 (5)\n+5F3B86   Flags               01 (1) 'Modification'\n+5F3B87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3B8B CENTRAL HEADER #125   02014B50 (33639248)\n+5F3B8F Created Zip Spec      14 (20) '2.0'\n+5F3B90 Created OS            00 (0) 'MS-DOS'\n+5F3B91 Extract Zip Spec      14 (20) '2.0'\n+5F3B92 Extract OS            00 (0) 'MS-DOS'\n+5F3B93 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3B95 Compression Method    0000 (0) 'Stored'\n+5F3B97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3B9B CRC                   10CC5E74 (281828980)\n+5F3B9F Compressed Size       000009CD (2509)\n+5F3BA3 Uncompressed Size     000009CD (2509)\n+5F3BA7 Filename Length       006E (110)\n+5F3BA9 Extra Length          0009 (9)\n+5F3BAB Comment Length        0000 (0)\n+5F3BAD Disk Start            0000 (0)\n+5F3BAF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3BB1 Ext File Attributes   00000000 (0)\n+5F3BB5 Local Header Offset   0003CBD8 (248792)\n+5F3BB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3BB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3C27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3C29   Length              0005 (5)\n+5F3C2B   Flags               01 (1) 'Modification'\n+5F3C2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3C30 CENTRAL HEADER #126   02014B50 (33639248)\n+5F3C34 Created Zip Spec      14 (20) '2.0'\n+5F3C35 Created OS            00 (0) 'MS-DOS'\n+5F3C36 Extract Zip Spec      14 (20) '2.0'\n+5F3C37 Extract OS            00 (0) 'MS-DOS'\n+5F3C38 General Purpose Flag  0000 (0)\n+5F3C3A Compression Method    0000 (0) 'Stored'\n+5F3C3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3C40 CRC                   00000000 (0)\n+5F3C44 Compressed Size       00000000 (0)\n+5F3C48 Uncompressed Size     00000000 (0)\n+5F3C4C Filename Length       0058 (88)\n+5F3C4E Extra Length          0009 (9)\n+5F3C50 Comment Length        0000 (0)\n+5F3C52 Disk Start            0000 (0)\n+5F3C54 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3C56 Ext File Attributes   00000000 (0)\n+5F3C5A Local Header Offset   0003D64A (251466)\n+5F3C5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3C5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3CB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3CB8   Length              0005 (5)\n+5F3CBA   Flags               01 (1) 'Modification'\n+5F3CBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3CBF CENTRAL HEADER #127   02014B50 (33639248)\n+5F3CC3 Created Zip Spec      14 (20) '2.0'\n+5F3CC4 Created OS            00 (0) 'MS-DOS'\n+5F3CC5 Extract Zip Spec      14 (20) '2.0'\n+5F3CC6 Extract OS            00 (0) 'MS-DOS'\n+5F3CC7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3CC9 Compression Method    0000 (0) 'Stored'\n+5F3CCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3CCF CRC                   5F6BF872 (1600911474)\n+5F3CD3 Compressed Size       000009A0 (2464)\n+5F3CD7 Uncompressed Size     000009A0 (2464)\n+5F3CDB Filename Length       006E (110)\n+5F3CDD Extra Length          0009 (9)\n+5F3CDF Comment Length        0000 (0)\n+5F3CE1 Disk Start            0000 (0)\n+5F3CE3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3CE5 Ext File Attributes   00000000 (0)\n+5F3CE9 Local Header Offset   0003D6C9 (251593)\n+5F3CED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3CED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3D5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3D5D   Length              0005 (5)\n+5F3D5F   Flags               01 (1) 'Modification'\n+5F3D60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3D64 CENTRAL HEADER #128   02014B50 (33639248)\n+5F3D68 Created Zip Spec      14 (20) '2.0'\n+5F3D69 Created OS            00 (0) 'MS-DOS'\n+5F3D6A Extract Zip Spec      14 (20) '2.0'\n+5F3D6B Extract OS            00 (0) 'MS-DOS'\n+5F3D6C General Purpose Flag  0000 (0)\n+5F3D6E Compression Method    0000 (0) 'Stored'\n+5F3D70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3D74 CRC                   00000000 (0)\n+5F3D78 Compressed Size       00000000 (0)\n+5F3D7C Uncompressed Size     00000000 (0)\n+5F3D80 Filename Length       0023 (35)\n+5F3D82 Extra Length          0009 (9)\n+5F3D84 Comment Length        0000 (0)\n+5F3D86 Disk Start            0000 (0)\n+5F3D88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3D8A Ext File Attributes   00000000 (0)\n+5F3D8E Local Header Offset   0003E10E (254222)\n+5F3D92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3D92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3DB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3DB7   Length              0005 (5)\n+5F3DB9   Flags               01 (1) 'Modification'\n+5F3DBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3DBE CENTRAL HEADER #129   02014B50 (33639248)\n+5F3DC2 Created Zip Spec      14 (20) '2.0'\n+5F3DC3 Created OS            00 (0) 'MS-DOS'\n+5F3DC4 Extract Zip Spec      14 (20) '2.0'\n+5F3DC5 Extract OS            00 (0) 'MS-DOS'\n+5F3DC6 General Purpose Flag  0000 (0)\n+5F3DC8 Compression Method    0000 (0) 'Stored'\n+5F3DCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3DCE CRC                   00000000 (0)\n+5F3DD2 Compressed Size       00000000 (0)\n+5F3DD6 Uncompressed Size     00000000 (0)\n+5F3DDA Filename Length       002A (42)\n+5F3DDC Extra Length          0009 (9)\n+5F3DDE Comment Length        0000 (0)\n+5F3DE0 Disk Start            0000 (0)\n+5F3DE2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3DE4 Ext File Attributes   00000000 (0)\n+5F3DE8 Local Header Offset   0003E158 (254296)\n+5F3DEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3DEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3E16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3E18   Length              0005 (5)\n+5F3E1A   Flags               01 (1) 'Modification'\n+5F3E1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3E1F CENTRAL HEADER #130   02014B50 (33639248)\n+5F3E23 Created Zip Spec      14 (20) '2.0'\n+5F3E24 Created OS            00 (0) 'MS-DOS'\n+5F3E25 Extract Zip Spec      14 (20) '2.0'\n+5F3E26 Extract OS            00 (0) 'MS-DOS'\n+5F3E27 General Purpose Flag  0000 (0)\n+5F3E29 Compression Method    0000 (0) 'Stored'\n+5F3E2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3E2F CRC                   00000000 (0)\n+5F3E33 Compressed Size       00000000 (0)\n+5F3E37 Uncompressed Size     00000000 (0)\n+5F3E3B Filename Length       0054 (84)\n+5F3E3D Extra Length          0009 (9)\n+5F3E3F Comment Length        0000 (0)\n+5F3E41 Disk Start            0000 (0)\n+5F3E43 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3E45 Ext File Attributes   00000000 (0)\n+5F3E49 Local Header Offset   0003E1A9 (254377)\n+5F3E4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3E4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3EA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3EA3   Length              0005 (5)\n+5F3EA5   Flags               01 (1) 'Modification'\n+5F3EA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3EAA CENTRAL HEADER #131   02014B50 (33639248)\n+5F3EAE Created Zip Spec      14 (20) '2.0'\n+5F3EAF Created OS            00 (0) 'MS-DOS'\n+5F3EB0 Extract Zip Spec      14 (20) '2.0'\n+5F3EB1 Extract OS            00 (0) 'MS-DOS'\n+5F3EB2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F3EB4 Compression Method    0000 (0) 'Stored'\n+5F3EB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3EBA CRC                   456B0BC9 (1164643273)\n+5F3EBE Compressed Size       00001135 (4405)\n+5F3EC2 Uncompressed Size     00001135 (4405)\n+5F3EC6 Filename Length       006A (106)\n+5F3EC8 Extra Length          0009 (9)\n+5F3ECA Comment Length        0000 (0)\n+5F3ECC Disk Start            0000 (0)\n+5F3ECE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3ED0 Ext File Attributes   00000000 (0)\n+5F3ED4 Local Header Offset   0003E224 (254500)\n+5F3ED8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3ED8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3F42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3F44   Length              0005 (5)\n+5F3F46   Flags               01 (1) 'Modification'\n+5F3F47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3F4B CENTRAL HEADER #132   02014B50 (33639248)\n+5F3F4F Created Zip Spec      14 (20) '2.0'\n+5F3F50 Created OS            00 (0) 'MS-DOS'\n+5F3F51 Extract Zip Spec      14 (20) '2.0'\n+5F3F52 Extract OS            00 (0) 'MS-DOS'\n+5F3F53 General Purpose Flag  0000 (0)\n+5F3F55 Compression Method    0000 (0) 'Stored'\n+5F3F57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3F5B CRC                   00000000 (0)\n+5F3F5F Compressed Size       00000000 (0)\n+5F3F63 Uncompressed Size     00000000 (0)\n+5F3F67 Filename Length       0022 (34)\n+5F3F69 Extra Length          0009 (9)\n+5F3F6B Comment Length        0000 (0)\n+5F3F6D Disk Start            0000 (0)\n+5F3F6F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3F71 Ext File Attributes   00000000 (0)\n+5F3F75 Local Header Offset   0003F3FA (259066)\n+5F3F79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3F79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3F9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3F9D   Length              0005 (5)\n+5F3F9F   Flags               01 (1) 'Modification'\n+5F3FA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F3FA4 CENTRAL HEADER #133   02014B50 (33639248)\n+5F3FA8 Created Zip Spec      14 (20) '2.0'\n+5F3FA9 Created OS            00 (0) 'MS-DOS'\n+5F3FAA Extract Zip Spec      14 (20) '2.0'\n+5F3FAB Extract OS            00 (0) 'MS-DOS'\n+5F3FAC General Purpose Flag  0000 (0)\n+5F3FAE Compression Method    0000 (0) 'Stored'\n+5F3FB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F3FB4 CRC                   00000000 (0)\n+5F3FB8 Compressed Size       00000000 (0)\n+5F3FBC Uncompressed Size     00000000 (0)\n+5F3FC0 Filename Length       0029 (41)\n+5F3FC2 Extra Length          0009 (9)\n+5F3FC4 Comment Length        0000 (0)\n+5F3FC6 Disk Start            0000 (0)\n+5F3FC8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F3FCA Ext File Attributes   00000000 (0)\n+5F3FCE Local Header Offset   0003F443 (259139)\n+5F3FD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F3FD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F3FFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F3FFD   Length              0005 (5)\n+5F3FFF   Flags               01 (1) 'Modification'\n+5F4000   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4004 CENTRAL HEADER #134   02014B50 (33639248)\n+5F4008 Created Zip Spec      14 (20) '2.0'\n+5F4009 Created OS            00 (0) 'MS-DOS'\n+5F400A Extract Zip Spec      14 (20) '2.0'\n+5F400B Extract OS            00 (0) 'MS-DOS'\n+5F400C General Purpose Flag  0000 (0)\n+5F400E Compression Method    0000 (0) 'Stored'\n+5F4010 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4014 CRC                   00000000 (0)\n+5F4018 Compressed Size       00000000 (0)\n+5F401C Uncompressed Size     00000000 (0)\n+5F4020 Filename Length       005D (93)\n+5F4022 Extra Length          0009 (9)\n+5F4024 Comment Length        0000 (0)\n+5F4026 Disk Start            0000 (0)\n+5F4028 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F402A Ext File Attributes   00000000 (0)\n+5F402E Local Header Offset   0003F493 (259219)\n+5F4032 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4032: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F408F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4091   Length              0005 (5)\n+5F4093   Flags               01 (1) 'Modification'\n+5F4094   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4098 CENTRAL HEADER #135   02014B50 (33639248)\n+5F409C Created Zip Spec      14 (20) '2.0'\n+5F409D Created OS            00 (0) 'MS-DOS'\n+5F409E Extract Zip Spec      14 (20) '2.0'\n+5F409F Extract OS            00 (0) 'MS-DOS'\n+5F40A0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F40A2 Compression Method    0000 (0) 'Stored'\n+5F40A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F40A8 CRC                   6A45582D (1782929453)\n+5F40AC Compressed Size       000009E0 (2528)\n+5F40B0 Uncompressed Size     000009E0 (2528)\n+5F40B4 Filename Length       0073 (115)\n+5F40B6 Extra Length          0009 (9)\n+5F40B8 Comment Length        0000 (0)\n+5F40BA Disk Start            0000 (0)\n+5F40BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F40BE Ext File Attributes   00000000 (0)\n+5F40C2 Local Header Offset   0003F517 (259351)\n+5F40C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F40C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4139 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F413B   Length              0005 (5)\n+5F413D   Flags               01 (1) 'Modification'\n+5F413E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4142 CENTRAL HEADER #136   02014B50 (33639248)\n+5F4146 Created Zip Spec      14 (20) '2.0'\n+5F4147 Created OS            00 (0) 'MS-DOS'\n+5F4148 Extract Zip Spec      14 (20) '2.0'\n+5F4149 Extract OS            00 (0) 'MS-DOS'\n+5F414A General Purpose Flag  0000 (0)\n+5F414C Compression Method    0000 (0) 'Stored'\n+5F414E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4152 CRC                   00000000 (0)\n+5F4156 Compressed Size       00000000 (0)\n+5F415A Uncompressed Size     00000000 (0)\n+5F415E Filename Length       005F (95)\n+5F4160 Extra Length          0009 (9)\n+5F4162 Comment Length        0000 (0)\n+5F4164 Disk Start            0000 (0)\n+5F4166 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4168 Ext File Attributes   00000000 (0)\n+5F416C Local Header Offset   0003FFA1 (262049)\n+5F4170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F41CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F41D1   Length              0005 (5)\n+5F41D3   Flags               01 (1) 'Modification'\n+5F41D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F41D8 CENTRAL HEADER #137   02014B50 (33639248)\n+5F41DC Created Zip Spec      14 (20) '2.0'\n+5F41DD Created OS            00 (0) 'MS-DOS'\n+5F41DE Extract Zip Spec      14 (20) '2.0'\n+5F41DF Extract OS            00 (0) 'MS-DOS'\n+5F41E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F41E2 Compression Method    0000 (0) 'Stored'\n+5F41E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F41E8 CRC                   4731534C (1194414924)\n+5F41EC Compressed Size       00000B90 (2960)\n+5F41F0 Uncompressed Size     00000B90 (2960)\n+5F41F4 Filename Length       0075 (117)\n+5F41F6 Extra Length          0009 (9)\n+5F41F8 Comment Length        0000 (0)\n+5F41FA Disk Start            0000 (0)\n+5F41FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F41FE Ext File Attributes   00000000 (0)\n+5F4202 Local Header Offset   00040027 (262183)\n+5F4206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F427B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F427D   Length              0005 (5)\n+5F427F   Flags               01 (1) 'Modification'\n+5F4280   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4284 CENTRAL HEADER #138   02014B50 (33639248)\n+5F4288 Created Zip Spec      14 (20) '2.0'\n+5F4289 Created OS            00 (0) 'MS-DOS'\n+5F428A Extract Zip Spec      14 (20) '2.0'\n+5F428B Extract OS            00 (0) 'MS-DOS'\n+5F428C General Purpose Flag  0000 (0)\n+5F428E Compression Method    0000 (0) 'Stored'\n+5F4290 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4294 CRC                   00000000 (0)\n+5F4298 Compressed Size       00000000 (0)\n+5F429C Uncompressed Size     00000000 (0)\n+5F42A0 Filename Length       005E (94)\n+5F42A2 Extra Length          0009 (9)\n+5F42A4 Comment Length        0000 (0)\n+5F42A6 Disk Start            0000 (0)\n+5F42A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F42AA Ext File Attributes   00000000 (0)\n+5F42AE Local Header Offset   00040C63 (265315)\n+5F42B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F42B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4310 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4312   Length              0005 (5)\n+5F4314   Flags               01 (1) 'Modification'\n+5F4315   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4319 CENTRAL HEADER #139   02014B50 (33639248)\n+5F431D Created Zip Spec      14 (20) '2.0'\n+5F431E Created OS            00 (0) 'MS-DOS'\n+5F431F Extract Zip Spec      14 (20) '2.0'\n+5F4320 Extract OS            00 (0) 'MS-DOS'\n+5F4321 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4323 Compression Method    0000 (0) 'Stored'\n+5F4325 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4329 CRC                   CEBA8B64 (3468331876)\n+5F432D Compressed Size       00000A7D (2685)\n+5F4331 Uncompressed Size     00000A7D (2685)\n+5F4335 Filename Length       0074 (116)\n+5F4337 Extra Length          0009 (9)\n+5F4339 Comment Length        0000 (0)\n+5F433B Disk Start            0000 (0)\n+5F433D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F433F Ext File Attributes   00000000 (0)\n+5F4343 Local Header Offset   00040CE8 (265448)\n+5F4347 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4347: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F43BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F43BD   Length              0005 (5)\n+5F43BF   Flags               01 (1) 'Modification'\n+5F43C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F43C4 CENTRAL HEADER #140   02014B50 (33639248)\n+5F43C8 Created Zip Spec      14 (20) '2.0'\n+5F43C9 Created OS            00 (0) 'MS-DOS'\n+5F43CA Extract Zip Spec      14 (20) '2.0'\n+5F43CB Extract OS            00 (0) 'MS-DOS'\n+5F43CC General Purpose Flag  0000 (0)\n+5F43CE Compression Method    0000 (0) 'Stored'\n+5F43D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F43D4 CRC                   00000000 (0)\n+5F43D8 Compressed Size       00000000 (0)\n+5F43DC Uncompressed Size     00000000 (0)\n+5F43E0 Filename Length       005D (93)\n+5F43E2 Extra Length          0009 (9)\n+5F43E4 Comment Length        0000 (0)\n+5F43E6 Disk Start            0000 (0)\n+5F43E8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F43EA Ext File Attributes   00000000 (0)\n+5F43EE Local Header Offset   00041810 (268304)\n+5F43F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F43F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F444F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4451   Length              0005 (5)\n+5F4453   Flags               01 (1) 'Modification'\n+5F4454   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4458 CENTRAL HEADER #141   02014B50 (33639248)\n+5F445C Created Zip Spec      14 (20) '2.0'\n+5F445D Created OS            00 (0) 'MS-DOS'\n+5F445E Extract Zip Spec      14 (20) '2.0'\n+5F445F Extract OS            00 (0) 'MS-DOS'\n+5F4460 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4462 Compression Method    0000 (0) 'Stored'\n+5F4464 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4468 CRC                   0DACEA84 (229436036)\n+5F446C Compressed Size       00000A95 (2709)\n+5F4470 Uncompressed Size     00000A95 (2709)\n+5F4474 Filename Length       0073 (115)\n+5F4476 Extra Length          0009 (9)\n+5F4478 Comment Length        0000 (0)\n+5F447A Disk Start            0000 (0)\n+5F447C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F447E Ext File Attributes   00000000 (0)\n+5F4482 Local Header Offset   00041894 (268436)\n+5F4486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F44F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F44FB   Length              0005 (5)\n+5F44FD   Flags               01 (1) 'Modification'\n+5F44FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4502 CENTRAL HEADER #142   02014B50 (33639248)\n+5F4506 Created Zip Spec      14 (20) '2.0'\n+5F4507 Created OS            00 (0) 'MS-DOS'\n+5F4508 Extract Zip Spec      14 (20) '2.0'\n+5F4509 Extract OS            00 (0) 'MS-DOS'\n+5F450A General Purpose Flag  0000 (0)\n+5F450C Compression Method    0000 (0) 'Stored'\n+5F450E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4512 CRC                   00000000 (0)\n+5F4516 Compressed Size       00000000 (0)\n+5F451A Uncompressed Size     00000000 (0)\n+5F451E Filename Length       005E (94)\n+5F4520 Extra Length          0009 (9)\n+5F4522 Comment Length        0000 (0)\n+5F4524 Disk Start            0000 (0)\n+5F4526 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4528 Ext File Attributes   00000000 (0)\n+5F452C Local Header Offset   000423D3 (271315)\n+5F4530 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4530: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F458E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4590   Length              0005 (5)\n+5F4592   Flags               01 (1) 'Modification'\n+5F4593   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4597 CENTRAL HEADER #143   02014B50 (33639248)\n+5F459B Created Zip Spec      14 (20) '2.0'\n+5F459C Created OS            00 (0) 'MS-DOS'\n+5F459D Extract Zip Spec      14 (20) '2.0'\n+5F459E Extract OS            00 (0) 'MS-DOS'\n+5F459F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F45A1 Compression Method    0000 (0) 'Stored'\n+5F45A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F45A7 CRC                   2E84B239 (780448313)\n+5F45AB Compressed Size       0000121D (4637)\n+5F45AF Uncompressed Size     0000121D (4637)\n+5F45B3 Filename Length       0074 (116)\n+5F45B5 Extra Length          0009 (9)\n+5F45B7 Comment Length        0000 (0)\n+5F45B9 Disk Start            0000 (0)\n+5F45BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F45BD Ext File Attributes   00000000 (0)\n+5F45C1 Local Header Offset   00042458 (271448)\n+5F45C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F45C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4639 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F463B   Length              0005 (5)\n+5F463D   Flags               01 (1) 'Modification'\n+5F463E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4642 CENTRAL HEADER #144   02014B50 (33639248)\n+5F4646 Created Zip Spec      14 (20) '2.0'\n+5F4647 Created OS            00 (0) 'MS-DOS'\n+5F4648 Extract Zip Spec      14 (20) '2.0'\n+5F4649 Extract OS            00 (0) 'MS-DOS'\n+5F464A General Purpose Flag  0000 (0)\n+5F464C Compression Method    0000 (0) 'Stored'\n+5F464E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4652 CRC                   00000000 (0)\n+5F4656 Compressed Size       00000000 (0)\n+5F465A Uncompressed Size     00000000 (0)\n+5F465E Filename Length       0078 (120)\n+5F4660 Extra Length          0009 (9)\n+5F4662 Comment Length        0000 (0)\n+5F4664 Disk Start            0000 (0)\n+5F4666 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4668 Ext File Attributes   00000000 (0)\n+5F466C Local Header Offset   00043720 (276256)\n+5F4670 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4670: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F46E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F46EA   Length              0005 (5)\n+5F46EC   Flags               01 (1) 'Modification'\n+5F46ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F46F1 CENTRAL HEADER #145   02014B50 (33639248)\n+5F46F5 Created Zip Spec      14 (20) '2.0'\n+5F46F6 Created OS            00 (0) 'MS-DOS'\n+5F46F7 Extract Zip Spec      14 (20) '2.0'\n+5F46F8 Extract OS            00 (0) 'MS-DOS'\n+5F46F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F46FB Compression Method    0000 (0) 'Stored'\n+5F46FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4701 CRC                   10E7267F (283584127)\n+5F4705 Compressed Size       000006FB (1787)\n+5F4709 Uncompressed Size     000006FB (1787)\n+5F470D Filename Length       008E (142)\n+5F470F Extra Length          0009 (9)\n+5F4711 Comment Length        0000 (0)\n+5F4713 Disk Start            0000 (0)\n+5F4715 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4717 Ext File Attributes   00000000 (0)\n+5F471B Local Header Offset   000437BF (276415)\n+5F471F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F471F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F47AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F47AF   Length              0005 (5)\n+5F47B1   Flags               01 (1) 'Modification'\n+5F47B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F47B6 CENTRAL HEADER #146   02014B50 (33639248)\n+5F47BA Created Zip Spec      14 (20) '2.0'\n+5F47BB Created OS            00 (0) 'MS-DOS'\n+5F47BC Extract Zip Spec      14 (20) '2.0'\n+5F47BD Extract OS            00 (0) 'MS-DOS'\n+5F47BE General Purpose Flag  0000 (0)\n+5F47C0 Compression Method    0000 (0) 'Stored'\n+5F47C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F47C6 CRC                   00000000 (0)\n+5F47CA Compressed Size       00000000 (0)\n+5F47CE Uncompressed Size     00000000 (0)\n+5F47D2 Filename Length       0079 (121)\n+5F47D4 Extra Length          0009 (9)\n+5F47D6 Comment Length        0000 (0)\n+5F47D8 Disk Start            0000 (0)\n+5F47DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F47DC Ext File Attributes   00000000 (0)\n+5F47E0 Local Header Offset   00043F7F (278399)\n+5F47E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F47E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F485D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F485F   Length              0005 (5)\n+5F4861   Flags               01 (1) 'Modification'\n+5F4862   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4866 CENTRAL HEADER #147   02014B50 (33639248)\n+5F486A Created Zip Spec      14 (20) '2.0'\n+5F486B Created OS            00 (0) 'MS-DOS'\n+5F486C Extract Zip Spec      14 (20) '2.0'\n+5F486D Extract OS            00 (0) 'MS-DOS'\n+5F486E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4870 Compression Method    0000 (0) 'Stored'\n+5F4872 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4876 CRC                   24E47A3B (618953275)\n+5F487A Compressed Size       000006FF (1791)\n+5F487E Uncompressed Size     000006FF (1791)\n+5F4882 Filename Length       008F (143)\n+5F4884 Extra Length          0009 (9)\n+5F4886 Comment Length        0000 (0)\n+5F4888 Disk Start            0000 (0)\n+5F488A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F488C Ext File Attributes   00000000 (0)\n+5F4890 Local Header Offset   0004401F (278559)\n+5F4894 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4894: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4925   Length              0005 (5)\n+5F4927   Flags               01 (1) 'Modification'\n+5F4928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F492C CENTRAL HEADER #148   02014B50 (33639248)\n+5F4930 Created Zip Spec      14 (20) '2.0'\n+5F4931 Created OS            00 (0) 'MS-DOS'\n+5F4932 Extract Zip Spec      14 (20) '2.0'\n+5F4933 Extract OS            00 (0) 'MS-DOS'\n+5F4934 General Purpose Flag  0000 (0)\n+5F4936 Compression Method    0000 (0) 'Stored'\n+5F4938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F493C CRC                   00000000 (0)\n+5F4940 Compressed Size       00000000 (0)\n+5F4944 Uncompressed Size     00000000 (0)\n+5F4948 Filename Length       0074 (116)\n+5F494A Extra Length          0009 (9)\n+5F494C Comment Length        0000 (0)\n+5F494E Disk Start            0000 (0)\n+5F4950 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4952 Ext File Attributes   00000000 (0)\n+5F4956 Local Header Offset   000447E4 (280548)\n+5F495A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F495A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F49CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F49D0   Length              0005 (5)\n+5F49D2   Flags               01 (1) 'Modification'\n+5F49D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F49D7 CENTRAL HEADER #149   02014B50 (33639248)\n+5F49DB Created Zip Spec      14 (20) '2.0'\n+5F49DC Created OS            00 (0) 'MS-DOS'\n+5F49DD Extract Zip Spec      14 (20) '2.0'\n+5F49DE Extract OS            00 (0) 'MS-DOS'\n+5F49DF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F49E1 Compression Method    0000 (0) 'Stored'\n+5F49E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F49E7 CRC                   042BB565 (69973349)\n+5F49EB Compressed Size       00001364 (4964)\n+5F49EF Uncompressed Size     00001364 (4964)\n+5F49F3 Filename Length       008A (138)\n+5F49F5 Extra Length          0009 (9)\n+5F49F7 Comment Length        0000 (0)\n+5F49F9 Disk Start            0000 (0)\n+5F49FB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F49FD Ext File Attributes   00000000 (0)\n+5F4A01 Local Header Offset   0004487F (280703)\n+5F4A05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXX'\n+#\n+# WARNING: Offset 0x5F4A05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4A8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4A91   Length              0005 (5)\n+5F4A93   Flags               01 (1) 'Modification'\n+5F4A94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4A98 CENTRAL HEADER #150   02014B50 (33639248)\n+5F4A9C Created Zip Spec      14 (20) '2.0'\n+5F4A9D Created OS            00 (0) 'MS-DOS'\n+5F4A9E Extract Zip Spec      14 (20) '2.0'\n+5F4A9F Extract OS            00 (0) 'MS-DOS'\n+5F4AA0 General Purpose Flag  0000 (0)\n+5F4AA2 Compression Method    0000 (0) 'Stored'\n+5F4AA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4AA8 CRC                   00000000 (0)\n+5F4AAC Compressed Size       00000000 (0)\n+5F4AB0 Uncompressed Size     00000000 (0)\n+5F4AB4 Filename Length       0075 (117)\n+5F4AB6 Extra Length          0009 (9)\n+5F4AB8 Comment Length        0000 (0)\n+5F4ABA Disk Start            0000 (0)\n+5F4ABC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4ABE Ext File Attributes   00000000 (0)\n+5F4AC2 Local Header Offset   00045CA4 (285860)\n+5F4AC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4AC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4B3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4B3D   Length              0005 (5)\n+5F4B3F   Flags               01 (1) 'Modification'\n+5F4B40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4B44 CENTRAL HEADER #151   02014B50 (33639248)\n+5F4B48 Created Zip Spec      14 (20) '2.0'\n+5F4B49 Created OS            00 (0) 'MS-DOS'\n+5F4B4A Extract Zip Spec      14 (20) '2.0'\n+5F4B4B Extract OS            00 (0) 'MS-DOS'\n+5F4B4C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4B4E Compression Method    0000 (0) 'Stored'\n+5F4B50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4B54 CRC                   7A63232B (2053317419)\n+5F4B58 Compressed Size       000013C0 (5056)\n+5F4B5C Uncompressed Size     000013C0 (5056)\n+5F4B60 Filename Length       008B (139)\n+5F4B62 Extra Length          0009 (9)\n+5F4B64 Comment Length        0000 (0)\n+5F4B66 Disk Start            0000 (0)\n+5F4B68 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4B6A Ext File Attributes   00000000 (0)\n+5F4B6E Local Header Offset   00045D40 (286016)\n+5F4B72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXX'\n+#\n+# WARNING: Offset 0x5F4B72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4BFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4BFF   Length              0005 (5)\n+5F4C01   Flags               01 (1) 'Modification'\n+5F4C02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4C06 CENTRAL HEADER #152   02014B50 (33639248)\n+5F4C0A Created Zip Spec      14 (20) '2.0'\n+5F4C0B Created OS            00 (0) 'MS-DOS'\n+5F4C0C Extract Zip Spec      14 (20) '2.0'\n+5F4C0D Extract OS            00 (0) 'MS-DOS'\n+5F4C0E General Purpose Flag  0000 (0)\n+5F4C10 Compression Method    0000 (0) 'Stored'\n+5F4C12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4C16 CRC                   00000000 (0)\n+5F4C1A Compressed Size       00000000 (0)\n+5F4C1E Uncompressed Size     00000000 (0)\n+5F4C22 Filename Length       0026 (38)\n+5F4C24 Extra Length          0009 (9)\n+5F4C26 Comment Length        0000 (0)\n+5F4C28 Disk Start            0000 (0)\n+5F4C2A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4C2C Ext File Attributes   00000000 (0)\n+5F4C30 Local Header Offset   000471C2 (291266)\n+5F4C34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4C34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4C5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4C5C   Length              0005 (5)\n+5F4C5E   Flags               01 (1) 'Modification'\n+5F4C5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4C63 CENTRAL HEADER #153   02014B50 (33639248)\n+5F4C67 Created Zip Spec      14 (20) '2.0'\n+5F4C68 Created OS            00 (0) 'MS-DOS'\n+5F4C69 Extract Zip Spec      14 (20) '2.0'\n+5F4C6A Extract OS            00 (0) 'MS-DOS'\n+5F4C6B General Purpose Flag  0000 (0)\n+5F4C6D Compression Method    0000 (0) 'Stored'\n+5F4C6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4C73 CRC                   00000000 (0)\n+5F4C77 Compressed Size       00000000 (0)\n+5F4C7B Uncompressed Size     00000000 (0)\n+5F4C7F Filename Length       002D (45)\n+5F4C81 Extra Length          0009 (9)\n+5F4C83 Comment Length        0000 (0)\n+5F4C85 Disk Start            0000 (0)\n+5F4C87 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4C89 Ext File Attributes   00000000 (0)\n+5F4C8D Local Header Offset   0004720F (291343)\n+5F4C91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4C91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4CBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4CC0   Length              0005 (5)\n+5F4CC2   Flags               01 (1) 'Modification'\n+5F4CC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4CC7 CENTRAL HEADER #154   02014B50 (33639248)\n+5F4CCB Created Zip Spec      14 (20) '2.0'\n+5F4CCC Created OS            00 (0) 'MS-DOS'\n+5F4CCD Extract Zip Spec      14 (20) '2.0'\n+5F4CCE Extract OS            00 (0) 'MS-DOS'\n+5F4CCF General Purpose Flag  0000 (0)\n+5F4CD1 Compression Method    0000 (0) 'Stored'\n+5F4CD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4CD7 CRC                   00000000 (0)\n+5F4CDB Compressed Size       00000000 (0)\n+5F4CDF Uncompressed Size     00000000 (0)\n+5F4CE3 Filename Length       005E (94)\n+5F4CE5 Extra Length          0009 (9)\n+5F4CE7 Comment Length        0000 (0)\n+5F4CE9 Disk Start            0000 (0)\n+5F4CEB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4CED Ext File Attributes   00000000 (0)\n+5F4CF1 Local Header Offset   00047263 (291427)\n+5F4CF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4CF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4D53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4D55   Length              0005 (5)\n+5F4D57   Flags               01 (1) 'Modification'\n+5F4D58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4D5C CENTRAL HEADER #155   02014B50 (33639248)\n+5F4D60 Created Zip Spec      14 (20) '2.0'\n+5F4D61 Created OS            00 (0) 'MS-DOS'\n+5F4D62 Extract Zip Spec      14 (20) '2.0'\n+5F4D63 Extract OS            00 (0) 'MS-DOS'\n+5F4D64 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4D66 Compression Method    0000 (0) 'Stored'\n+5F4D68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4D6C CRC                   19888393 (428376979)\n+5F4D70 Compressed Size       0000092E (2350)\n+5F4D74 Uncompressed Size     0000092E (2350)\n+5F4D78 Filename Length       0074 (116)\n+5F4D7A Extra Length          0009 (9)\n+5F4D7C Comment Length        0000 (0)\n+5F4D7E Disk Start            0000 (0)\n+5F4D80 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4D82 Ext File Attributes   00000000 (0)\n+5F4D86 Local Header Offset   000472E8 (291560)\n+5F4D8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4D8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4DFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4E00   Length              0005 (5)\n+5F4E02   Flags               01 (1) 'Modification'\n+5F4E03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4E07 CENTRAL HEADER #156   02014B50 (33639248)\n+5F4E0B Created Zip Spec      14 (20) '2.0'\n+5F4E0C Created OS            00 (0) 'MS-DOS'\n+5F4E0D Extract Zip Spec      14 (20) '2.0'\n+5F4E0E Extract OS            00 (0) 'MS-DOS'\n+5F4E0F General Purpose Flag  0000 (0)\n+5F4E11 Compression Method    0000 (0) 'Stored'\n+5F4E13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4E17 CRC                   00000000 (0)\n+5F4E1B Compressed Size       00000000 (0)\n+5F4E1F Uncompressed Size     00000000 (0)\n+5F4E23 Filename Length       0026 (38)\n+5F4E25 Extra Length          0009 (9)\n+5F4E27 Comment Length        0000 (0)\n+5F4E29 Disk Start            0000 (0)\n+5F4E2B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4E2D Ext File Attributes   00000000 (0)\n+5F4E31 Local Header Offset   00047CC1 (294081)\n+5F4E35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4E35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4E5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4E5D   Length              0005 (5)\n+5F4E5F   Flags               01 (1) 'Modification'\n+5F4E60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4E64 CENTRAL HEADER #157   02014B50 (33639248)\n+5F4E68 Created Zip Spec      14 (20) '2.0'\n+5F4E69 Created OS            00 (0) 'MS-DOS'\n+5F4E6A Extract Zip Spec      14 (20) '2.0'\n+5F4E6B Extract OS            00 (0) 'MS-DOS'\n+5F4E6C General Purpose Flag  0000 (0)\n+5F4E6E Compression Method    0000 (0) 'Stored'\n+5F4E70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4E74 CRC                   00000000 (0)\n+5F4E78 Compressed Size       00000000 (0)\n+5F4E7C Uncompressed Size     00000000 (0)\n+5F4E80 Filename Length       002D (45)\n+5F4E82 Extra Length          0009 (9)\n+5F4E84 Comment Length        0000 (0)\n+5F4E86 Disk Start            0000 (0)\n+5F4E88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4E8A Ext File Attributes   00000000 (0)\n+5F4E8E Local Header Offset   00047D0E (294158)\n+5F4E92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4E92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4EBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4EC1   Length              0005 (5)\n+5F4EC3   Flags               01 (1) 'Modification'\n+5F4EC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4EC8 CENTRAL HEADER #158   02014B50 (33639248)\n+5F4ECC Created Zip Spec      14 (20) '2.0'\n+5F4ECD Created OS            00 (0) 'MS-DOS'\n+5F4ECE Extract Zip Spec      14 (20) '2.0'\n+5F4ECF Extract OS            00 (0) 'MS-DOS'\n+5F4ED0 General Purpose Flag  0000 (0)\n+5F4ED2 Compression Method    0000 (0) 'Stored'\n+5F4ED4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4ED8 CRC                   00000000 (0)\n+5F4EDC Compressed Size       00000000 (0)\n+5F4EE0 Uncompressed Size     00000000 (0)\n+5F4EE4 Filename Length       0064 (100)\n+5F4EE6 Extra Length          0009 (9)\n+5F4EE8 Comment Length        0000 (0)\n+5F4EEA Disk Start            0000 (0)\n+5F4EEC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4EEE Ext File Attributes   00000000 (0)\n+5F4EF2 Local Header Offset   00047D62 (294242)\n+5F4EF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4EF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4F5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F4F5C   Length              0005 (5)\n+5F4F5E   Flags               01 (1) 'Modification'\n+5F4F5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F4F63 CENTRAL HEADER #159   02014B50 (33639248)\n+5F4F67 Created Zip Spec      14 (20) '2.0'\n+5F4F68 Created OS            00 (0) 'MS-DOS'\n+5F4F69 Extract Zip Spec      14 (20) '2.0'\n+5F4F6A Extract OS            00 (0) 'MS-DOS'\n+5F4F6B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F4F6D Compression Method    0000 (0) 'Stored'\n+5F4F6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F4F73 CRC                   8B1E3BB7 (2334014391)\n+5F4F77 Compressed Size       00002091 (8337)\n+5F4F7B Uncompressed Size     00002091 (8337)\n+5F4F7F Filename Length       007A (122)\n+5F4F81 Extra Length          0009 (9)\n+5F4F83 Comment Length        0000 (0)\n+5F4F85 Disk Start            0000 (0)\n+5F4F87 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F4F89 Ext File Attributes   00000000 (0)\n+5F4F8D Local Header Offset   00047DED (294381)\n+5F4F91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F4F91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F500B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F500D   Length              0005 (5)\n+5F500F   Flags               01 (1) 'Modification'\n+5F5010   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5014 CENTRAL HEADER #160   02014B50 (33639248)\n+5F5018 Created Zip Spec      14 (20) '2.0'\n+5F5019 Created OS            00 (0) 'MS-DOS'\n+5F501A Extract Zip Spec      14 (20) '2.0'\n+5F501B Extract OS            00 (0) 'MS-DOS'\n+5F501C General Purpose Flag  0000 (0)\n+5F501E Compression Method    0000 (0) 'Stored'\n+5F5020 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5024 CRC                   00000000 (0)\n+5F5028 Compressed Size       00000000 (0)\n+5F502C Uncompressed Size     00000000 (0)\n+5F5030 Filename Length       0025 (37)\n+5F5032 Extra Length          0009 (9)\n+5F5034 Comment Length        0000 (0)\n+5F5036 Disk Start            0000 (0)\n+5F5038 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F503A Ext File Attributes   00000000 (0)\n+5F503E Local Header Offset   00049F2F (302895)\n+5F5042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5067 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5069   Length              0005 (5)\n+5F506B   Flags               01 (1) 'Modification'\n+5F506C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5070 CENTRAL HEADER #161   02014B50 (33639248)\n+5F5074 Created Zip Spec      14 (20) '2.0'\n+5F5075 Created OS            00 (0) 'MS-DOS'\n+5F5076 Extract Zip Spec      14 (20) '2.0'\n+5F5077 Extract OS            00 (0) 'MS-DOS'\n+5F5078 General Purpose Flag  0000 (0)\n+5F507A Compression Method    0000 (0) 'Stored'\n+5F507C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5080 CRC                   00000000 (0)\n+5F5084 Compressed Size       00000000 (0)\n+5F5088 Uncompressed Size     00000000 (0)\n+5F508C Filename Length       002C (44)\n+5F508E Extra Length          0009 (9)\n+5F5090 Comment Length        0000 (0)\n+5F5092 Disk Start            0000 (0)\n+5F5094 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5096 Ext File Attributes   00000000 (0)\n+5F509A Local Header Offset   00049F7B (302971)\n+5F509E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F509E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F50CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F50CC   Length              0005 (5)\n+5F50CE   Flags               01 (1) 'Modification'\n+5F50CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F50D3 CENTRAL HEADER #162   02014B50 (33639248)\n+5F50D7 Created Zip Spec      14 (20) '2.0'\n+5F50D8 Created OS            00 (0) 'MS-DOS'\n+5F50D9 Extract Zip Spec      14 (20) '2.0'\n+5F50DA Extract OS            00 (0) 'MS-DOS'\n+5F50DB General Purpose Flag  0000 (0)\n+5F50DD Compression Method    0000 (0) 'Stored'\n+5F50DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F50E3 CRC                   00000000 (0)\n+5F50E7 Compressed Size       00000000 (0)\n+5F50EB Uncompressed Size     00000000 (0)\n+5F50EF Filename Length       0067 (103)\n+5F50F1 Extra Length          0009 (9)\n+5F50F3 Comment Length        0000 (0)\n+5F50F5 Disk Start            0000 (0)\n+5F50F7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F50F9 Ext File Attributes   00000000 (0)\n+5F50FD Local Header Offset   00049FCE (303054)\n+5F5101 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5101: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5168 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F516A   Length              0005 (5)\n+5F516C   Flags               01 (1) 'Modification'\n+5F516D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5171 CENTRAL HEADER #163   02014B50 (33639248)\n+5F5175 Created Zip Spec      14 (20) '2.0'\n+5F5176 Created OS            00 (0) 'MS-DOS'\n+5F5177 Extract Zip Spec      14 (20) '2.0'\n+5F5178 Extract OS            00 (0) 'MS-DOS'\n+5F5179 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F517B Compression Method    0000 (0) 'Stored'\n+5F517D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5181 CRC                   EAE74E6F (3941027439)\n+5F5185 Compressed Size       00001481 (5249)\n+5F5189 Uncompressed Size     00001481 (5249)\n+5F518D Filename Length       007D (125)\n+5F518F Extra Length          0009 (9)\n+5F5191 Comment Length        0000 (0)\n+5F5193 Disk Start            0000 (0)\n+5F5195 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5197 Ext File Attributes   00000000 (0)\n+5F519B Local Header Offset   0004A05C (303196)\n+5F519F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F519F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F521C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F521E   Length              0005 (5)\n+5F5220   Flags               01 (1) 'Modification'\n+5F5221   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5225 CENTRAL HEADER #164   02014B50 (33639248)\n+5F5229 Created Zip Spec      14 (20) '2.0'\n+5F522A Created OS            00 (0) 'MS-DOS'\n+5F522B Extract Zip Spec      14 (20) '2.0'\n+5F522C Extract OS            00 (0) 'MS-DOS'\n+5F522D General Purpose Flag  0000 (0)\n+5F522F Compression Method    0000 (0) 'Stored'\n+5F5231 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5235 CRC                   00000000 (0)\n+5F5239 Compressed Size       00000000 (0)\n+5F523D Uncompressed Size     00000000 (0)\n+5F5241 Filename Length       0057 (87)\n+5F5243 Extra Length          0009 (9)\n+5F5245 Comment Length        0000 (0)\n+5F5247 Disk Start            0000 (0)\n+5F5249 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F524B Ext File Attributes   00000000 (0)\n+5F524F Local Header Offset   0004B591 (308625)\n+5F5253 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5253: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F52AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F52AC   Length              0005 (5)\n+5F52AE   Flags               01 (1) 'Modification'\n+5F52AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F52B3 CENTRAL HEADER #165   02014B50 (33639248)\n+5F52B7 Created Zip Spec      14 (20) '2.0'\n+5F52B8 Created OS            00 (0) 'MS-DOS'\n+5F52B9 Extract Zip Spec      14 (20) '2.0'\n+5F52BA Extract OS            00 (0) 'MS-DOS'\n+5F52BB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F52BD Compression Method    0000 (0) 'Stored'\n+5F52BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F52C3 CRC                   49F8AFD7 (1241034711)\n+5F52C7 Compressed Size       000025C9 (9673)\n+5F52CB Uncompressed Size     000025C9 (9673)\n+5F52CF Filename Length       006D (109)\n+5F52D1 Extra Length          0009 (9)\n+5F52D3 Comment Length        0000 (0)\n+5F52D5 Disk Start            0000 (0)\n+5F52D7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F52D9 Ext File Attributes   00000000 (0)\n+5F52DD Local Header Offset   0004B60F (308751)\n+5F52E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F52E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F534E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5350   Length              0005 (5)\n+5F5352   Flags               01 (1) 'Modification'\n+5F5353   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5357 CENTRAL HEADER #166   02014B50 (33639248)\n+5F535B Created Zip Spec      14 (20) '2.0'\n+5F535C Created OS            00 (0) 'MS-DOS'\n+5F535D Extract Zip Spec      14 (20) '2.0'\n+5F535E Extract OS            00 (0) 'MS-DOS'\n+5F535F General Purpose Flag  0000 (0)\n+5F5361 Compression Method    0000 (0) 'Stored'\n+5F5363 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5367 CRC                   00000000 (0)\n+5F536B Compressed Size       00000000 (0)\n+5F536F Uncompressed Size     00000000 (0)\n+5F5373 Filename Length       0056 (86)\n+5F5375 Extra Length          0009 (9)\n+5F5377 Comment Length        0000 (0)\n+5F5379 Disk Start            0000 (0)\n+5F537B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F537D Ext File Attributes   00000000 (0)\n+5F5381 Local Header Offset   0004DC7C (318588)\n+5F5385 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5385: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F53DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F53DD   Length              0005 (5)\n+5F53DF   Flags               01 (1) 'Modification'\n+5F53E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F53E4 CENTRAL HEADER #167   02014B50 (33639248)\n+5F53E8 Created Zip Spec      14 (20) '2.0'\n+5F53E9 Created OS            00 (0) 'MS-DOS'\n+5F53EA Extract Zip Spec      14 (20) '2.0'\n+5F53EB Extract OS            00 (0) 'MS-DOS'\n+5F53EC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F53EE Compression Method    0000 (0) 'Stored'\n+5F53F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F53F4 CRC                   332580F8 (858095864)\n+5F53F8 Compressed Size       00000E10 (3600)\n+5F53FC Uncompressed Size     00000E10 (3600)\n+5F5400 Filename Length       006C (108)\n+5F5402 Extra Length          0009 (9)\n+5F5404 Comment Length        0000 (0)\n+5F5406 Disk Start            0000 (0)\n+5F5408 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F540A Ext File Attributes   00000000 (0)\n+5F540E Local Header Offset   0004DCF9 (318713)\n+5F5412 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5412: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F547E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5480   Length              0005 (5)\n+5F5482   Flags               01 (1) 'Modification'\n+5F5483   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5487 CENTRAL HEADER #168   02014B50 (33639248)\n+5F548B Created Zip Spec      14 (20) '2.0'\n+5F548C Created OS            00 (0) 'MS-DOS'\n+5F548D Extract Zip Spec      14 (20) '2.0'\n+5F548E Extract OS            00 (0) 'MS-DOS'\n+5F548F General Purpose Flag  0000 (0)\n+5F5491 Compression Method    0000 (0) 'Stored'\n+5F5493 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5497 CRC                   00000000 (0)\n+5F549B Compressed Size       00000000 (0)\n+5F549F Uncompressed Size     00000000 (0)\n+5F54A3 Filename Length       002E (46)\n+5F54A5 Extra Length          0009 (9)\n+5F54A7 Comment Length        0000 (0)\n+5F54A9 Disk Start            0000 (0)\n+5F54AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F54AD Ext File Attributes   00000000 (0)\n+5F54B1 Local Header Offset   0004EBAC (322476)\n+5F54B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F54B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F54E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F54E5   Length              0005 (5)\n+5F54E7   Flags               01 (1) 'Modification'\n+5F54E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F54EC CENTRAL HEADER #169   02014B50 (33639248)\n+5F54F0 Created Zip Spec      14 (20) '2.0'\n+5F54F1 Created OS            00 (0) 'MS-DOS'\n+5F54F2 Extract Zip Spec      14 (20) '2.0'\n+5F54F3 Extract OS            00 (0) 'MS-DOS'\n+5F54F4 General Purpose Flag  0000 (0)\n+5F54F6 Compression Method    0000 (0) 'Stored'\n+5F54F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F54FC CRC                   00000000 (0)\n+5F5500 Compressed Size       00000000 (0)\n+5F5504 Uncompressed Size     00000000 (0)\n+5F5508 Filename Length       0035 (53)\n+5F550A Extra Length          0009 (9)\n+5F550C Comment Length        0000 (0)\n+5F550E Disk Start            0000 (0)\n+5F5510 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5512 Ext File Attributes   00000000 (0)\n+5F5516 Local Header Offset   0004EC01 (322561)\n+5F551A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F551A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F554F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5551   Length              0005 (5)\n+5F5553   Flags               01 (1) 'Modification'\n+5F5554   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5558 CENTRAL HEADER #170   02014B50 (33639248)\n+5F555C Created Zip Spec      14 (20) '2.0'\n+5F555D Created OS            00 (0) 'MS-DOS'\n+5F555E Extract Zip Spec      14 (20) '2.0'\n+5F555F Extract OS            00 (0) 'MS-DOS'\n+5F5560 General Purpose Flag  0000 (0)\n+5F5562 Compression Method    0000 (0) 'Stored'\n+5F5564 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5568 CRC                   00000000 (0)\n+5F556C Compressed Size       00000000 (0)\n+5F5570 Uncompressed Size     00000000 (0)\n+5F5574 Filename Length       0079 (121)\n+5F5576 Extra Length          0009 (9)\n+5F5578 Comment Length        0000 (0)\n+5F557A Disk Start            0000 (0)\n+5F557C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F557E Ext File Attributes   00000000 (0)\n+5F5582 Local Header Offset   0004EC5D (322653)\n+5F5586 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5586: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F55FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5601   Length              0005 (5)\n+5F5603   Flags               01 (1) 'Modification'\n+5F5604   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5608 CENTRAL HEADER #171   02014B50 (33639248)\n+5F560C Created Zip Spec      14 (20) '2.0'\n+5F560D Created OS            00 (0) 'MS-DOS'\n+5F560E Extract Zip Spec      14 (20) '2.0'\n+5F560F Extract OS            00 (0) 'MS-DOS'\n+5F5610 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5612 Compression Method    0000 (0) 'Stored'\n+5F5614 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5618 CRC                   0D142FFC (219426812)\n+5F561C Compressed Size       00001A7B (6779)\n+5F5620 Uncompressed Size     00001A7B (6779)\n+5F5624 Filename Length       008F (143)\n+5F5626 Extra Length          0009 (9)\n+5F5628 Comment Length        0000 (0)\n+5F562A Disk Start            0000 (0)\n+5F562C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F562E Ext File Attributes   00000000 (0)\n+5F5632 Local Header Offset   0004ECFD (322813)\n+5F5636 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5636: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F56C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F56C7   Length              0005 (5)\n+5F56C9   Flags               01 (1) 'Modification'\n+5F56CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F56CE CENTRAL HEADER #172   02014B50 (33639248)\n+5F56D2 Created Zip Spec      14 (20) '2.0'\n+5F56D3 Created OS            00 (0) 'MS-DOS'\n+5F56D4 Extract Zip Spec      14 (20) '2.0'\n+5F56D5 Extract OS            00 (0) 'MS-DOS'\n+5F56D6 General Purpose Flag  0000 (0)\n+5F56D8 Compression Method    0000 (0) 'Stored'\n+5F56DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F56DE CRC                   00000000 (0)\n+5F56E2 Compressed Size       00000000 (0)\n+5F56E6 Uncompressed Size     00000000 (0)\n+5F56EA Filename Length       0031 (49)\n+5F56EC Extra Length          0009 (9)\n+5F56EE Comment Length        0000 (0)\n+5F56F0 Disk Start            0000 (0)\n+5F56F2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F56F4 Ext File Attributes   00000000 (0)\n+5F56F8 Local Header Offset   0005083E (329790)\n+5F56FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F56FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F572D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F572F   Length              0005 (5)\n+5F5731   Flags               01 (1) 'Modification'\n+5F5732   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5736 CENTRAL HEADER #173   02014B50 (33639248)\n+5F573A Created Zip Spec      14 (20) '2.0'\n+5F573B Created OS            00 (0) 'MS-DOS'\n+5F573C Extract Zip Spec      14 (20) '2.0'\n+5F573D Extract OS            00 (0) 'MS-DOS'\n+5F573E General Purpose Flag  0000 (0)\n+5F5740 Compression Method    0000 (0) 'Stored'\n+5F5742 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5746 CRC                   00000000 (0)\n+5F574A Compressed Size       00000000 (0)\n+5F574E Uncompressed Size     00000000 (0)\n+5F5752 Filename Length       0038 (56)\n+5F5754 Extra Length          0009 (9)\n+5F5756 Comment Length        0000 (0)\n+5F5758 Disk Start            0000 (0)\n+5F575A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F575C Ext File Attributes   00000000 (0)\n+5F5760 Local Header Offset   00050896 (329878)\n+5F5764 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5764: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F579C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F579E   Length              0005 (5)\n+5F57A0   Flags               01 (1) 'Modification'\n+5F57A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F57A5 CENTRAL HEADER #174   02014B50 (33639248)\n+5F57A9 Created Zip Spec      14 (20) '2.0'\n+5F57AA Created OS            00 (0) 'MS-DOS'\n+5F57AB Extract Zip Spec      14 (20) '2.0'\n+5F57AC Extract OS            00 (0) 'MS-DOS'\n+5F57AD General Purpose Flag  0000 (0)\n+5F57AF Compression Method    0000 (0) 'Stored'\n+5F57B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F57B5 CRC                   00000000 (0)\n+5F57B9 Compressed Size       00000000 (0)\n+5F57BD Uncompressed Size     00000000 (0)\n+5F57C1 Filename Length       007F (127)\n+5F57C3 Extra Length          0009 (9)\n+5F57C5 Comment Length        0000 (0)\n+5F57C7 Disk Start            0000 (0)\n+5F57C9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F57CB Ext File Attributes   00000000 (0)\n+5F57CF Local Header Offset   000508F5 (329973)\n+5F57D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F57D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5852 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5854   Length              0005 (5)\n+5F5856   Flags               01 (1) 'Modification'\n+5F5857   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F585B CENTRAL HEADER #175   02014B50 (33639248)\n+5F585F Created Zip Spec      14 (20) '2.0'\n+5F5860 Created OS            00 (0) 'MS-DOS'\n+5F5861 Extract Zip Spec      14 (20) '2.0'\n+5F5862 Extract OS            00 (0) 'MS-DOS'\n+5F5863 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5865 Compression Method    0000 (0) 'Stored'\n+5F5867 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F586B CRC                   726CFBF2 (1919745010)\n+5F586F Compressed Size       00000886 (2182)\n+5F5873 Uncompressed Size     00000886 (2182)\n+5F5877 Filename Length       0095 (149)\n+5F5879 Extra Length          0009 (9)\n+5F587B Comment Length        0000 (0)\n+5F587D Disk Start            0000 (0)\n+5F587F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5881 Ext File Attributes   00000000 (0)\n+5F5885 Local Header Offset   0005099B (330139)\n+5F5889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F591E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5920   Length              0005 (5)\n+5F5922   Flags               01 (1) 'Modification'\n+5F5923   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5927 CENTRAL HEADER #176   02014B50 (33639248)\n+5F592B Created Zip Spec      14 (20) '2.0'\n+5F592C Created OS            00 (0) 'MS-DOS'\n+5F592D Extract Zip Spec      14 (20) '2.0'\n+5F592E Extract OS            00 (0) 'MS-DOS'\n+5F592F General Purpose Flag  0000 (0)\n+5F5931 Compression Method    0000 (0) 'Stored'\n+5F5933 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5937 CRC                   00000000 (0)\n+5F593B Compressed Size       00000000 (0)\n+5F593F Uncompressed Size     00000000 (0)\n+5F5943 Filename Length       0086 (134)\n+5F5945 Extra Length          0009 (9)\n+5F5947 Comment Length        0000 (0)\n+5F5949 Disk Start            0000 (0)\n+5F594B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F594D Ext File Attributes   00000000 (0)\n+5F5951 Local Header Offset   000512ED (332525)\n+5F5955 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XX'\n+#\n+# WARNING: Offset 0x5F5955: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F59DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F59DD   Length              0005 (5)\n+5F59DF   Flags               01 (1) 'Modification'\n+5F59E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F59E4 CENTRAL HEADER #177   02014B50 (33639248)\n+5F59E8 Created Zip Spec      14 (20) '2.0'\n+5F59E9 Created OS            00 (0) 'MS-DOS'\n+5F59EA Extract Zip Spec      14 (20) '2.0'\n+5F59EB Extract OS            00 (0) 'MS-DOS'\n+5F59EC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F59EE Compression Method    0000 (0) 'Stored'\n+5F59F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F59F4 CRC                   0124A640 (19179072)\n+5F59F8 Compressed Size       00001071 (4209)\n+5F59FC Uncompressed Size     00001071 (4209)\n+5F5A00 Filename Length       009C (156)\n+5F5A02 Extra Length          0009 (9)\n+5F5A04 Comment Length        0000 (0)\n+5F5A06 Disk Start            0000 (0)\n+5F5A08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5A0A Ext File Attributes   00000000 (0)\n+5F5A0E Local Header Offset   0005139A (332698)\n+5F5A12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F6684: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F5A12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5AAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5AB0   Length              0005 (5)\n+5F5AB2   Flags               01 (1) 'Modification'\n+5F5AB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5AB7 CENTRAL HEADER #178   02014B50 (33639248)\n+5F5ABB Created Zip Spec      14 (20) '2.0'\n+5F5ABC Created OS            00 (0) 'MS-DOS'\n+5F5ABD Extract Zip Spec      14 (20) '2.0'\n+5F5ABE Extract OS            00 (0) 'MS-DOS'\n+5F5ABF General Purpose Flag  0000 (0)\n+5F5AC1 Compression Method    0000 (0) 'Stored'\n+5F5AC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5AC7 CRC                   00000000 (0)\n+5F5ACB Compressed Size       00000000 (0)\n+5F5ACF Uncompressed Size     00000000 (0)\n+5F5AD3 Filename Length       0086 (134)\n+5F5AD5 Extra Length          0009 (9)\n+5F5AD7 Comment Length        0000 (0)\n+5F5AD9 Disk Start            0000 (0)\n+5F5ADB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5ADD Ext File Attributes   00000000 (0)\n+5F5AE1 Local Header Offset   000524DE (337118)\n+5F5AE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XX'\n+#\n+# WARNING: Offset 0x5F5AE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5B6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5B6D   Length              0005 (5)\n+5F5B6F   Flags               01 (1) 'Modification'\n+5F5B70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5B74 CENTRAL HEADER #179   02014B50 (33639248)\n+5F5B78 Created Zip Spec      14 (20) '2.0'\n+5F5B79 Created OS            00 (0) 'MS-DOS'\n+5F5B7A Extract Zip Spec      14 (20) '2.0'\n+5F5B7B Extract OS            00 (0) 'MS-DOS'\n+5F5B7C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5B7E Compression Method    0000 (0) 'Stored'\n+5F5B80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5B84 CRC                   7E793C9C (2121874588)\n+5F5B88 Compressed Size       000008CC (2252)\n+5F5B8C Uncompressed Size     000008CC (2252)\n+5F5B90 Filename Length       009C (156)\n+5F5B92 Extra Length          0009 (9)\n+5F5B94 Comment Length        0000 (0)\n+5F5B96 Disk Start            0000 (0)\n+5F5B98 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5B9A Ext File Attributes   00000000 (0)\n+5F5B9E Local Header Offset   0005258B (337291)\n+5F5BA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5BA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5C3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5C40   Length              0005 (5)\n+5F5C42   Flags               01 (1) 'Modification'\n+5F5C43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5C47 CENTRAL HEADER #180   02014B50 (33639248)\n+5F5C4B Created Zip Spec      14 (20) '2.0'\n+5F5C4C Created OS            00 (0) 'MS-DOS'\n+5F5C4D Extract Zip Spec      14 (20) '2.0'\n+5F5C4E Extract OS            00 (0) 'MS-DOS'\n+5F5C4F General Purpose Flag  0000 (0)\n+5F5C51 Compression Method    0000 (0) 'Stored'\n+5F5C53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5C57 CRC                   00000000 (0)\n+5F5C5B Compressed Size       00000000 (0)\n+5F5C5F Uncompressed Size     00000000 (0)\n+5F5C63 Filename Length       0024 (36)\n+5F5C65 Extra Length          0009 (9)\n+5F5C67 Comment Length        0000 (0)\n+5F5C69 Disk Start            0000 (0)\n+5F5C6B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5C6D Ext File Attributes   00000000 (0)\n+5F5C71 Local Header Offset   00052F2A (339754)\n+5F5C75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5C75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5C99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5C9B   Length              0005 (5)\n+5F5C9D   Flags               01 (1) 'Modification'\n+5F5C9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5CA2 CENTRAL HEADER #181   02014B50 (33639248)\n+5F5CA6 Created Zip Spec      14 (20) '2.0'\n+5F5CA7 Created OS            00 (0) 'MS-DOS'\n+5F5CA8 Extract Zip Spec      14 (20) '2.0'\n+5F5CA9 Extract OS            00 (0) 'MS-DOS'\n+5F5CAA General Purpose Flag  0000 (0)\n+5F5CAC Compression Method    0000 (0) 'Stored'\n+5F5CAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5CB2 CRC                   00000000 (0)\n+5F5CB6 Compressed Size       00000000 (0)\n+5F5CBA Uncompressed Size     00000000 (0)\n+5F5CBE Filename Length       002B (43)\n+5F5CC0 Extra Length          0009 (9)\n+5F5CC2 Comment Length        0000 (0)\n+5F5CC4 Disk Start            0000 (0)\n+5F5CC6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5CC8 Ext File Attributes   00000000 (0)\n+5F5CCC Local Header Offset   00052F75 (339829)\n+5F5CD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5CD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5CFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5CFD   Length              0005 (5)\n+5F5CFF   Flags               01 (1) 'Modification'\n+5F5D00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5D04 CENTRAL HEADER #182   02014B50 (33639248)\n+5F5D08 Created Zip Spec      14 (20) '2.0'\n+5F5D09 Created OS            00 (0) 'MS-DOS'\n+5F5D0A Extract Zip Spec      14 (20) '2.0'\n+5F5D0B Extract OS            00 (0) 'MS-DOS'\n+5F5D0C General Purpose Flag  0000 (0)\n+5F5D0E Compression Method    0000 (0) 'Stored'\n+5F5D10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5D14 CRC                   00000000 (0)\n+5F5D18 Compressed Size       00000000 (0)\n+5F5D1C Uncompressed Size     00000000 (0)\n+5F5D20 Filename Length       0052 (82)\n+5F5D22 Extra Length          0009 (9)\n+5F5D24 Comment Length        0000 (0)\n+5F5D26 Disk Start            0000 (0)\n+5F5D28 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5D2A Ext File Attributes   00000000 (0)\n+5F5D2E Local Header Offset   00052FC7 (339911)\n+5F5D32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5D32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5D84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5D86   Length              0005 (5)\n+5F5D88   Flags               01 (1) 'Modification'\n+5F5D89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5D8D CENTRAL HEADER #183   02014B50 (33639248)\n+5F5D91 Created Zip Spec      14 (20) '2.0'\n+5F5D92 Created OS            00 (0) 'MS-DOS'\n+5F5D93 Extract Zip Spec      14 (20) '2.0'\n+5F5D94 Extract OS            00 (0) 'MS-DOS'\n+5F5D95 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5D97 Compression Method    0000 (0) 'Stored'\n+5F5D99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5D9D CRC                   A8584B88 (2824358792)\n+5F5DA1 Compressed Size       0000070D (1805)\n+5F5DA5 Uncompressed Size     0000070D (1805)\n+5F5DA9 Filename Length       0068 (104)\n+5F5DAB Extra Length          0009 (9)\n+5F5DAD Comment Length        0000 (0)\n+5F5DAF Disk Start            0000 (0)\n+5F5DB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5DB3 Ext File Attributes   00000000 (0)\n+5F5DB7 Local Header Offset   00053040 (340032)\n+5F5DBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5DBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5E23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5E25   Length              0005 (5)\n+5F5E27   Flags               01 (1) 'Modification'\n+5F5E28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5E2C CENTRAL HEADER #184   02014B50 (33639248)\n+5F5E30 Created Zip Spec      14 (20) '2.0'\n+5F5E31 Created OS            00 (0) 'MS-DOS'\n+5F5E32 Extract Zip Spec      14 (20) '2.0'\n+5F5E33 Extract OS            00 (0) 'MS-DOS'\n+5F5E34 General Purpose Flag  0000 (0)\n+5F5E36 Compression Method    0000 (0) 'Stored'\n+5F5E38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5E3C CRC                   00000000 (0)\n+5F5E40 Compressed Size       00000000 (0)\n+5F5E44 Uncompressed Size     00000000 (0)\n+5F5E48 Filename Length       004E (78)\n+5F5E4A Extra Length          0009 (9)\n+5F5E4C Comment Length        0000 (0)\n+5F5E4E Disk Start            0000 (0)\n+5F5E50 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5E52 Ext File Attributes   00000000 (0)\n+5F5E56 Local Header Offset   000537EC (341996)\n+5F5E5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5E5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5EA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5EAA   Length              0005 (5)\n+5F5EAC   Flags               01 (1) 'Modification'\n+5F5EAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5EB1 CENTRAL HEADER #185   02014B50 (33639248)\n+5F5EB5 Created Zip Spec      14 (20) '2.0'\n+5F5EB6 Created OS            00 (0) 'MS-DOS'\n+5F5EB7 Extract Zip Spec      14 (20) '2.0'\n+5F5EB8 Extract OS            00 (0) 'MS-DOS'\n+5F5EB9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5EBB Compression Method    0000 (0) 'Stored'\n+5F5EBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5EC1 CRC                   A8336B4A (2821942090)\n+5F5EC5 Compressed Size       00000760 (1888)\n+5F5EC9 Uncompressed Size     00000760 (1888)\n+5F5ECD Filename Length       0064 (100)\n+5F5ECF Extra Length          0009 (9)\n+5F5ED1 Comment Length        0000 (0)\n+5F5ED3 Disk Start            0000 (0)\n+5F5ED5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5ED7 Ext File Attributes   00000000 (0)\n+5F5EDB Local Header Offset   00053861 (342113)\n+5F5EDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5EDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5F43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5F45   Length              0005 (5)\n+5F5F47   Flags               01 (1) 'Modification'\n+5F5F48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5F4C CENTRAL HEADER #186   02014B50 (33639248)\n+5F5F50 Created Zip Spec      14 (20) '2.0'\n+5F5F51 Created OS            00 (0) 'MS-DOS'\n+5F5F52 Extract Zip Spec      14 (20) '2.0'\n+5F5F53 Extract OS            00 (0) 'MS-DOS'\n+5F5F54 General Purpose Flag  0000 (0)\n+5F5F56 Compression Method    0000 (0) 'Stored'\n+5F5F58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5F5C CRC                   00000000 (0)\n+5F5F60 Compressed Size       00000000 (0)\n+5F5F64 Uncompressed Size     00000000 (0)\n+5F5F68 Filename Length       004E (78)\n+5F5F6A Extra Length          0009 (9)\n+5F5F6C Comment Length        0000 (0)\n+5F5F6E Disk Start            0000 (0)\n+5F5F70 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5F72 Ext File Attributes   00000000 (0)\n+5F5F76 Local Header Offset   0005405C (344156)\n+5F5F7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5F7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F5FC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F5FCA   Length              0005 (5)\n+5F5FCC   Flags               01 (1) 'Modification'\n+5F5FCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F5FD1 CENTRAL HEADER #187   02014B50 (33639248)\n+5F5FD5 Created Zip Spec      14 (20) '2.0'\n+5F5FD6 Created OS            00 (0) 'MS-DOS'\n+5F5FD7 Extract Zip Spec      14 (20) '2.0'\n+5F5FD8 Extract OS            00 (0) 'MS-DOS'\n+5F5FD9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F5FDB Compression Method    0000 (0) 'Stored'\n+5F5FDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F5FE1 CRC                   7559BE1A (1968815642)\n+5F5FE5 Compressed Size       00000764 (1892)\n+5F5FE9 Uncompressed Size     00000764 (1892)\n+5F5FED Filename Length       0064 (100)\n+5F5FEF Extra Length          0009 (9)\n+5F5FF1 Comment Length        0000 (0)\n+5F5FF3 Disk Start            0000 (0)\n+5F5FF5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F5FF7 Ext File Attributes   00000000 (0)\n+5F5FFB Local Header Offset   000540D1 (344273)\n+5F5FFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F5FFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6063 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6065   Length              0005 (5)\n+5F6067   Flags               01 (1) 'Modification'\n+5F6068   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F606C CENTRAL HEADER #188   02014B50 (33639248)\n+5F6070 Created Zip Spec      14 (20) '2.0'\n+5F6071 Created OS            00 (0) 'MS-DOS'\n+5F6072 Extract Zip Spec      14 (20) '2.0'\n+5F6073 Extract OS            00 (0) 'MS-DOS'\n+5F6074 General Purpose Flag  0000 (0)\n+5F6076 Compression Method    0000 (0) 'Stored'\n+5F6078 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F607C CRC                   00000000 (0)\n+5F6080 Compressed Size       00000000 (0)\n+5F6084 Uncompressed Size     00000000 (0)\n+5F6088 Filename Length       0050 (80)\n+5F608A Extra Length          0009 (9)\n+5F608C Comment Length        0000 (0)\n+5F608E Disk Start            0000 (0)\n+5F6090 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6092 Ext File Attributes   00000000 (0)\n+5F6096 Local Header Offset   000548D0 (346320)\n+5F609A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F609A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F60EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F60EC   Length              0005 (5)\n+5F60EE   Flags               01 (1) 'Modification'\n+5F60EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F60F3 CENTRAL HEADER #189   02014B50 (33639248)\n+5F60F7 Created Zip Spec      14 (20) '2.0'\n+5F60F8 Created OS            00 (0) 'MS-DOS'\n+5F60F9 Extract Zip Spec      14 (20) '2.0'\n+5F60FA Extract OS            00 (0) 'MS-DOS'\n+5F60FB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F60FD Compression Method    0000 (0) 'Stored'\n+5F60FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6103 CRC                   F2039839 (4060321849)\n+5F6107 Compressed Size       00000F35 (3893)\n+5F610B Uncompressed Size     00000F35 (3893)\n+5F610F Filename Length       0066 (102)\n+5F6111 Extra Length          0009 (9)\n+5F6113 Comment Length        0000 (0)\n+5F6115 Disk Start            0000 (0)\n+5F6117 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6119 Ext File Attributes   00000000 (0)\n+5F611D Local Header Offset   00054947 (346439)\n+5F6121 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6121: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6187 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6189   Length              0005 (5)\n+5F618B   Flags               01 (1) 'Modification'\n+5F618C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6190 CENTRAL HEADER #190   02014B50 (33639248)\n+5F6194 Created Zip Spec      14 (20) '2.0'\n+5F6195 Created OS            00 (0) 'MS-DOS'\n+5F6196 Extract Zip Spec      14 (20) '2.0'\n+5F6197 Extract OS            00 (0) 'MS-DOS'\n+5F6198 General Purpose Flag  0000 (0)\n+5F619A Compression Method    0000 (0) 'Stored'\n+5F619C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F61A0 CRC                   00000000 (0)\n+5F61A4 Compressed Size       00000000 (0)\n+5F61A8 Uncompressed Size     00000000 (0)\n+5F61AC Filename Length       0026 (38)\n+5F61AE Extra Length          0009 (9)\n+5F61B0 Comment Length        0000 (0)\n+5F61B2 Disk Start            0000 (0)\n+5F61B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F61B6 Ext File Attributes   00000000 (0)\n+5F61BA Local Header Offset   00055919 (350489)\n+5F61BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F61BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F61E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F61E6   Length              0005 (5)\n+5F61E8   Flags               01 (1) 'Modification'\n+5F61E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F61ED CENTRAL HEADER #191   02014B50 (33639248)\n+5F61F1 Created Zip Spec      14 (20) '2.0'\n+5F61F2 Created OS            00 (0) 'MS-DOS'\n+5F61F3 Extract Zip Spec      14 (20) '2.0'\n+5F61F4 Extract OS            00 (0) 'MS-DOS'\n+5F61F5 General Purpose Flag  0000 (0)\n+5F61F7 Compression Method    0000 (0) 'Stored'\n+5F61F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F61FD CRC                   00000000 (0)\n+5F6201 Compressed Size       00000000 (0)\n+5F6205 Uncompressed Size     00000000 (0)\n+5F6209 Filename Length       002D (45)\n+5F620B Extra Length          0009 (9)\n+5F620D Comment Length        0000 (0)\n+5F620F Disk Start            0000 (0)\n+5F6211 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6213 Ext File Attributes   00000000 (0)\n+5F6217 Local Header Offset   00055966 (350566)\n+5F621B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F621B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6248 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F624A   Length              0005 (5)\n+5F624C   Flags               01 (1) 'Modification'\n+5F624D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6251 CENTRAL HEADER #192   02014B50 (33639248)\n+5F6255 Created Zip Spec      14 (20) '2.0'\n+5F6256 Created OS            00 (0) 'MS-DOS'\n+5F6257 Extract Zip Spec      14 (20) '2.0'\n+5F6258 Extract OS            00 (0) 'MS-DOS'\n+5F6259 General Purpose Flag  0000 (0)\n+5F625B Compression Method    0000 (0) 'Stored'\n+5F625D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6261 CRC                   00000000 (0)\n+5F6265 Compressed Size       00000000 (0)\n+5F6269 Uncompressed Size     00000000 (0)\n+5F626D Filename Length       005B (91)\n+5F626F Extra Length          0009 (9)\n+5F6271 Comment Length        0000 (0)\n+5F6273 Disk Start            0000 (0)\n+5F6275 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6277 Ext File Attributes   00000000 (0)\n+5F627B Local Header Offset   000559BA (350650)\n+5F627F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F627F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F62DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F62DC   Length              0005 (5)\n+5F62DE   Flags               01 (1) 'Modification'\n+5F62DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F62E3 CENTRAL HEADER #193   02014B50 (33639248)\n+5F62E7 Created Zip Spec      14 (20) '2.0'\n+5F62E8 Created OS            00 (0) 'MS-DOS'\n+5F62E9 Extract Zip Spec      14 (20) '2.0'\n+5F62EA Extract OS            00 (0) 'MS-DOS'\n+5F62EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F62ED Compression Method    0000 (0) 'Stored'\n+5F62EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F62F3 CRC                   4C048087 (1275363463)\n+5F62F7 Compressed Size       00000861 (2145)\n+5F62FB Uncompressed Size     00000861 (2145)\n+5F62FF Filename Length       0071 (113)\n+5F6301 Extra Length          0009 (9)\n+5F6303 Comment Length        0000 (0)\n+5F6305 Disk Start            0000 (0)\n+5F6307 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6309 Ext File Attributes   00000000 (0)\n+5F630D Local Header Offset   00055A3C (350780)\n+5F6311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6382 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6384   Length              0005 (5)\n+5F6386   Flags               01 (1) 'Modification'\n+5F6387   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F638B CENTRAL HEADER #194   02014B50 (33639248)\n+5F638F Created Zip Spec      14 (20) '2.0'\n+5F6390 Created OS            00 (0) 'MS-DOS'\n+5F6391 Extract Zip Spec      14 (20) '2.0'\n+5F6392 Extract OS            00 (0) 'MS-DOS'\n+5F6393 General Purpose Flag  0000 (0)\n+5F6395 Compression Method    0000 (0) 'Stored'\n+5F6397 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F639B CRC                   00000000 (0)\n+5F639F Compressed Size       00000000 (0)\n+5F63A3 Uncompressed Size     00000000 (0)\n+5F63A7 Filename Length       002D (45)\n+5F63A9 Extra Length          0009 (9)\n+5F63AB Comment Length        0000 (0)\n+5F63AD Disk Start            0000 (0)\n+5F63AF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F63B1 Ext File Attributes   00000000 (0)\n+5F63B5 Local Header Offset   00056345 (353093)\n+5F63B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F63B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F63E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F63E8   Length              0005 (5)\n+5F63EA   Flags               01 (1) 'Modification'\n+5F63EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F63EF CENTRAL HEADER #195   02014B50 (33639248)\n+5F63F3 Created Zip Spec      14 (20) '2.0'\n+5F63F4 Created OS            00 (0) 'MS-DOS'\n+5F63F5 Extract Zip Spec      14 (20) '2.0'\n+5F63F6 Extract OS            00 (0) 'MS-DOS'\n+5F63F7 General Purpose Flag  0000 (0)\n+5F63F9 Compression Method    0000 (0) 'Stored'\n+5F63FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F63FF CRC                   00000000 (0)\n+5F6403 Compressed Size       00000000 (0)\n+5F6407 Uncompressed Size     00000000 (0)\n+5F640B Filename Length       0034 (52)\n+5F640D Extra Length          0009 (9)\n+5F640F Comment Length        0000 (0)\n+5F6411 Disk Start            0000 (0)\n+5F6413 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6415 Ext File Attributes   00000000 (0)\n+5F6419 Local Header Offset   00056399 (353177)\n+5F641D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F641D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6451 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6453   Length              0005 (5)\n+5F6455   Flags               01 (1) 'Modification'\n+5F6456   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F645A CENTRAL HEADER #196   02014B50 (33639248)\n+5F645E Created Zip Spec      14 (20) '2.0'\n+5F645F Created OS            00 (0) 'MS-DOS'\n+5F6460 Extract Zip Spec      14 (20) '2.0'\n+5F6461 Extract OS            00 (0) 'MS-DOS'\n+5F6462 General Purpose Flag  0000 (0)\n+5F6464 Compression Method    0000 (0) 'Stored'\n+5F6466 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F646A CRC                   00000000 (0)\n+5F646E Compressed Size       00000000 (0)\n+5F6472 Uncompressed Size     00000000 (0)\n+5F6476 Filename Length       0068 (104)\n+5F6478 Extra Length          0009 (9)\n+5F647A Comment Length        0000 (0)\n+5F647C Disk Start            0000 (0)\n+5F647E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6480 Ext File Attributes   00000000 (0)\n+5F6484 Local Header Offset   000563F4 (353268)\n+5F6488 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6488: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F64F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F64F2   Length              0005 (5)\n+5F64F4   Flags               01 (1) 'Modification'\n+5F64F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F64F9 CENTRAL HEADER #197   02014B50 (33639248)\n+5F64FD Created Zip Spec      14 (20) '2.0'\n+5F64FE Created OS            00 (0) 'MS-DOS'\n+5F64FF Extract Zip Spec      14 (20) '2.0'\n+5F6500 Extract OS            00 (0) 'MS-DOS'\n+5F6501 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F6503 Compression Method    0000 (0) 'Stored'\n+5F6505 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6509 CRC                   877B2EE8 (2272997096)\n+5F650D Compressed Size       0000215E (8542)\n+5F6511 Uncompressed Size     0000215E (8542)\n+5F6515 Filename Length       007E (126)\n+5F6517 Extra Length          0009 (9)\n+5F6519 Comment Length        0000 (0)\n+5F651B Disk Start            0000 (0)\n+5F651D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F651F Ext File Attributes   00000000 (0)\n+5F6523 Local Header Offset   00056483 (353411)\n+5F6527 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6527: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F65A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F65A7   Length              0005 (5)\n+5F65A9   Flags               01 (1) 'Modification'\n+5F65AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F65AE CENTRAL HEADER #198   02014B50 (33639248)\n+5F65B2 Created Zip Spec      14 (20) '2.0'\n+5F65B3 Created OS            00 (0) 'MS-DOS'\n+5F65B4 Extract Zip Spec      14 (20) '2.0'\n+5F65B5 Extract OS            00 (0) 'MS-DOS'\n+5F65B6 General Purpose Flag  0000 (0)\n+5F65B8 Compression Method    0000 (0) 'Stored'\n+5F65BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F65BE CRC                   00000000 (0)\n+5F65C2 Compressed Size       00000000 (0)\n+5F65C6 Uncompressed Size     00000000 (0)\n+5F65CA Filename Length       006C (108)\n+5F65CC Extra Length          0009 (9)\n+5F65CE Comment Length        0000 (0)\n+5F65D0 Disk Start            0000 (0)\n+5F65D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F65D4 Ext File Attributes   00000000 (0)\n+5F65D8 Local Header Offset   00058696 (362134)\n+5F65DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F65DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6648 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F664A   Length              0005 (5)\n+5F664C   Flags               01 (1) 'Modification'\n+5F664D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6651 CENTRAL HEADER #199   02014B50 (33639248)\n+5F6655 Created Zip Spec      14 (20) '2.0'\n+5F6656 Created OS            00 (0) 'MS-DOS'\n+5F6657 Extract Zip Spec      14 (20) '2.0'\n+5F6658 Extract OS            00 (0) 'MS-DOS'\n+5F6659 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F665B Compression Method    0000 (0) 'Stored'\n+5F665D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6661 CRC                   E43D22D5 (3829211861)\n+5F6665 Compressed Size       0000147F (5247)\n+5F6669 Uncompressed Size     0000147F (5247)\n+5F666D Filename Length       0082 (130)\n+5F666F Extra Length          0009 (9)\n+5F6671 Comment Length        0000 (0)\n+5F6673 Disk Start            0000 (0)\n+5F6675 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6677 Ext File Attributes   00000000 (0)\n+5F667B Local Header Offset   00058729 (362281)\n+5F667F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F667F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5F6701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5F6703   Length              0005 (5)\n 5F6705   Flags               01 (1) 'Modification'\n 5F6706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5F670A CENTRAL HEADER #286   02014B50 (33639248)\n+5F670A CENTRAL HEADER #200   02014B50 (33639248)\n 5F670E Created Zip Spec      14 (20) '2.0'\n 5F670F Created OS            00 (0) 'MS-DOS'\n 5F6710 Extract Zip Spec      14 (20) '2.0'\n 5F6711 Extract OS            00 (0) 'MS-DOS'\n 5F6712 General Purpose Flag  0000 (0)\n 5F6714 Compression Method    0000 (0) 'Stored'\n 5F6716 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n 5F671A CRC                   00000000 (0)\n 5F671E Compressed Size       00000000 (0)\n 5F6722 Uncompressed Size     00000000 (0)\n-5F6726 Filename Length       006B (107)\n+5F6726 Filename Length       005E (94)\n 5F6728 Extra Length          0009 (9)\n 5F672A Comment Length        0000 (0)\n 5F672C Disk Start            0000 (0)\n 5F672E Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5F6730 Ext File Attributes   00000000 (0)\n-5F6734 Local Header Offset   000A55C8 (677320)\n-5F6738 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F6734 Local Header Offset   00059C61 (367713)\n+5F6738 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F6738: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F6738: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F67A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F67A5   Length              0005 (5)\n-5F67A7   Flags               01 (1) 'Modification'\n-5F67A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F67AC CENTRAL HEADER #287   02014B50 (33639248)\n-5F67B0 Created Zip Spec      14 (20) '2.0'\n-5F67B1 Created OS            00 (0) 'MS-DOS'\n-5F67B2 Extract Zip Spec      14 (20) '2.0'\n-5F67B3 Extract OS            00 (0) 'MS-DOS'\n-5F67B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F67B6 Compression Method    0000 (0) 'Stored'\n-5F67B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F67BC CRC                   53DFF1D7 (1407185367)\n-5F67C0 Compressed Size       00000ADF (2783)\n-5F67C4 Uncompressed Size     00000ADF (2783)\n-5F67C8 Filename Length       0081 (129)\n-5F67CA Extra Length          0009 (9)\n-5F67CC Comment Length        0000 (0)\n-5F67CE Disk Start            0000 (0)\n-5F67D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F67D2 Ext File Attributes   00000000 (0)\n-5F67D6 Local Header Offset   000A565A (677466)\n-5F67DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F67DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F685B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F685D   Length              0005 (5)\n-5F685F   Flags               01 (1) 'Modification'\n-5F6860   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6864 CENTRAL HEADER #288   02014B50 (33639248)\n-5F6868 Created Zip Spec      14 (20) '2.0'\n-5F6869 Created OS            00 (0) 'MS-DOS'\n-5F686A Extract Zip Spec      14 (20) '2.0'\n-5F686B Extract OS            00 (0) 'MS-DOS'\n-5F686C General Purpose Flag  0000 (0)\n-5F686E Compression Method    0000 (0) 'Stored'\n-5F6870 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6874 CRC                   00000000 (0)\n-5F6878 Compressed Size       00000000 (0)\n-5F687C Uncompressed Size     00000000 (0)\n-5F6880 Filename Length       0067 (103)\n-5F6882 Extra Length          0009 (9)\n-5F6884 Comment Length        0000 (0)\n-5F6886 Disk Start            0000 (0)\n-5F6888 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F688A Ext File Attributes   00000000 (0)\n-5F688E Local Header Offset   000A61F1 (680433)\n-5F6892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F68F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F68FB   Length              0005 (5)\n-5F68FD   Flags               01 (1) 'Modification'\n-5F68FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6902 CENTRAL HEADER #289   02014B50 (33639248)\n-5F6906 Created Zip Spec      14 (20) '2.0'\n-5F6907 Created OS            00 (0) 'MS-DOS'\n-5F6908 Extract Zip Spec      14 (20) '2.0'\n-5F6909 Extract OS            00 (0) 'MS-DOS'\n-5F690A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F690C Compression Method    0000 (0) 'Stored'\n-5F690E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6912 CRC                   6D3A5445 (1832539205)\n-5F6916 Compressed Size       00000939 (2361)\n-5F691A Uncompressed Size     00000939 (2361)\n-5F691E Filename Length       007D (125)\n-5F6920 Extra Length          0009 (9)\n-5F6922 Comment Length        0000 (0)\n-5F6924 Disk Start            0000 (0)\n-5F6926 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6928 Ext File Attributes   00000000 (0)\n-5F692C Local Header Offset   000A627F (680575)\n-5F6930 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6930: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F69AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F69AF   Length              0005 (5)\n-5F69B1   Flags               01 (1) 'Modification'\n-5F69B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F69B6 CENTRAL HEADER #290   02014B50 (33639248)\n-5F69BA Created Zip Spec      14 (20) '2.0'\n-5F69BB Created OS            00 (0) 'MS-DOS'\n-5F69BC Extract Zip Spec      14 (20) '2.0'\n-5F69BD Extract OS            00 (0) 'MS-DOS'\n-5F69BE General Purpose Flag  0000 (0)\n-5F69C0 Compression Method    0000 (0) 'Stored'\n-5F69C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F69C6 CRC                   00000000 (0)\n-5F69CA Compressed Size       00000000 (0)\n-5F69CE Uncompressed Size     00000000 (0)\n-5F69D2 Filename Length       0076 (118)\n-5F69D4 Extra Length          0009 (9)\n-5F69D6 Comment Length        0000 (0)\n-5F69D8 Disk Start            0000 (0)\n-5F69DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F69DC Ext File Attributes   00000000 (0)\n-5F69E0 Local Header Offset   000A6C6C (683116)\n-5F69E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F69E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6A5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6A5C   Length              0005 (5)\n-5F6A5E   Flags               01 (1) 'Modification'\n-5F6A5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6A63 CENTRAL HEADER #291   02014B50 (33639248)\n-5F6A67 Created Zip Spec      14 (20) '2.0'\n-5F6A68 Created OS            00 (0) 'MS-DOS'\n-5F6A69 Extract Zip Spec      14 (20) '2.0'\n-5F6A6A Extract OS            00 (0) 'MS-DOS'\n-5F6A6B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6A6D Compression Method    0000 (0) 'Stored'\n-5F6A6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6A73 CRC                   5C6B1924 (1550522660)\n-5F6A77 Compressed Size       00000DDD (3549)\n-5F6A7B Uncompressed Size     00000DDD (3549)\n-5F6A7F Filename Length       008C (140)\n-5F6A81 Extra Length          0009 (9)\n-5F6A83 Comment Length        0000 (0)\n-5F6A85 Disk Start            0000 (0)\n-5F6A87 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6A89 Ext File Attributes   00000000 (0)\n-5F6A8D Local Header Offset   000A6D09 (683273)\n-5F6A91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXX'\n+5F6796 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6798   Length              0005 (5)\n+5F679A   Flags               01 (1) 'Modification'\n+5F679B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F679F CENTRAL HEADER #201   02014B50 (33639248)\n+5F67A3 Created Zip Spec      14 (20) '2.0'\n+5F67A4 Created OS            00 (0) 'MS-DOS'\n+5F67A5 Extract Zip Spec      14 (20) '2.0'\n+5F67A6 Extract OS            00 (0) 'MS-DOS'\n+5F67A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F67A9 Compression Method    0000 (0) 'Stored'\n+5F67AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F67AF CRC                   D765846F (3613754479)\n+5F67B3 Compressed Size       00001060 (4192)\n+5F67B7 Uncompressed Size     00001060 (4192)\n+5F67BB Filename Length       0074 (116)\n+5F67BD Extra Length          0009 (9)\n+5F67BF Comment Length        0000 (0)\n+5F67C1 Disk Start            0000 (0)\n+5F67C3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F67C5 Ext File Attributes   00000000 (0)\n+5F67C9 Local Header Offset   00059CE6 (367846)\n+5F67CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F67CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6841 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6843   Length              0005 (5)\n+5F6845   Flags               01 (1) 'Modification'\n+5F6846   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F684A CENTRAL HEADER #202   02014B50 (33639248)\n+5F684E Created Zip Spec      14 (20) '2.0'\n+5F684F Created OS            00 (0) 'MS-DOS'\n+5F6850 Extract Zip Spec      14 (20) '2.0'\n+5F6851 Extract OS            00 (0) 'MS-DOS'\n+5F6852 General Purpose Flag  0000 (0)\n+5F6854 Compression Method    0000 (0) 'Stored'\n+5F6856 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F685A CRC                   00000000 (0)\n+5F685E Compressed Size       00000000 (0)\n+5F6862 Uncompressed Size     00000000 (0)\n+5F6866 Filename Length       005E (94)\n+5F6868 Extra Length          0009 (9)\n+5F686A Comment Length        0000 (0)\n+5F686C Disk Start            0000 (0)\n+5F686E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6870 Ext File Attributes   00000000 (0)\n+5F6874 Local Header Offset   0005ADF1 (372209)\n+5F6878 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6878: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F68D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F68D8   Length              0005 (5)\n+5F68DA   Flags               01 (1) 'Modification'\n+5F68DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F68DF CENTRAL HEADER #203   02014B50 (33639248)\n+5F68E3 Created Zip Spec      14 (20) '2.0'\n+5F68E4 Created OS            00 (0) 'MS-DOS'\n+5F68E5 Extract Zip Spec      14 (20) '2.0'\n+5F68E6 Extract OS            00 (0) 'MS-DOS'\n+5F68E7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F68E9 Compression Method    0000 (0) 'Stored'\n+5F68EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F68EF CRC                   57E394F3 (1474532595)\n+5F68F3 Compressed Size       0000115C (4444)\n+5F68F7 Uncompressed Size     0000115C (4444)\n+5F68FB Filename Length       0074 (116)\n+5F68FD Extra Length          0009 (9)\n+5F68FF Comment Length        0000 (0)\n+5F6901 Disk Start            0000 (0)\n+5F6903 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6905 Ext File Attributes   00000000 (0)\n+5F6909 Local Header Offset   0005AE76 (372342)\n+5F690D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F690D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6981 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6983   Length              0005 (5)\n+5F6985   Flags               01 (1) 'Modification'\n+5F6986   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F698A CENTRAL HEADER #204   02014B50 (33639248)\n+5F698E Created Zip Spec      14 (20) '2.0'\n+5F698F Created OS            00 (0) 'MS-DOS'\n+5F6990 Extract Zip Spec      14 (20) '2.0'\n+5F6991 Extract OS            00 (0) 'MS-DOS'\n+5F6992 General Purpose Flag  0000 (0)\n+5F6994 Compression Method    0000 (0) 'Stored'\n+5F6996 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F699A CRC                   00000000 (0)\n+5F699E Compressed Size       00000000 (0)\n+5F69A2 Uncompressed Size     00000000 (0)\n+5F69A6 Filename Length       0028 (40)\n+5F69A8 Extra Length          0009 (9)\n+5F69AA Comment Length        0000 (0)\n+5F69AC Disk Start            0000 (0)\n+5F69AE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F69B0 Ext File Attributes   00000000 (0)\n+5F69B4 Local Header Offset   0005C07D (376957)\n+5F69B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F69B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F69E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F69E2   Length              0005 (5)\n+5F69E4   Flags               01 (1) 'Modification'\n+5F69E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F69E9 CENTRAL HEADER #205   02014B50 (33639248)\n+5F69ED Created Zip Spec      14 (20) '2.0'\n+5F69EE Created OS            00 (0) 'MS-DOS'\n+5F69EF Extract Zip Spec      14 (20) '2.0'\n+5F69F0 Extract OS            00 (0) 'MS-DOS'\n+5F69F1 General Purpose Flag  0000 (0)\n+5F69F3 Compression Method    0000 (0) 'Stored'\n+5F69F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F69F9 CRC                   00000000 (0)\n+5F69FD Compressed Size       00000000 (0)\n+5F6A01 Uncompressed Size     00000000 (0)\n+5F6A05 Filename Length       002F (47)\n+5F6A07 Extra Length          0009 (9)\n+5F6A09 Comment Length        0000 (0)\n+5F6A0B Disk Start            0000 (0)\n+5F6A0D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6A0F Ext File Attributes   00000000 (0)\n+5F6A13 Local Header Offset   0005C0CC (377036)\n+5F6A17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6A17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6A46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6A48   Length              0005 (5)\n+5F6A4A   Flags               01 (1) 'Modification'\n+5F6A4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6A4F CENTRAL HEADER #206   02014B50 (33639248)\n+5F6A53 Created Zip Spec      14 (20) '2.0'\n+5F6A54 Created OS            00 (0) 'MS-DOS'\n+5F6A55 Extract Zip Spec      14 (20) '2.0'\n+5F6A56 Extract OS            00 (0) 'MS-DOS'\n+5F6A57 General Purpose Flag  0000 (0)\n+5F6A59 Compression Method    0000 (0) 'Stored'\n+5F6A5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6A5F CRC                   00000000 (0)\n+5F6A63 Compressed Size       00000000 (0)\n+5F6A67 Uncompressed Size     00000000 (0)\n+5F6A6B Filename Length       006E (110)\n+5F6A6D Extra Length          0009 (9)\n+5F6A6F Comment Length        0000 (0)\n+5F6A71 Disk Start            0000 (0)\n+5F6A73 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6A75 Ext File Attributes   00000000 (0)\n+5F6A79 Local Header Offset   0005C122 (377122)\n+5F6A7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6A7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6AEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6AED   Length              0005 (5)\n+5F6AEF   Flags               01 (1) 'Modification'\n+5F6AF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6AF4 CENTRAL HEADER #207   02014B50 (33639248)\n+5F6AF8 Created Zip Spec      14 (20) '2.0'\n+5F6AF9 Created OS            00 (0) 'MS-DOS'\n+5F6AFA Extract Zip Spec      14 (20) '2.0'\n+5F6AFB Extract OS            00 (0) 'MS-DOS'\n+5F6AFC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F6AFE Compression Method    0000 (0) 'Stored'\n+5F6B00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6B04 CRC                   4293EC30 (1116990512)\n+5F6B08 Compressed Size       00001A2C (6700)\n+5F6B0C Uncompressed Size     00001A2C (6700)\n+5F6B10 Filename Length       0084 (132)\n+5F6B12 Extra Length          0009 (9)\n+5F6B14 Comment Length        0000 (0)\n+5F6B16 Disk Start            0000 (0)\n+5F6B18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6B1A Ext File Attributes   00000000 (0)\n+5F6B1E Local Header Offset   0005C1B7 (377271)\n+5F6B22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x5F6A91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F6B22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F6B1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6B1F   Length              0005 (5)\n-5F6B21   Flags               01 (1) 'Modification'\n-5F6B22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6B26 CENTRAL HEADER #292   02014B50 (33639248)\n-5F6B2A Created Zip Spec      14 (20) '2.0'\n-5F6B2B Created OS            00 (0) 'MS-DOS'\n-5F6B2C Extract Zip Spec      14 (20) '2.0'\n-5F6B2D Extract OS            00 (0) 'MS-DOS'\n-5F6B2E General Purpose Flag  0000 (0)\n-5F6B30 Compression Method    0000 (0) 'Stored'\n-5F6B32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6B36 CRC                   00000000 (0)\n-5F6B3A Compressed Size       00000000 (0)\n-5F6B3E Uncompressed Size     00000000 (0)\n-5F6B42 Filename Length       0061 (97)\n-5F6B44 Extra Length          0009 (9)\n-5F6B46 Comment Length        0000 (0)\n-5F6B48 Disk Start            0000 (0)\n-5F6B4A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6B4C Ext File Attributes   00000000 (0)\n-5F6B50 Local Header Offset   000A7BA9 (687017)\n-5F6B54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6B54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6BB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6BB7   Length              0005 (5)\n-5F6BB9   Flags               01 (1) 'Modification'\n-5F6BBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6BBE CENTRAL HEADER #293   02014B50 (33639248)\n-5F6BC2 Created Zip Spec      14 (20) '2.0'\n-5F6BC3 Created OS            00 (0) 'MS-DOS'\n-5F6BC4 Extract Zip Spec      14 (20) '2.0'\n-5F6BC5 Extract OS            00 (0) 'MS-DOS'\n-5F6BC6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6BC8 Compression Method    0000 (0) 'Stored'\n-5F6BCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6BCE CRC                   C7DF88BB (3353315515)\n-5F6BD2 Compressed Size       00009335 (37685)\n-5F6BD6 Uncompressed Size     00009335 (37685)\n-5F6BDA Filename Length       0077 (119)\n-5F6BDC Extra Length          0009 (9)\n-5F6BDE Comment Length        0000 (0)\n-5F6BE0 Disk Start            0000 (0)\n-5F6BE2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6BE4 Ext File Attributes   00000000 (0)\n-5F6BE8 Local Header Offset   000A7C31 (687153)\n-5F6BEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6BEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6C63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6C65   Length              0005 (5)\n-5F6C67   Flags               01 (1) 'Modification'\n-5F6C68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6C6C CENTRAL HEADER #294   02014B50 (33639248)\n-5F6C70 Created Zip Spec      14 (20) '2.0'\n-5F6C71 Created OS            00 (0) 'MS-DOS'\n-5F6C72 Extract Zip Spec      14 (20) '2.0'\n-5F6C73 Extract OS            00 (0) 'MS-DOS'\n-5F6C74 General Purpose Flag  0000 (0)\n-5F6C76 Compression Method    0000 (0) 'Stored'\n-5F6C78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6C7C CRC                   00000000 (0)\n-5F6C80 Compressed Size       00000000 (0)\n-5F6C84 Uncompressed Size     00000000 (0)\n-5F6C88 Filename Length       006A (106)\n-5F6C8A Extra Length          0009 (9)\n-5F6C8C Comment Length        0000 (0)\n-5F6C8E Disk Start            0000 (0)\n-5F6C90 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6C92 Ext File Attributes   00000000 (0)\n-5F6C96 Local Header Offset   000B1014 (725012)\n-5F6C9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6C9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6D04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6D06   Length              0005 (5)\n-5F6D08   Flags               01 (1) 'Modification'\n-5F6D09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6D0D CENTRAL HEADER #295   02014B50 (33639248)\n-5F6D11 Created Zip Spec      14 (20) '2.0'\n-5F6D12 Created OS            00 (0) 'MS-DOS'\n-5F6D13 Extract Zip Spec      14 (20) '2.0'\n-5F6D14 Extract OS            00 (0) 'MS-DOS'\n-5F6D15 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6D17 Compression Method    0000 (0) 'Stored'\n-5F6D19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6D1D CRC                   217BBE0B (561757707)\n-5F6D21 Compressed Size       00001BB1 (7089)\n-5F6D25 Uncompressed Size     00001BB1 (7089)\n-5F6D29 Filename Length       0080 (128)\n-5F6D2B Extra Length          0009 (9)\n-5F6D2D Comment Length        0000 (0)\n-5F6D2F Disk Start            0000 (0)\n-5F6D31 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6D33 Ext File Attributes   00000000 (0)\n-5F6D37 Local Header Offset   000B10A5 (725157)\n-5F6D3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6D3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6DBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6DBD   Length              0005 (5)\n-5F6DBF   Flags               01 (1) 'Modification'\n-5F6DC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6DC4 CENTRAL HEADER #296   02014B50 (33639248)\n-5F6DC8 Created Zip Spec      14 (20) '2.0'\n-5F6DC9 Created OS            00 (0) 'MS-DOS'\n-5F6DCA Extract Zip Spec      14 (20) '2.0'\n-5F6DCB Extract OS            00 (0) 'MS-DOS'\n-5F6DCC General Purpose Flag  0000 (0)\n-5F6DCE Compression Method    0000 (0) 'Stored'\n-5F6DD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6DD4 CRC                   00000000 (0)\n-5F6DD8 Compressed Size       00000000 (0)\n-5F6DDC Uncompressed Size     00000000 (0)\n-5F6DE0 Filename Length       0029 (41)\n-5F6DE2 Extra Length          0009 (9)\n-5F6DE4 Comment Length        0000 (0)\n-5F6DE6 Disk Start            0000 (0)\n-5F6DE8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6DEA Ext File Attributes   00000000 (0)\n-5F6DEE Local Header Offset   000B2D0D (732429)\n-5F6DF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6DF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6E1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6E1D   Length              0005 (5)\n-5F6E1F   Flags               01 (1) 'Modification'\n-5F6E20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6E24 CENTRAL HEADER #297   02014B50 (33639248)\n-5F6E28 Created Zip Spec      14 (20) '2.0'\n-5F6E29 Created OS            00 (0) 'MS-DOS'\n-5F6E2A Extract Zip Spec      14 (20) '2.0'\n-5F6E2B Extract OS            00 (0) 'MS-DOS'\n-5F6E2C General Purpose Flag  0000 (0)\n-5F6E2E Compression Method    0000 (0) 'Stored'\n-5F6E30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6E34 CRC                   00000000 (0)\n-5F6E38 Compressed Size       00000000 (0)\n-5F6E3C Uncompressed Size     00000000 (0)\n-5F6E40 Filename Length       0030 (48)\n-5F6E42 Extra Length          0009 (9)\n-5F6E44 Comment Length        0000 (0)\n-5F6E46 Disk Start            0000 (0)\n-5F6E48 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6E4A Ext File Attributes   00000000 (0)\n-5F6E4E Local Header Offset   000B2D5D (732509)\n-5F6E52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6E52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6E82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6E84   Length              0005 (5)\n-5F6E86   Flags               01 (1) 'Modification'\n-5F6E87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6E8B CENTRAL HEADER #298   02014B50 (33639248)\n-5F6E8F Created Zip Spec      14 (20) '2.0'\n-5F6E90 Created OS            00 (0) 'MS-DOS'\n-5F6E91 Extract Zip Spec      14 (20) '2.0'\n-5F6E92 Extract OS            00 (0) 'MS-DOS'\n-5F6E93 General Purpose Flag  0000 (0)\n-5F6E95 Compression Method    0000 (0) 'Stored'\n-5F6E97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6E9B CRC                   00000000 (0)\n-5F6E9F Compressed Size       00000000 (0)\n-5F6EA3 Uncompressed Size     00000000 (0)\n-5F6EA7 Filename Length       006A (106)\n-5F6EA9 Extra Length          0009 (9)\n-5F6EAB Comment Length        0000 (0)\n-5F6EAD Disk Start            0000 (0)\n-5F6EAF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6EB1 Ext File Attributes   00000000 (0)\n-5F6EB5 Local Header Offset   000B2DB4 (732596)\n-5F6EB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6EB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6F23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6F25   Length              0005 (5)\n-5F6F27   Flags               01 (1) 'Modification'\n-5F6F28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6F2C CENTRAL HEADER #299   02014B50 (33639248)\n-5F6F30 Created Zip Spec      14 (20) '2.0'\n-5F6F31 Created OS            00 (0) 'MS-DOS'\n-5F6F32 Extract Zip Spec      14 (20) '2.0'\n-5F6F33 Extract OS            00 (0) 'MS-DOS'\n-5F6F34 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F6F36 Compression Method    0000 (0) 'Stored'\n-5F6F38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6F3C CRC                   DCEFA272 (3706692210)\n-5F6F40 Compressed Size       000009D3 (2515)\n-5F6F44 Uncompressed Size     000009D3 (2515)\n-5F6F48 Filename Length       0080 (128)\n-5F6F4A Extra Length          0009 (9)\n-5F6F4C Comment Length        0000 (0)\n-5F6F4E Disk Start            0000 (0)\n-5F6F50 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F6F52 Ext File Attributes   00000000 (0)\n-5F6F56 Local Header Offset   000B2E45 (732741)\n-5F6F5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F6F5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F6FDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F6FDC   Length              0005 (5)\n-5F6FDE   Flags               01 (1) 'Modification'\n-5F6FDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F6FE3 CENTRAL HEADER #300   02014B50 (33639248)\n-5F6FE7 Created Zip Spec      14 (20) '2.0'\n-5F6FE8 Created OS            00 (0) 'MS-DOS'\n-5F6FE9 Extract Zip Spec      14 (20) '2.0'\n-5F6FEA Extract OS            00 (0) 'MS-DOS'\n-5F6FEB General Purpose Flag  0000 (0)\n-5F6FED Compression Method    0000 (0) 'Stored'\n-5F6FEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F6FF3 CRC                   00000000 (0)\n-5F6FF7 Compressed Size       00000000 (0)\n-5F6FFB Uncompressed Size     00000000 (0)\n-5F6FFF Filename Length       006C (108)\n-5F7001 Extra Length          0009 (9)\n-5F7003 Comment Length        0000 (0)\n-5F7005 Disk Start            0000 (0)\n-5F7007 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7009 Ext File Attributes   00000000 (0)\n-5F700D Local Header Offset   000B38CF (735439)\n-5F7011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F707D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F707F   Length              0005 (5)\n-5F7081   Flags               01 (1) 'Modification'\n-5F7082   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7086 CENTRAL HEADER #301   02014B50 (33639248)\n-5F708A Created Zip Spec      14 (20) '2.0'\n-5F708B Created OS            00 (0) 'MS-DOS'\n-5F708C Extract Zip Spec      14 (20) '2.0'\n-5F708D Extract OS            00 (0) 'MS-DOS'\n-5F708E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7090 Compression Method    0000 (0) 'Stored'\n-5F7092 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7096 CRC                   26E963FE (652829694)\n-5F709A Compressed Size       00001276 (4726)\n-5F709E Uncompressed Size     00001276 (4726)\n-5F70A2 Filename Length       0082 (130)\n-5F70A4 Extra Length          0009 (9)\n-5F70A6 Comment Length        0000 (0)\n-5F70A8 Disk Start            0000 (0)\n-5F70AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F70AC Ext File Attributes   00000000 (0)\n-5F70B0 Local Header Offset   000B3962 (735586)\n-5F70B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F70B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7136 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7138   Length              0005 (5)\n-5F713A   Flags               01 (1) 'Modification'\n-5F713B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F713F CENTRAL HEADER #302   02014B50 (33639248)\n-5F7143 Created Zip Spec      14 (20) '2.0'\n-5F7144 Created OS            00 (0) 'MS-DOS'\n-5F7145 Extract Zip Spec      14 (20) '2.0'\n-5F7146 Extract OS            00 (0) 'MS-DOS'\n-5F7147 General Purpose Flag  0000 (0)\n-5F7149 Compression Method    0000 (0) 'Stored'\n-5F714B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F714F CRC                   00000000 (0)\n-5F7153 Compressed Size       00000000 (0)\n-5F7157 Uncompressed Size     00000000 (0)\n-5F715B Filename Length       0028 (40)\n-5F715D Extra Length          0009 (9)\n-5F715F Comment Length        0000 (0)\n-5F7161 Disk Start            0000 (0)\n-5F7163 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7165 Ext File Attributes   00000000 (0)\n-5F7169 Local Header Offset   000B4C91 (740497)\n-5F716D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F716D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7195 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7197   Length              0005 (5)\n-5F7199   Flags               01 (1) 'Modification'\n-5F719A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F719E CENTRAL HEADER #303   02014B50 (33639248)\n-5F71A2 Created Zip Spec      14 (20) '2.0'\n-5F71A3 Created OS            00 (0) 'MS-DOS'\n-5F71A4 Extract Zip Spec      14 (20) '2.0'\n-5F71A5 Extract OS            00 (0) 'MS-DOS'\n-5F71A6 General Purpose Flag  0000 (0)\n-5F71A8 Compression Method    0000 (0) 'Stored'\n-5F71AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F71AE CRC                   00000000 (0)\n-5F71B2 Compressed Size       00000000 (0)\n-5F71B6 Uncompressed Size     00000000 (0)\n-5F71BA Filename Length       002F (47)\n-5F71BC Extra Length          0009 (9)\n-5F71BE Comment Length        0000 (0)\n-5F71C0 Disk Start            0000 (0)\n-5F71C2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F71C4 Ext File Attributes   00000000 (0)\n-5F71C8 Local Header Offset   000B4CE0 (740576)\n-5F71CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F71CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F71FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F71FD   Length              0005 (5)\n-5F71FF   Flags               01 (1) 'Modification'\n-5F7200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7204 CENTRAL HEADER #304   02014B50 (33639248)\n-5F7208 Created Zip Spec      14 (20) '2.0'\n-5F7209 Created OS            00 (0) 'MS-DOS'\n-5F720A Extract Zip Spec      14 (20) '2.0'\n-5F720B Extract OS            00 (0) 'MS-DOS'\n-5F720C General Purpose Flag  0000 (0)\n-5F720E Compression Method    0000 (0) 'Stored'\n-5F7210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7214 CRC                   00000000 (0)\n-5F7218 Compressed Size       00000000 (0)\n-5F721C Uncompressed Size     00000000 (0)\n-5F7220 Filename Length       005F (95)\n-5F7222 Extra Length          0009 (9)\n-5F7224 Comment Length        0000 (0)\n-5F7226 Disk Start            0000 (0)\n-5F7228 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F722A Ext File Attributes   00000000 (0)\n-5F722E Local Header Offset   000B4D36 (740662)\n-5F7232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7291 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7293   Length              0005 (5)\n-5F7295   Flags               01 (1) 'Modification'\n-5F7296   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F729A CENTRAL HEADER #305   02014B50 (33639248)\n-5F729E Created Zip Spec      14 (20) '2.0'\n-5F729F Created OS            00 (0) 'MS-DOS'\n-5F72A0 Extract Zip Spec      14 (20) '2.0'\n-5F72A1 Extract OS            00 (0) 'MS-DOS'\n-5F72A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F72A4 Compression Method    0000 (0) 'Stored'\n-5F72A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F72AA CRC                   6B96B8CE (1805039822)\n-5F72AE Compressed Size       00008944 (35140)\n-5F72B2 Uncompressed Size     00008944 (35140)\n-5F72B6 Filename Length       0075 (117)\n-5F72B8 Extra Length          0009 (9)\n-5F72BA Comment Length        0000 (0)\n-5F72BC Disk Start            0000 (0)\n-5F72BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F72C0 Ext File Attributes   00000000 (0)\n-5F72C4 Local Header Offset   000B4DBC (740796)\n-5F72C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F72C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F733D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F733F   Length              0005 (5)\n-5F7341   Flags               01 (1) 'Modification'\n-5F7342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7346 CENTRAL HEADER #306   02014B50 (33639248)\n-5F734A Created Zip Spec      14 (20) '2.0'\n-5F734B Created OS            00 (0) 'MS-DOS'\n-5F734C Extract Zip Spec      14 (20) '2.0'\n-5F734D Extract OS            00 (0) 'MS-DOS'\n-5F734E General Purpose Flag  0000 (0)\n-5F7350 Compression Method    0000 (0) 'Stored'\n-5F7352 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7356 CRC                   00000000 (0)\n-5F735A Compressed Size       00000000 (0)\n-5F735E Uncompressed Size     00000000 (0)\n-5F7362 Filename Length       0066 (102)\n-5F7364 Extra Length          0009 (9)\n-5F7366 Comment Length        0000 (0)\n-5F7368 Disk Start            0000 (0)\n-5F736A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F736C Ext File Attributes   00000000 (0)\n-5F7370 Local Header Offset   000BD7AC (776108)\n-5F7374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F73DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F73DC   Length              0005 (5)\n-5F73DE   Flags               01 (1) 'Modification'\n-5F73DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F73E3 CENTRAL HEADER #307   02014B50 (33639248)\n-5F73E7 Created Zip Spec      14 (20) '2.0'\n-5F73E8 Created OS            00 (0) 'MS-DOS'\n-5F73E9 Extract Zip Spec      14 (20) '2.0'\n-5F73EA Extract OS            00 (0) 'MS-DOS'\n-5F73EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F73ED Compression Method    0000 (0) 'Stored'\n-5F73EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F73F3 CRC                   DB2A8543 (3676996931)\n-5F73F7 Compressed Size       00001C3A (7226)\n-5F73FB Uncompressed Size     00001C3A (7226)\n-5F73FF Filename Length       007C (124)\n-5F7401 Extra Length          0009 (9)\n-5F7403 Comment Length        0000 (0)\n-5F7405 Disk Start            0000 (0)\n-5F7407 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7409 Ext File Attributes   00000000 (0)\n-5F740D Local Header Offset   000BD839 (776249)\n-5F7411 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7411: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F748D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F748F   Length              0005 (5)\n-5F7491   Flags               01 (1) 'Modification'\n-5F7492   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7496 CENTRAL HEADER #308   02014B50 (33639248)\n-5F749A Created Zip Spec      14 (20) '2.0'\n-5F749B Created OS            00 (0) 'MS-DOS'\n-5F749C Extract Zip Spec      14 (20) '2.0'\n-5F749D Extract OS            00 (0) 'MS-DOS'\n-5F749E General Purpose Flag  0000 (0)\n-5F74A0 Compression Method    0000 (0) 'Stored'\n-5F74A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F74A6 CRC                   00000000 (0)\n-5F74AA Compressed Size       00000000 (0)\n-5F74AE Uncompressed Size     00000000 (0)\n-5F74B2 Filename Length       0069 (105)\n-5F74B4 Extra Length          0009 (9)\n-5F74B6 Comment Length        0000 (0)\n-5F74B8 Disk Start            0000 (0)\n-5F74BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F74BC Ext File Attributes   00000000 (0)\n-5F74C0 Local Header Offset   000BF526 (783654)\n-5F74C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F74C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F752D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F752F   Length              0005 (5)\n-5F7531   Flags               01 (1) 'Modification'\n-5F7532   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7536 CENTRAL HEADER #309   02014B50 (33639248)\n-5F753A Created Zip Spec      14 (20) '2.0'\n-5F753B Created OS            00 (0) 'MS-DOS'\n-5F753C Extract Zip Spec      14 (20) '2.0'\n-5F753D Extract OS            00 (0) 'MS-DOS'\n-5F753E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7540 Compression Method    0000 (0) 'Stored'\n-5F7542 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7546 CRC                   FF5BC4DC (4284204252)\n-5F754A Compressed Size       00001552 (5458)\n-5F754E Uncompressed Size     00001552 (5458)\n-5F7552 Filename Length       007F (127)\n-5F7554 Extra Length          0009 (9)\n-5F7556 Comment Length        0000 (0)\n-5F7558 Disk Start            0000 (0)\n-5F755A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F755C Ext File Attributes   00000000 (0)\n-5F7560 Local Header Offset   000BF5B6 (783798)\n-5F7564 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7564: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F75E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F75E5   Length              0005 (5)\n-5F75E7   Flags               01 (1) 'Modification'\n-5F75E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F75EC CENTRAL HEADER #310   02014B50 (33639248)\n-5F75F0 Created Zip Spec      14 (20) '2.0'\n-5F75F1 Created OS            00 (0) 'MS-DOS'\n-5F75F2 Extract Zip Spec      14 (20) '2.0'\n-5F75F3 Extract OS            00 (0) 'MS-DOS'\n-5F75F4 General Purpose Flag  0000 (0)\n-5F75F6 Compression Method    0000 (0) 'Stored'\n-5F75F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F75FC CRC                   00000000 (0)\n-5F7600 Compressed Size       00000000 (0)\n-5F7604 Uncompressed Size     00000000 (0)\n-5F7608 Filename Length       0069 (105)\n-5F760A Extra Length          0009 (9)\n-5F760C Comment Length        0000 (0)\n-5F760E Disk Start            0000 (0)\n-5F7610 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7612 Ext File Attributes   00000000 (0)\n-5F7616 Local Header Offset   000C0BBE (789438)\n-5F761A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F761A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7683 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7685   Length              0005 (5)\n-5F7687   Flags               01 (1) 'Modification'\n-5F7688   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F768C CENTRAL HEADER #311   02014B50 (33639248)\n-5F7690 Created Zip Spec      14 (20) '2.0'\n-5F7691 Created OS            00 (0) 'MS-DOS'\n-5F7692 Extract Zip Spec      14 (20) '2.0'\n-5F7693 Extract OS            00 (0) 'MS-DOS'\n-5F7694 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7696 Compression Method    0000 (0) 'Stored'\n-5F7698 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F769C CRC                   D6140D51 (3591638353)\n-5F76A0 Compressed Size       00003C2C (15404)\n-5F76A4 Uncompressed Size     00003C2C (15404)\n-5F76A8 Filename Length       007F (127)\n-5F76AA Extra Length          0009 (9)\n-5F76AC Comment Length        0000 (0)\n-5F76AE Disk Start            0000 (0)\n-5F76B0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F76B2 Ext File Attributes   00000000 (0)\n-5F76B6 Local Header Offset   000C0C4E (789582)\n-5F76BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F76BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7739 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F773B   Length              0005 (5)\n-5F773D   Flags               01 (1) 'Modification'\n-5F773E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7742 CENTRAL HEADER #312   02014B50 (33639248)\n-5F7746 Created Zip Spec      14 (20) '2.0'\n-5F7747 Created OS            00 (0) 'MS-DOS'\n-5F7748 Extract Zip Spec      14 (20) '2.0'\n-5F7749 Extract OS            00 (0) 'MS-DOS'\n-5F774A General Purpose Flag  0000 (0)\n-5F774C Compression Method    0000 (0) 'Stored'\n-5F774E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7752 CRC                   00000000 (0)\n-5F7756 Compressed Size       00000000 (0)\n-5F775A Uncompressed Size     00000000 (0)\n-5F775E Filename Length       0068 (104)\n-5F7760 Extra Length          0009 (9)\n-5F7762 Comment Length        0000 (0)\n-5F7764 Disk Start            0000 (0)\n-5F7766 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7768 Ext File Attributes   00000000 (0)\n-5F776C Local Header Offset   000C4930 (805168)\n-5F7770 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7770: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F77D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F77DA   Length              0005 (5)\n-5F77DC   Flags               01 (1) 'Modification'\n-5F77DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F77E1 CENTRAL HEADER #313   02014B50 (33639248)\n-5F77E5 Created Zip Spec      14 (20) '2.0'\n-5F77E6 Created OS            00 (0) 'MS-DOS'\n-5F77E7 Extract Zip Spec      14 (20) '2.0'\n-5F77E8 Extract OS            00 (0) 'MS-DOS'\n-5F77E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F77EB Compression Method    0000 (0) 'Stored'\n-5F77ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F77F1 CRC                   86CE2079 (2261655673)\n-5F77F5 Compressed Size       00002162 (8546)\n-5F77F9 Uncompressed Size     00002162 (8546)\n-5F77FD Filename Length       007E (126)\n-5F77FF Extra Length          0009 (9)\n-5F7801 Comment Length        0000 (0)\n-5F7803 Disk Start            0000 (0)\n-5F7805 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7807 Ext File Attributes   00000000 (0)\n-5F780B Local Header Offset   000C49BF (805311)\n-5F780F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F780F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F788D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F788F   Length              0005 (5)\n-5F7891   Flags               01 (1) 'Modification'\n-5F7892   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7896 CENTRAL HEADER #314   02014B50 (33639248)\n-5F789A Created Zip Spec      14 (20) '2.0'\n-5F789B Created OS            00 (0) 'MS-DOS'\n-5F789C Extract Zip Spec      14 (20) '2.0'\n-5F789D Extract OS            00 (0) 'MS-DOS'\n-5F789E General Purpose Flag  0000 (0)\n-5F78A0 Compression Method    0000 (0) 'Stored'\n-5F78A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F78A6 CRC                   00000000 (0)\n-5F78AA Compressed Size       00000000 (0)\n-5F78AE Uncompressed Size     00000000 (0)\n-5F78B2 Filename Length       0026 (38)\n-5F78B4 Extra Length          0009 (9)\n-5F78B6 Comment Length        0000 (0)\n-5F78B8 Disk Start            0000 (0)\n-5F78BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F78BC Ext File Attributes   00000000 (0)\n-5F78C0 Local Header Offset   000C6BD6 (814038)\n-5F78C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F78C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F78EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F78EC   Length              0005 (5)\n-5F78EE   Flags               01 (1) 'Modification'\n-5F78EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F78F3 CENTRAL HEADER #315   02014B50 (33639248)\n-5F78F7 Created Zip Spec      14 (20) '2.0'\n-5F78F8 Created OS            00 (0) 'MS-DOS'\n-5F78F9 Extract Zip Spec      14 (20) '2.0'\n-5F78FA Extract OS            00 (0) 'MS-DOS'\n-5F78FB General Purpose Flag  0000 (0)\n-5F78FD Compression Method    0000 (0) 'Stored'\n-5F78FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7903 CRC                   00000000 (0)\n-5F7907 Compressed Size       00000000 (0)\n-5F790B Uncompressed Size     00000000 (0)\n-5F790F Filename Length       002D (45)\n-5F7911 Extra Length          0009 (9)\n-5F7913 Comment Length        0000 (0)\n-5F7915 Disk Start            0000 (0)\n-5F7917 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7919 Ext File Attributes   00000000 (0)\n-5F791D Local Header Offset   000C6C23 (814115)\n-5F7921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F794E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7950   Length              0005 (5)\n-5F7952   Flags               01 (1) 'Modification'\n-5F7953   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7957 CENTRAL HEADER #316   02014B50 (33639248)\n-5F795B Created Zip Spec      14 (20) '2.0'\n-5F795C Created OS            00 (0) 'MS-DOS'\n-5F795D Extract Zip Spec      14 (20) '2.0'\n-5F795E Extract OS            00 (0) 'MS-DOS'\n-5F795F General Purpose Flag  0000 (0)\n-5F7961 Compression Method    0000 (0) 'Stored'\n-5F7963 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7967 CRC                   00000000 (0)\n-5F796B Compressed Size       00000000 (0)\n-5F796F Uncompressed Size     00000000 (0)\n-5F7973 Filename Length       005B (91)\n-5F7975 Extra Length          0009 (9)\n-5F7977 Comment Length        0000 (0)\n-5F7979 Disk Start            0000 (0)\n-5F797B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F797D Ext File Attributes   00000000 (0)\n-5F7981 Local Header Offset   000C6C77 (814199)\n-5F7985 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7985: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F79E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F79E2   Length              0005 (5)\n-5F79E4   Flags               01 (1) 'Modification'\n-5F79E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F79E9 CENTRAL HEADER #317   02014B50 (33639248)\n-5F79ED Created Zip Spec      14 (20) '2.0'\n-5F79EE Created OS            00 (0) 'MS-DOS'\n-5F79EF Extract Zip Spec      14 (20) '2.0'\n-5F79F0 Extract OS            00 (0) 'MS-DOS'\n-5F79F1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F79F3 Compression Method    0000 (0) 'Stored'\n-5F79F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F79F9 CRC                   B12610E6 (2972061926)\n-5F79FD Compressed Size       00000A5B (2651)\n-5F7A01 Uncompressed Size     00000A5B (2651)\n-5F7A05 Filename Length       0071 (113)\n-5F7A07 Extra Length          0009 (9)\n-5F7A09 Comment Length        0000 (0)\n-5F7A0B Disk Start            0000 (0)\n-5F7A0D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7A0F Ext File Attributes   00000000 (0)\n-5F7A13 Local Header Offset   000C6CF9 (814329)\n-5F7A17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7A17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7A88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7A8A   Length              0005 (5)\n-5F7A8C   Flags               01 (1) 'Modification'\n-5F7A8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7A91 CENTRAL HEADER #318   02014B50 (33639248)\n-5F7A95 Created Zip Spec      14 (20) '2.0'\n-5F7A96 Created OS            00 (0) 'MS-DOS'\n-5F7A97 Extract Zip Spec      14 (20) '2.0'\n-5F7A98 Extract OS            00 (0) 'MS-DOS'\n-5F7A99 General Purpose Flag  0000 (0)\n-5F7A9B Compression Method    0000 (0) 'Stored'\n-5F7A9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7AA1 CRC                   00000000 (0)\n-5F7AA5 Compressed Size       00000000 (0)\n-5F7AA9 Uncompressed Size     00000000 (0)\n-5F7AAD Filename Length       0035 (53)\n-5F7AAF Extra Length          0009 (9)\n-5F7AB1 Comment Length        0000 (0)\n-5F7AB3 Disk Start            0000 (0)\n-5F7AB5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7AB7 Ext File Attributes   00000000 (0)\n-5F7ABB Local Header Offset   000C77FC (817148)\n-5F7ABF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7ABF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7AF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7AF6   Length              0005 (5)\n-5F7AF8   Flags               01 (1) 'Modification'\n-5F7AF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7AFD CENTRAL HEADER #319   02014B50 (33639248)\n-5F7B01 Created Zip Spec      14 (20) '2.0'\n-5F7B02 Created OS            00 (0) 'MS-DOS'\n-5F7B03 Extract Zip Spec      14 (20) '2.0'\n-5F7B04 Extract OS            00 (0) 'MS-DOS'\n-5F7B05 General Purpose Flag  0000 (0)\n-5F7B07 Compression Method    0000 (0) 'Stored'\n-5F7B09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7B0D CRC                   00000000 (0)\n-5F7B11 Compressed Size       00000000 (0)\n-5F7B15 Uncompressed Size     00000000 (0)\n-5F7B19 Filename Length       003C (60)\n-5F7B1B Extra Length          0009 (9)\n-5F7B1D Comment Length        0000 (0)\n-5F7B1F Disk Start            0000 (0)\n-5F7B21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7B23 Ext File Attributes   00000000 (0)\n-5F7B27 Local Header Offset   000C7858 (817240)\n-5F7B2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7B2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7B67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7B69   Length              0005 (5)\n-5F7B6B   Flags               01 (1) 'Modification'\n-5F7B6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7B70 CENTRAL HEADER #320   02014B50 (33639248)\n-5F7B74 Created Zip Spec      14 (20) '2.0'\n-5F7B75 Created OS            00 (0) 'MS-DOS'\n-5F7B76 Extract Zip Spec      14 (20) '2.0'\n-5F7B77 Extract OS            00 (0) 'MS-DOS'\n-5F7B78 General Purpose Flag  0000 (0)\n-5F7B7A Compression Method    0000 (0) 'Stored'\n-5F7B7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7B80 CRC                   00000000 (0)\n-5F7B84 Compressed Size       00000000 (0)\n-5F7B88 Uncompressed Size     00000000 (0)\n-5F7B8C Filename Length       0076 (118)\n-5F7B8E Extra Length          0009 (9)\n-5F7B90 Comment Length        0000 (0)\n-5F7B92 Disk Start            0000 (0)\n-5F7B94 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7B96 Ext File Attributes   00000000 (0)\n-5F7B9A Local Header Offset   000C78BB (817339)\n-5F7B9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7B9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7C14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7C16   Length              0005 (5)\n-5F7C18   Flags               01 (1) 'Modification'\n-5F7C19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7C1D CENTRAL HEADER #321   02014B50 (33639248)\n-5F7C21 Created Zip Spec      14 (20) '2.0'\n-5F7C22 Created OS            00 (0) 'MS-DOS'\n-5F7C23 Extract Zip Spec      14 (20) '2.0'\n-5F7C24 Extract OS            00 (0) 'MS-DOS'\n-5F7C25 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7C27 Compression Method    0000 (0) 'Stored'\n-5F7C29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7C2D CRC                   041CE92B (69003563)\n-5F7C31 Compressed Size       00000B22 (2850)\n-5F7C35 Uncompressed Size     00000B22 (2850)\n-5F7C39 Filename Length       008C (140)\n-5F7C3B Extra Length          0009 (9)\n-5F7C3D Comment Length        0000 (0)\n-5F7C3F Disk Start            0000 (0)\n-5F7C41 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7C43 Ext File Attributes   00000000 (0)\n-5F7C47 Local Header Offset   000C7958 (817496)\n-5F7C4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXX'\n+5F6BA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6BA8   Length              0005 (5)\n+5F6BAA   Flags               01 (1) 'Modification'\n+5F6BAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6BAF CENTRAL HEADER #208   02014B50 (33639248)\n+5F6BB3 Created Zip Spec      14 (20) '2.0'\n+5F6BB4 Created OS            00 (0) 'MS-DOS'\n+5F6BB5 Extract Zip Spec      14 (20) '2.0'\n+5F6BB6 Extract OS            00 (0) 'MS-DOS'\n+5F6BB7 General Purpose Flag  0000 (0)\n+5F6BB9 Compression Method    0000 (0) 'Stored'\n+5F6BBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6BBF CRC                   00000000 (0)\n+5F6BC3 Compressed Size       00000000 (0)\n+5F6BC7 Uncompressed Size     00000000 (0)\n+5F6BCB Filename Length       0068 (104)\n+5F6BCD Extra Length          0009 (9)\n+5F6BCF Comment Length        0000 (0)\n+5F6BD1 Disk Start            0000 (0)\n+5F6BD3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6BD5 Ext File Attributes   00000000 (0)\n+5F6BD9 Local Header Offset   0005DC9E (384158)\n+5F6BDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6BDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6C45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6C47   Length              0005 (5)\n+5F6C49   Flags               01 (1) 'Modification'\n+5F6C4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6C4E CENTRAL HEADER #209   02014B50 (33639248)\n+5F6C52 Created Zip Spec      14 (20) '2.0'\n+5F6C53 Created OS            00 (0) 'MS-DOS'\n+5F6C54 Extract Zip Spec      14 (20) '2.0'\n+5F6C55 Extract OS            00 (0) 'MS-DOS'\n+5F6C56 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F6C58 Compression Method    0000 (0) 'Stored'\n+5F6C5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6C5E CRC                   83659368 (2204472168)\n+5F6C62 Compressed Size       000019EF (6639)\n+5F6C66 Uncompressed Size     000019EF (6639)\n+5F6C6A Filename Length       007E (126)\n+5F6C6C Extra Length          0009 (9)\n+5F6C6E Comment Length        0000 (0)\n+5F6C70 Disk Start            0000 (0)\n+5F6C72 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6C74 Ext File Attributes   00000000 (0)\n+5F6C78 Local Header Offset   0005DD2D (384301)\n+5F6C7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6C7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6CFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6CFC   Length              0005 (5)\n+5F6CFE   Flags               01 (1) 'Modification'\n+5F6CFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6D03 CENTRAL HEADER #210   02014B50 (33639248)\n+5F6D07 Created Zip Spec      14 (20) '2.0'\n+5F6D08 Created OS            00 (0) 'MS-DOS'\n+5F6D09 Extract Zip Spec      14 (20) '2.0'\n+5F6D0A Extract OS            00 (0) 'MS-DOS'\n+5F6D0B General Purpose Flag  0000 (0)\n+5F6D0D Compression Method    0000 (0) 'Stored'\n+5F6D0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6D13 CRC                   00000000 (0)\n+5F6D17 Compressed Size       00000000 (0)\n+5F6D1B Uncompressed Size     00000000 (0)\n+5F6D1F Filename Length       006E (110)\n+5F6D21 Extra Length          0009 (9)\n+5F6D23 Comment Length        0000 (0)\n+5F6D25 Disk Start            0000 (0)\n+5F6D27 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6D29 Ext File Attributes   00000000 (0)\n+5F6D2D Local Header Offset   0005F7D1 (391121)\n+5F6D31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6D31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6D9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6DA1   Length              0005 (5)\n+5F6DA3   Flags               01 (1) 'Modification'\n+5F6DA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6DA8 CENTRAL HEADER #211   02014B50 (33639248)\n+5F6DAC Created Zip Spec      14 (20) '2.0'\n+5F6DAD Created OS            00 (0) 'MS-DOS'\n+5F6DAE Extract Zip Spec      14 (20) '2.0'\n+5F6DAF Extract OS            00 (0) 'MS-DOS'\n+5F6DB0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F6DB2 Compression Method    0000 (0) 'Stored'\n+5F6DB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6DB8 CRC                   73F3DBE5 (1945361381)\n+5F6DBC Compressed Size       00001AFA (6906)\n+5F6DC0 Uncompressed Size     00001AFA (6906)\n+5F6DC4 Filename Length       0084 (132)\n+5F6DC6 Extra Length          0009 (9)\n+5F6DC8 Comment Length        0000 (0)\n+5F6DCA Disk Start            0000 (0)\n+5F6DCC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6DCE Ext File Attributes   00000000 (0)\n+5F6DD2 Local Header Offset   0005F866 (391270)\n+5F6DD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x5F7C4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F6DD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F7CD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7CD9   Length              0005 (5)\n-5F7CDB   Flags               01 (1) 'Modification'\n-5F7CDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7CE0 CENTRAL HEADER #322   02014B50 (33639248)\n-5F7CE4 Created Zip Spec      14 (20) '2.0'\n-5F7CE5 Created OS            00 (0) 'MS-DOS'\n-5F7CE6 Extract Zip Spec      14 (20) '2.0'\n-5F7CE7 Extract OS            00 (0) 'MS-DOS'\n-5F7CE8 General Purpose Flag  0000 (0)\n-5F7CEA Compression Method    0000 (0) 'Stored'\n-5F7CEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7CF0 CRC                   00000000 (0)\n-5F7CF4 Compressed Size       00000000 (0)\n-5F7CF8 Uncompressed Size     00000000 (0)\n-5F7CFC Filename Length       0075 (117)\n-5F7CFE Extra Length          0009 (9)\n-5F7D00 Comment Length        0000 (0)\n-5F7D02 Disk Start            0000 (0)\n-5F7D04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7D06 Ext File Attributes   00000000 (0)\n-5F7D0A Local Header Offset   000C853D (820541)\n-5F7D0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7D0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7D83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7D85   Length              0005 (5)\n-5F7D87   Flags               01 (1) 'Modification'\n-5F7D88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7D8C CENTRAL HEADER #323   02014B50 (33639248)\n-5F7D90 Created Zip Spec      14 (20) '2.0'\n-5F7D91 Created OS            00 (0) 'MS-DOS'\n-5F7D92 Extract Zip Spec      14 (20) '2.0'\n-5F7D93 Extract OS            00 (0) 'MS-DOS'\n-5F7D94 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7D96 Compression Method    0000 (0) 'Stored'\n-5F7D98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7D9C CRC                   16A4BA93 (379894419)\n-5F7DA0 Compressed Size       000016E4 (5860)\n-5F7DA4 Uncompressed Size     000016E4 (5860)\n-5F7DA8 Filename Length       008B (139)\n-5F7DAA Extra Length          0009 (9)\n-5F7DAC Comment Length        0000 (0)\n-5F7DAE Disk Start            0000 (0)\n-5F7DB0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7DB2 Ext File Attributes   00000000 (0)\n-5F7DB6 Local Header Offset   000C85D9 (820697)\n-5F7DBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXX'\n+5F6E5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6E5C   Length              0005 (5)\n+5F6E5E   Flags               01 (1) 'Modification'\n+5F6E5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6E63 CENTRAL HEADER #212   02014B50 (33639248)\n+5F6E67 Created Zip Spec      14 (20) '2.0'\n+5F6E68 Created OS            00 (0) 'MS-DOS'\n+5F6E69 Extract Zip Spec      14 (20) '2.0'\n+5F6E6A Extract OS            00 (0) 'MS-DOS'\n+5F6E6B General Purpose Flag  0000 (0)\n+5F6E6D Compression Method    0000 (0) 'Stored'\n+5F6E6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6E73 CRC                   00000000 (0)\n+5F6E77 Compressed Size       00000000 (0)\n+5F6E7B Uncompressed Size     00000000 (0)\n+5F6E7F Filename Length       0068 (104)\n+5F6E81 Extra Length          0009 (9)\n+5F6E83 Comment Length        0000 (0)\n+5F6E85 Disk Start            0000 (0)\n+5F6E87 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6E89 Ext File Attributes   00000000 (0)\n+5F6E8D Local Header Offset   0006141B (398363)\n+5F6E91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6E91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6EF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6EFB   Length              0005 (5)\n+5F6EFD   Flags               01 (1) 'Modification'\n+5F6EFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6F02 CENTRAL HEADER #213   02014B50 (33639248)\n+5F6F06 Created Zip Spec      14 (20) '2.0'\n+5F6F07 Created OS            00 (0) 'MS-DOS'\n+5F6F08 Extract Zip Spec      14 (20) '2.0'\n+5F6F09 Extract OS            00 (0) 'MS-DOS'\n+5F6F0A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F6F0C Compression Method    0000 (0) 'Stored'\n+5F6F0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6F12 CRC                   847E83D6 (2222883798)\n+5F6F16 Compressed Size       00001E83 (7811)\n+5F6F1A Uncompressed Size     00001E83 (7811)\n+5F6F1E Filename Length       007E (126)\n+5F6F20 Extra Length          0009 (9)\n+5F6F22 Comment Length        0000 (0)\n+5F6F24 Disk Start            0000 (0)\n+5F6F26 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6F28 Ext File Attributes   00000000 (0)\n+5F6F2C Local Header Offset   000614AA (398506)\n+5F6F30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6F30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F6FAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F6FB0   Length              0005 (5)\n+5F6FB2   Flags               01 (1) 'Modification'\n+5F6FB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F6FB7 CENTRAL HEADER #214   02014B50 (33639248)\n+5F6FBB Created Zip Spec      14 (20) '2.0'\n+5F6FBC Created OS            00 (0) 'MS-DOS'\n+5F6FBD Extract Zip Spec      14 (20) '2.0'\n+5F6FBE Extract OS            00 (0) 'MS-DOS'\n+5F6FBF General Purpose Flag  0000 (0)\n+5F6FC1 Compression Method    0000 (0) 'Stored'\n+5F6FC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F6FC7 CRC                   00000000 (0)\n+5F6FCB Compressed Size       00000000 (0)\n+5F6FCF Uncompressed Size     00000000 (0)\n+5F6FD3 Filename Length       0028 (40)\n+5F6FD5 Extra Length          0009 (9)\n+5F6FD7 Comment Length        0000 (0)\n+5F6FD9 Disk Start            0000 (0)\n+5F6FDB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F6FDD Ext File Attributes   00000000 (0)\n+5F6FE1 Local Header Offset   000633E2 (406498)\n+5F6FE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F6FE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F700D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F700F   Length              0005 (5)\n+5F7011   Flags               01 (1) 'Modification'\n+5F7012   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7016 CENTRAL HEADER #215   02014B50 (33639248)\n+5F701A Created Zip Spec      14 (20) '2.0'\n+5F701B Created OS            00 (0) 'MS-DOS'\n+5F701C Extract Zip Spec      14 (20) '2.0'\n+5F701D Extract OS            00 (0) 'MS-DOS'\n+5F701E General Purpose Flag  0000 (0)\n+5F7020 Compression Method    0000 (0) 'Stored'\n+5F7022 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7026 CRC                   00000000 (0)\n+5F702A Compressed Size       00000000 (0)\n+5F702E Uncompressed Size     00000000 (0)\n+5F7032 Filename Length       002F (47)\n+5F7034 Extra Length          0009 (9)\n+5F7036 Comment Length        0000 (0)\n+5F7038 Disk Start            0000 (0)\n+5F703A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F703C Ext File Attributes   00000000 (0)\n+5F7040 Local Header Offset   00063431 (406577)\n+5F7044 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7044: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7073 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7075   Length              0005 (5)\n+5F7077   Flags               01 (1) 'Modification'\n+5F7078   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F707C CENTRAL HEADER #216   02014B50 (33639248)\n+5F7080 Created Zip Spec      14 (20) '2.0'\n+5F7081 Created OS            00 (0) 'MS-DOS'\n+5F7082 Extract Zip Spec      14 (20) '2.0'\n+5F7083 Extract OS            00 (0) 'MS-DOS'\n+5F7084 General Purpose Flag  0000 (0)\n+5F7086 Compression Method    0000 (0) 'Stored'\n+5F7088 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F708C CRC                   00000000 (0)\n+5F7090 Compressed Size       00000000 (0)\n+5F7094 Uncompressed Size     00000000 (0)\n+5F7098 Filename Length       006E (110)\n+5F709A Extra Length          0009 (9)\n+5F709C Comment Length        0000 (0)\n+5F709E Disk Start            0000 (0)\n+5F70A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F70A2 Ext File Attributes   00000000 (0)\n+5F70A6 Local Header Offset   00063487 (406663)\n+5F70AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F70AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7118 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F711A   Length              0005 (5)\n+5F711C   Flags               01 (1) 'Modification'\n+5F711D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7121 CENTRAL HEADER #217   02014B50 (33639248)\n+5F7125 Created Zip Spec      14 (20) '2.0'\n+5F7126 Created OS            00 (0) 'MS-DOS'\n+5F7127 Extract Zip Spec      14 (20) '2.0'\n+5F7128 Extract OS            00 (0) 'MS-DOS'\n+5F7129 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F712B Compression Method    0000 (0) 'Stored'\n+5F712D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7131 CRC                   8DCDE743 (2379081539)\n+5F7135 Compressed Size       00003DFB (15867)\n+5F7139 Uncompressed Size     00003DFB (15867)\n+5F713D Filename Length       0084 (132)\n+5F713F Extra Length          0009 (9)\n+5F7141 Comment Length        0000 (0)\n+5F7143 Disk Start            0000 (0)\n+5F7145 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7147 Ext File Attributes   00000000 (0)\n+5F714B Local Header Offset   0006351C (406812)\n+5F714F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x5F7DBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F714F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F7E45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7E47   Length              0005 (5)\n-5F7E49   Flags               01 (1) 'Modification'\n-5F7E4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7E4E CENTRAL HEADER #324   02014B50 (33639248)\n-5F7E52 Created Zip Spec      14 (20) '2.0'\n-5F7E53 Created OS            00 (0) 'MS-DOS'\n-5F7E54 Extract Zip Spec      14 (20) '2.0'\n-5F7E55 Extract OS            00 (0) 'MS-DOS'\n-5F7E56 General Purpose Flag  0000 (0)\n-5F7E58 Compression Method    0000 (0) 'Stored'\n-5F7E5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7E5E CRC                   00000000 (0)\n-5F7E62 Compressed Size       00000000 (0)\n-5F7E66 Uncompressed Size     00000000 (0)\n-5F7E6A Filename Length       0078 (120)\n-5F7E6C Extra Length          0009 (9)\n-5F7E6E Comment Length        0000 (0)\n-5F7E70 Disk Start            0000 (0)\n-5F7E72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7E74 Ext File Attributes   00000000 (0)\n-5F7E78 Local Header Offset   000C9D7F (826751)\n-5F7E7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7E7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F7EF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7EF6   Length              0005 (5)\n-5F7EF8   Flags               01 (1) 'Modification'\n-5F7EF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7EFD CENTRAL HEADER #325   02014B50 (33639248)\n-5F7F01 Created Zip Spec      14 (20) '2.0'\n-5F7F02 Created OS            00 (0) 'MS-DOS'\n-5F7F03 Extract Zip Spec      14 (20) '2.0'\n-5F7F04 Extract OS            00 (0) 'MS-DOS'\n-5F7F05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F7F07 Compression Method    0000 (0) 'Stored'\n-5F7F09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7F0D CRC                   390AB403 (957002755)\n-5F7F11 Compressed Size       00001068 (4200)\n-5F7F15 Uncompressed Size     00001068 (4200)\n-5F7F19 Filename Length       008E (142)\n-5F7F1B Extra Length          0009 (9)\n-5F7F1D Comment Length        0000 (0)\n-5F7F1F Disk Start            0000 (0)\n-5F7F21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7F23 Ext File Attributes   00000000 (0)\n-5F7F27 Local Header Offset   000C9E1E (826910)\n-5F7F2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXX'\n+5F71D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F71D5   Length              0005 (5)\n+5F71D7   Flags               01 (1) 'Modification'\n+5F71D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F71DC CENTRAL HEADER #218   02014B50 (33639248)\n+5F71E0 Created Zip Spec      14 (20) '2.0'\n+5F71E1 Created OS            00 (0) 'MS-DOS'\n+5F71E2 Extract Zip Spec      14 (20) '2.0'\n+5F71E3 Extract OS            00 (0) 'MS-DOS'\n+5F71E4 General Purpose Flag  0000 (0)\n+5F71E6 Compression Method    0000 (0) 'Stored'\n+5F71E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F71EC CRC                   00000000 (0)\n+5F71F0 Compressed Size       00000000 (0)\n+5F71F4 Uncompressed Size     00000000 (0)\n+5F71F8 Filename Length       0068 (104)\n+5F71FA Extra Length          0009 (9)\n+5F71FC Comment Length        0000 (0)\n+5F71FE Disk Start            0000 (0)\n+5F7200 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7202 Ext File Attributes   00000000 (0)\n+5F7206 Local Header Offset   000673D2 (422866)\n+5F720A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F720A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7272 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7274   Length              0005 (5)\n+5F7276   Flags               01 (1) 'Modification'\n+5F7277   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F727B CENTRAL HEADER #219   02014B50 (33639248)\n+5F727F Created Zip Spec      14 (20) '2.0'\n+5F7280 Created OS            00 (0) 'MS-DOS'\n+5F7281 Extract Zip Spec      14 (20) '2.0'\n+5F7282 Extract OS            00 (0) 'MS-DOS'\n+5F7283 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7285 Compression Method    0000 (0) 'Stored'\n+5F7287 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F728B CRC                   46F84C94 (1190677652)\n+5F728F Compressed Size       00003DB7 (15799)\n+5F7293 Uncompressed Size     00003DB7 (15799)\n+5F7297 Filename Length       007E (126)\n+5F7299 Extra Length          0009 (9)\n+5F729B Comment Length        0000 (0)\n+5F729D Disk Start            0000 (0)\n+5F729F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F72A1 Ext File Attributes   00000000 (0)\n+5F72A5 Local Header Offset   00067461 (423009)\n+5F72A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F72A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7327 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7329   Length              0005 (5)\n+5F732B   Flags               01 (1) 'Modification'\n+5F732C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7330 CENTRAL HEADER #220   02014B50 (33639248)\n+5F7334 Created Zip Spec      14 (20) '2.0'\n+5F7335 Created OS            00 (0) 'MS-DOS'\n+5F7336 Extract Zip Spec      14 (20) '2.0'\n+5F7337 Extract OS            00 (0) 'MS-DOS'\n+5F7338 General Purpose Flag  0000 (0)\n+5F733A Compression Method    0000 (0) 'Stored'\n+5F733C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7340 CRC                   00000000 (0)\n+5F7344 Compressed Size       00000000 (0)\n+5F7348 Uncompressed Size     00000000 (0)\n+5F734C Filename Length       006E (110)\n+5F734E Extra Length          0009 (9)\n+5F7350 Comment Length        0000 (0)\n+5F7352 Disk Start            0000 (0)\n+5F7354 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7356 Ext File Attributes   00000000 (0)\n+5F735A Local Header Offset   0006B2CD (438989)\n+5F735E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F735E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F73CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F73CE   Length              0005 (5)\n+5F73D0   Flags               01 (1) 'Modification'\n+5F73D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F73D5 CENTRAL HEADER #221   02014B50 (33639248)\n+5F73D9 Created Zip Spec      14 (20) '2.0'\n+5F73DA Created OS            00 (0) 'MS-DOS'\n+5F73DB Extract Zip Spec      14 (20) '2.0'\n+5F73DC Extract OS            00 (0) 'MS-DOS'\n+5F73DD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F73DF Compression Method    0000 (0) 'Stored'\n+5F73E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F73E5 CRC                   96FAF425 (2533028901)\n+5F73E9 Compressed Size       000028CF (10447)\n+5F73ED Uncompressed Size     000028CF (10447)\n+5F73F1 Filename Length       0084 (132)\n+5F73F3 Extra Length          0009 (9)\n+5F73F5 Comment Length        0000 (0)\n+5F73F7 Disk Start            0000 (0)\n+5F73F9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F73FB Ext File Attributes   00000000 (0)\n+5F73FF Local Header Offset   0006B362 (439138)\n+5F7403 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n #\n-# WARNING: Offset 0x5F7F2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F7403: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F7FB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F7FBB   Length              0005 (5)\n-5F7FBD   Flags               01 (1) 'Modification'\n-5F7FBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F7FC2 CENTRAL HEADER #326   02014B50 (33639248)\n-5F7FC6 Created Zip Spec      14 (20) '2.0'\n-5F7FC7 Created OS            00 (0) 'MS-DOS'\n-5F7FC8 Extract Zip Spec      14 (20) '2.0'\n-5F7FC9 Extract OS            00 (0) 'MS-DOS'\n-5F7FCA General Purpose Flag  0000 (0)\n-5F7FCC Compression Method    0000 (0) 'Stored'\n-5F7FCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F7FD2 CRC                   00000000 (0)\n-5F7FD6 Compressed Size       00000000 (0)\n-5F7FDA Uncompressed Size     00000000 (0)\n-5F7FDE Filename Length       0074 (116)\n-5F7FE0 Extra Length          0009 (9)\n-5F7FE2 Comment Length        0000 (0)\n-5F7FE4 Disk Start            0000 (0)\n-5F7FE6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F7FE8 Ext File Attributes   00000000 (0)\n-5F7FEC Local Header Offset   000CAF4B (831307)\n-5F7FF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F7FF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8064 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8066   Length              0005 (5)\n-5F8068   Flags               01 (1) 'Modification'\n-5F8069   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F806D CENTRAL HEADER #327   02014B50 (33639248)\n-5F8071 Created Zip Spec      14 (20) '2.0'\n-5F8072 Created OS            00 (0) 'MS-DOS'\n-5F8073 Extract Zip Spec      14 (20) '2.0'\n-5F8074 Extract OS            00 (0) 'MS-DOS'\n-5F8075 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8077 Compression Method    0000 (0) 'Stored'\n-5F8079 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F807D CRC                   3DE98548 (1038714184)\n-5F8081 Compressed Size       000016AA (5802)\n-5F8085 Uncompressed Size     000016AA (5802)\n-5F8089 Filename Length       008A (138)\n-5F808B Extra Length          0009 (9)\n-5F808D Comment Length        0000 (0)\n-5F808F Disk Start            0000 (0)\n-5F8091 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8093 Ext File Attributes   00000000 (0)\n-5F8097 Local Header Offset   000CAFE6 (831462)\n-5F809B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXX'\n+5F7487 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7489   Length              0005 (5)\n+5F748B   Flags               01 (1) 'Modification'\n+5F748C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7490 CENTRAL HEADER #222   02014B50 (33639248)\n+5F7494 Created Zip Spec      14 (20) '2.0'\n+5F7495 Created OS            00 (0) 'MS-DOS'\n+5F7496 Extract Zip Spec      14 (20) '2.0'\n+5F7497 Extract OS            00 (0) 'MS-DOS'\n+5F7498 General Purpose Flag  0000 (0)\n+5F749A Compression Method    0000 (0) 'Stored'\n+5F749C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F74A0 CRC                   00000000 (0)\n+5F74A4 Compressed Size       00000000 (0)\n+5F74A8 Uncompressed Size     00000000 (0)\n+5F74AC Filename Length       0068 (104)\n+5F74AE Extra Length          0009 (9)\n+5F74B0 Comment Length        0000 (0)\n+5F74B2 Disk Start            0000 (0)\n+5F74B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F74B6 Ext File Attributes   00000000 (0)\n+5F74BA Local Header Offset   0006DCEC (449772)\n+5F74BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F74BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7526 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7528   Length              0005 (5)\n+5F752A   Flags               01 (1) 'Modification'\n+5F752B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F752F CENTRAL HEADER #223   02014B50 (33639248)\n+5F7533 Created Zip Spec      14 (20) '2.0'\n+5F7534 Created OS            00 (0) 'MS-DOS'\n+5F7535 Extract Zip Spec      14 (20) '2.0'\n+5F7536 Extract OS            00 (0) 'MS-DOS'\n+5F7537 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7539 Compression Method    0000 (0) 'Stored'\n+5F753B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F753F CRC                   77DFCD97 (2011155863)\n+5F7543 Compressed Size       00002C4A (11338)\n+5F7547 Uncompressed Size     00002C4A (11338)\n+5F754B Filename Length       007E (126)\n+5F754D Extra Length          0009 (9)\n+5F754F Comment Length        0000 (0)\n+5F7551 Disk Start            0000 (0)\n+5F7553 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7555 Ext File Attributes   00000000 (0)\n+5F7559 Local Header Offset   0006DD7B (449915)\n+5F755D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F755D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F75DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F75DD   Length              0005 (5)\n+5F75DF   Flags               01 (1) 'Modification'\n+5F75E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F75E4 CENTRAL HEADER #224   02014B50 (33639248)\n+5F75E8 Created Zip Spec      14 (20) '2.0'\n+5F75E9 Created OS            00 (0) 'MS-DOS'\n+5F75EA Extract Zip Spec      14 (20) '2.0'\n+5F75EB Extract OS            00 (0) 'MS-DOS'\n+5F75EC General Purpose Flag  0000 (0)\n+5F75EE Compression Method    0000 (0) 'Stored'\n+5F75F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F75F4 CRC                   00000000 (0)\n+5F75F8 Compressed Size       00000000 (0)\n+5F75FC Uncompressed Size     00000000 (0)\n+5F7600 Filename Length       0028 (40)\n+5F7602 Extra Length          0009 (9)\n+5F7604 Comment Length        0000 (0)\n+5F7606 Disk Start            0000 (0)\n+5F7608 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F760A Ext File Attributes   00000000 (0)\n+5F760E Local Header Offset   00070A7A (461434)\n+5F7612 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7612: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F763A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F763C   Length              0005 (5)\n+5F763E   Flags               01 (1) 'Modification'\n+5F763F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7643 CENTRAL HEADER #225   02014B50 (33639248)\n+5F7647 Created Zip Spec      14 (20) '2.0'\n+5F7648 Created OS            00 (0) 'MS-DOS'\n+5F7649 Extract Zip Spec      14 (20) '2.0'\n+5F764A Extract OS            00 (0) 'MS-DOS'\n+5F764B General Purpose Flag  0000 (0)\n+5F764D Compression Method    0000 (0) 'Stored'\n+5F764F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7653 CRC                   00000000 (0)\n+5F7657 Compressed Size       00000000 (0)\n+5F765B Uncompressed Size     00000000 (0)\n+5F765F Filename Length       002F (47)\n+5F7661 Extra Length          0009 (9)\n+5F7663 Comment Length        0000 (0)\n+5F7665 Disk Start            0000 (0)\n+5F7667 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7669 Ext File Attributes   00000000 (0)\n+5F766D Local Header Offset   00070AC9 (461513)\n+5F7671 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7671: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F76A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F76A2   Length              0005 (5)\n+5F76A4   Flags               01 (1) 'Modification'\n+5F76A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F76A9 CENTRAL HEADER #226   02014B50 (33639248)\n+5F76AD Created Zip Spec      14 (20) '2.0'\n+5F76AE Created OS            00 (0) 'MS-DOS'\n+5F76AF Extract Zip Spec      14 (20) '2.0'\n+5F76B0 Extract OS            00 (0) 'MS-DOS'\n+5F76B1 General Purpose Flag  0000 (0)\n+5F76B3 Compression Method    0000 (0) 'Stored'\n+5F76B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F76B9 CRC                   00000000 (0)\n+5F76BD Compressed Size       00000000 (0)\n+5F76C1 Uncompressed Size     00000000 (0)\n+5F76C5 Filename Length       006E (110)\n+5F76C7 Extra Length          0009 (9)\n+5F76C9 Comment Length        0000 (0)\n+5F76CB Disk Start            0000 (0)\n+5F76CD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F76CF Ext File Attributes   00000000 (0)\n+5F76D3 Local Header Offset   00070B1F (461599)\n+5F76D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F76D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7745 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7747   Length              0005 (5)\n+5F7749   Flags               01 (1) 'Modification'\n+5F774A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F774E CENTRAL HEADER #227   02014B50 (33639248)\n+5F7752 Created Zip Spec      14 (20) '2.0'\n+5F7753 Created OS            00 (0) 'MS-DOS'\n+5F7754 Extract Zip Spec      14 (20) '2.0'\n+5F7755 Extract OS            00 (0) 'MS-DOS'\n+5F7756 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7758 Compression Method    0000 (0) 'Stored'\n+5F775A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F775E CRC                   249CCFCD (614256589)\n+5F7762 Compressed Size       00005101 (20737)\n+5F7766 Uncompressed Size     00005101 (20737)\n+5F776A Filename Length       0084 (132)\n+5F776C Extra Length          0009 (9)\n+5F776E Comment Length        0000 (0)\n+5F7770 Disk Start            0000 (0)\n+5F7772 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7774 Ext File Attributes   00000000 (0)\n+5F7778 Local Header Offset   00070BB4 (461748)\n+5F777C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n+#\n+# WARNING: Offset 0x5F777C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n #\n-# WARNING: Offset 0x5F809B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F7800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7802   Length              0005 (5)\n+5F7804   Flags               01 (1) 'Modification'\n+5F7805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7809 CENTRAL HEADER #228   02014B50 (33639248)\n+5F780D Created Zip Spec      14 (20) '2.0'\n+5F780E Created OS            00 (0) 'MS-DOS'\n+5F780F Extract Zip Spec      14 (20) '2.0'\n+5F7810 Extract OS            00 (0) 'MS-DOS'\n+5F7811 General Purpose Flag  0000 (0)\n+5F7813 Compression Method    0000 (0) 'Stored'\n+5F7815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7819 CRC                   00000000 (0)\n+5F781D Compressed Size       00000000 (0)\n+5F7821 Uncompressed Size     00000000 (0)\n+5F7825 Filename Length       0068 (104)\n+5F7827 Extra Length          0009 (9)\n+5F7829 Comment Length        0000 (0)\n+5F782B Disk Start            0000 (0)\n+5F782D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F782F Ext File Attributes   00000000 (0)\n+5F7833 Local Header Offset   00075D70 (482672)\n+5F7837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F789F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F78A1   Length              0005 (5)\n+5F78A3   Flags               01 (1) 'Modification'\n+5F78A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F78A8 CENTRAL HEADER #229   02014B50 (33639248)\n+5F78AC Created Zip Spec      14 (20) '2.0'\n+5F78AD Created OS            00 (0) 'MS-DOS'\n+5F78AE Extract Zip Spec      14 (20) '2.0'\n+5F78AF Extract OS            00 (0) 'MS-DOS'\n+5F78B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F78B2 Compression Method    0000 (0) 'Stored'\n+5F78B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F78B8 CRC                   46DA6369 (1188717417)\n+5F78BC Compressed Size       00003DB7 (15799)\n+5F78C0 Uncompressed Size     00003DB7 (15799)\n+5F78C4 Filename Length       007E (126)\n+5F78C6 Extra Length          0009 (9)\n+5F78C8 Comment Length        0000 (0)\n+5F78CA Disk Start            0000 (0)\n+5F78CC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F78CE Ext File Attributes   00000000 (0)\n+5F78D2 Local Header Offset   00075DFF (482815)\n+5F78D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F78D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7954 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7956   Length              0005 (5)\n+5F7958   Flags               01 (1) 'Modification'\n+5F7959   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F795D CENTRAL HEADER #230   02014B50 (33639248)\n+5F7961 Created Zip Spec      14 (20) '2.0'\n+5F7962 Created OS            00 (0) 'MS-DOS'\n+5F7963 Extract Zip Spec      14 (20) '2.0'\n+5F7964 Extract OS            00 (0) 'MS-DOS'\n+5F7965 General Purpose Flag  0000 (0)\n+5F7967 Compression Method    0000 (0) 'Stored'\n+5F7969 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F796D CRC                   00000000 (0)\n+5F7971 Compressed Size       00000000 (0)\n+5F7975 Uncompressed Size     00000000 (0)\n+5F7979 Filename Length       006E (110)\n+5F797B Extra Length          0009 (9)\n+5F797D Comment Length        0000 (0)\n+5F797F Disk Start            0000 (0)\n+5F7981 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7983 Ext File Attributes   00000000 (0)\n+5F7987 Local Header Offset   00079C6B (498795)\n+5F798B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F798B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F79F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F79FB   Length              0005 (5)\n+5F79FD   Flags               01 (1) 'Modification'\n+5F79FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7A02 CENTRAL HEADER #231   02014B50 (33639248)\n+5F7A06 Created Zip Spec      14 (20) '2.0'\n+5F7A07 Created OS            00 (0) 'MS-DOS'\n+5F7A08 Extract Zip Spec      14 (20) '2.0'\n+5F7A09 Extract OS            00 (0) 'MS-DOS'\n+5F7A0A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7A0C Compression Method    0000 (0) 'Stored'\n+5F7A0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7A12 CRC                   6668C19E (1718141342)\n+5F7A16 Compressed Size       00009C3B (39995)\n+5F7A1A Uncompressed Size     00009C3B (39995)\n+5F7A1E Filename Length       0084 (132)\n+5F7A20 Extra Length          0009 (9)\n+5F7A22 Comment Length        0000 (0)\n+5F7A24 Disk Start            0000 (0)\n+5F7A26 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7A28 Ext File Attributes   00000000 (0)\n+5F7A2C Local Header Offset   00079D00 (498944)\n+5F7A30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             '\n+#\n+# WARNING: Offset 0x5F7A30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F8125 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8127   Length              0005 (5)\n-5F8129   Flags               01 (1) 'Modification'\n-5F812A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F812E CENTRAL HEADER #328   02014B50 (33639248)\n-5F8132 Created Zip Spec      14 (20) '2.0'\n-5F8133 Created OS            00 (0) 'MS-DOS'\n-5F8134 Extract Zip Spec      14 (20) '2.0'\n-5F8135 Extract OS            00 (0) 'MS-DOS'\n-5F8136 General Purpose Flag  0000 (0)\n-5F8138 Compression Method    0000 (0) 'Stored'\n-5F813A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F813E CRC                   00000000 (0)\n-5F8142 Compressed Size       00000000 (0)\n-5F8146 Uncompressed Size     00000000 (0)\n-5F814A Filename Length       0024 (36)\n-5F814C Extra Length          0009 (9)\n-5F814E Comment Length        0000 (0)\n-5F8150 Disk Start            0000 (0)\n-5F8152 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8154 Ext File Attributes   00000000 (0)\n-5F8158 Local Header Offset   000CC751 (837457)\n-5F815C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F815C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8180 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8182   Length              0005 (5)\n-5F8184   Flags               01 (1) 'Modification'\n-5F8185   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8189 CENTRAL HEADER #329   02014B50 (33639248)\n-5F818D Created Zip Spec      14 (20) '2.0'\n-5F818E Created OS            00 (0) 'MS-DOS'\n-5F818F Extract Zip Spec      14 (20) '2.0'\n-5F8190 Extract OS            00 (0) 'MS-DOS'\n-5F8191 General Purpose Flag  0000 (0)\n-5F8193 Compression Method    0000 (0) 'Stored'\n-5F8195 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8199 CRC                   00000000 (0)\n-5F819D Compressed Size       00000000 (0)\n-5F81A1 Uncompressed Size     00000000 (0)\n-5F81A5 Filename Length       002B (43)\n-5F81A7 Extra Length          0009 (9)\n-5F81A9 Comment Length        0000 (0)\n-5F81AB Disk Start            0000 (0)\n-5F81AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F81AF Ext File Attributes   00000000 (0)\n-5F81B3 Local Header Offset   000CC79C (837532)\n-5F81B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F81B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F81E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F81E4   Length              0005 (5)\n-5F81E6   Flags               01 (1) 'Modification'\n-5F81E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F81EB CENTRAL HEADER #330   02014B50 (33639248)\n-5F81EF Created Zip Spec      14 (20) '2.0'\n-5F81F0 Created OS            00 (0) 'MS-DOS'\n-5F81F1 Extract Zip Spec      14 (20) '2.0'\n-5F81F2 Extract OS            00 (0) 'MS-DOS'\n-5F81F3 General Purpose Flag  0000 (0)\n-5F81F5 Compression Method    0000 (0) 'Stored'\n-5F81F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F81FB CRC                   00000000 (0)\n-5F81FF Compressed Size       00000000 (0)\n-5F8203 Uncompressed Size     00000000 (0)\n-5F8207 Filename Length       0056 (86)\n-5F8209 Extra Length          0009 (9)\n-5F820B Comment Length        0000 (0)\n-5F820D Disk Start            0000 (0)\n-5F820F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8211 Ext File Attributes   00000000 (0)\n-5F8215 Local Header Offset   000CC7EE (837614)\n-5F8219 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8219: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F826F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8271   Length              0005 (5)\n-5F8273   Flags               01 (1) 'Modification'\n-5F8274   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8278 CENTRAL HEADER #331   02014B50 (33639248)\n-5F827C Created Zip Spec      14 (20) '2.0'\n-5F827D Created OS            00 (0) 'MS-DOS'\n-5F827E Extract Zip Spec      14 (20) '2.0'\n-5F827F Extract OS            00 (0) 'MS-DOS'\n-5F8280 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8282 Compression Method    0000 (0) 'Stored'\n-5F8284 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8288 CRC                   F32265E7 (4079117799)\n-5F828C Compressed Size       00001595 (5525)\n-5F8290 Uncompressed Size     00001595 (5525)\n-5F8294 Filename Length       006C (108)\n-5F8296 Extra Length          0009 (9)\n-5F8298 Comment Length        0000 (0)\n-5F829A Disk Start            0000 (0)\n-5F829C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F829E Ext File Attributes   00000000 (0)\n-5F82A2 Local Header Offset   000CC86B (837739)\n-5F82A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F82A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8312 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8314   Length              0005 (5)\n-5F8316   Flags               01 (1) 'Modification'\n-5F8317   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F831B CENTRAL HEADER #332   02014B50 (33639248)\n-5F831F Created Zip Spec      14 (20) '2.0'\n-5F8320 Created OS            00 (0) 'MS-DOS'\n-5F8321 Extract Zip Spec      14 (20) '2.0'\n-5F8322 Extract OS            00 (0) 'MS-DOS'\n-5F8323 General Purpose Flag  0000 (0)\n-5F8325 Compression Method    0000 (0) 'Stored'\n-5F8327 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F832B CRC                   00000000 (0)\n-5F832F Compressed Size       00000000 (0)\n-5F8333 Uncompressed Size     00000000 (0)\n-5F8337 Filename Length       0055 (85)\n-5F8339 Extra Length          0009 (9)\n-5F833B Comment Length        0000 (0)\n-5F833D Disk Start            0000 (0)\n-5F833F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8341 Ext File Attributes   00000000 (0)\n-5F8345 Local Header Offset   000CDEA3 (843427)\n-5F8349 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8349: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F839E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F83A0   Length              0005 (5)\n-5F83A2   Flags               01 (1) 'Modification'\n-5F83A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F83A7 CENTRAL HEADER #333   02014B50 (33639248)\n-5F83AB Created Zip Spec      14 (20) '2.0'\n-5F83AC Created OS            00 (0) 'MS-DOS'\n-5F83AD Extract Zip Spec      14 (20) '2.0'\n-5F83AE Extract OS            00 (0) 'MS-DOS'\n-5F83AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F83B1 Compression Method    0000 (0) 'Stored'\n-5F83B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F83B7 CRC                   62A57B9F (1655012255)\n-5F83BB Compressed Size       00000AFB (2811)\n-5F83BF Uncompressed Size     00000AFB (2811)\n-5F83C3 Filename Length       006B (107)\n-5F83C5 Extra Length          0009 (9)\n-5F83C7 Comment Length        0000 (0)\n-5F83C9 Disk Start            0000 (0)\n-5F83CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F83CD Ext File Attributes   00000000 (0)\n-5F83D1 Local Header Offset   000CDF1F (843551)\n-5F83D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F83D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8442   Length              0005 (5)\n-5F8444   Flags               01 (1) 'Modification'\n-5F8445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8449 CENTRAL HEADER #334   02014B50 (33639248)\n-5F844D Created Zip Spec      14 (20) '2.0'\n-5F844E Created OS            00 (0) 'MS-DOS'\n-5F844F Extract Zip Spec      14 (20) '2.0'\n-5F8450 Extract OS            00 (0) 'MS-DOS'\n-5F8451 General Purpose Flag  0000 (0)\n-5F8453 Compression Method    0000 (0) 'Stored'\n-5F8455 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8459 CRC                   00000000 (0)\n-5F845D Compressed Size       00000000 (0)\n-5F8461 Uncompressed Size     00000000 (0)\n-5F8465 Filename Length       0023 (35)\n-5F8467 Extra Length          0009 (9)\n-5F8469 Comment Length        0000 (0)\n-5F846B Disk Start            0000 (0)\n-5F846D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F846F Ext File Attributes   00000000 (0)\n-5F8473 Local Header Offset   000CEABC (846524)\n-5F8477 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8477: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F849A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F849C   Length              0005 (5)\n-5F849E   Flags               01 (1) 'Modification'\n-5F849F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F84A3 CENTRAL HEADER #335   02014B50 (33639248)\n-5F84A7 Created Zip Spec      14 (20) '2.0'\n-5F84A8 Created OS            00 (0) 'MS-DOS'\n-5F84A9 Extract Zip Spec      14 (20) '2.0'\n-5F84AA Extract OS            00 (0) 'MS-DOS'\n-5F84AB General Purpose Flag  0000 (0)\n-5F84AD Compression Method    0000 (0) 'Stored'\n-5F84AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F84B3 CRC                   00000000 (0)\n-5F84B7 Compressed Size       00000000 (0)\n-5F84BB Uncompressed Size     00000000 (0)\n-5F84BF Filename Length       002A (42)\n-5F84C1 Extra Length          0009 (9)\n-5F84C3 Comment Length        0000 (0)\n-5F84C5 Disk Start            0000 (0)\n-5F84C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F84C9 Ext File Attributes   00000000 (0)\n-5F84CD Local Header Offset   000CEB06 (846598)\n-5F84D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F84D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F84FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F84FD   Length              0005 (5)\n-5F84FF   Flags               01 (1) 'Modification'\n-5F8500   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8504 CENTRAL HEADER #336   02014B50 (33639248)\n-5F8508 Created Zip Spec      14 (20) '2.0'\n-5F8509 Created OS            00 (0) 'MS-DOS'\n-5F850A Extract Zip Spec      14 (20) '2.0'\n-5F850B Extract OS            00 (0) 'MS-DOS'\n-5F850C General Purpose Flag  0000 (0)\n-5F850E Compression Method    0000 (0) 'Stored'\n-5F8510 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8514 CRC                   00000000 (0)\n-5F8518 Compressed Size       00000000 (0)\n-5F851C Uncompressed Size     00000000 (0)\n-5F8520 Filename Length       0052 (82)\n-5F8522 Extra Length          0009 (9)\n-5F8524 Comment Length        0000 (0)\n-5F8526 Disk Start            0000 (0)\n-5F8528 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F852A Ext File Attributes   00000000 (0)\n-5F852E Local Header Offset   000CEB57 (846679)\n-5F8532 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8532: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8584 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8586   Length              0005 (5)\n-5F8588   Flags               01 (1) 'Modification'\n-5F8589   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F858D CENTRAL HEADER #337   02014B50 (33639248)\n-5F8591 Created Zip Spec      14 (20) '2.0'\n-5F8592 Created OS            00 (0) 'MS-DOS'\n-5F8593 Extract Zip Spec      14 (20) '2.0'\n-5F8594 Extract OS            00 (0) 'MS-DOS'\n-5F8595 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8597 Compression Method    0000 (0) 'Stored'\n-5F8599 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F859D CRC                   63C353AF (1673745327)\n-5F85A1 Compressed Size       00000CF8 (3320)\n-5F85A5 Uncompressed Size     00000CF8 (3320)\n-5F85A9 Filename Length       0068 (104)\n-5F85AB Extra Length          0009 (9)\n-5F85AD Comment Length        0000 (0)\n-5F85AF Disk Start            0000 (0)\n-5F85B1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F85B3 Ext File Attributes   00000000 (0)\n-5F85B7 Local Header Offset   000CEBD0 (846800)\n-5F85BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F85BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8623 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8625   Length              0005 (5)\n-5F8627   Flags               01 (1) 'Modification'\n-5F8628   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F862C CENTRAL HEADER #338   02014B50 (33639248)\n-5F8630 Created Zip Spec      14 (20) '2.0'\n-5F8631 Created OS            00 (0) 'MS-DOS'\n-5F8632 Extract Zip Spec      14 (20) '2.0'\n-5F8633 Extract OS            00 (0) 'MS-DOS'\n-5F8634 General Purpose Flag  0000 (0)\n-5F8636 Compression Method    0000 (0) 'Stored'\n-5F8638 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F863C CRC                   00000000 (0)\n-5F8640 Compressed Size       00000000 (0)\n-5F8644 Uncompressed Size     00000000 (0)\n-5F8648 Filename Length       0059 (89)\n-5F864A Extra Length          0009 (9)\n-5F864C Comment Length        0000 (0)\n-5F864E Disk Start            0000 (0)\n-5F8650 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8652 Ext File Attributes   00000000 (0)\n-5F8656 Local Header Offset   000CF967 (850279)\n-5F865A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F865A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F86B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F86B5   Length              0005 (5)\n-5F86B7   Flags               01 (1) 'Modification'\n-5F86B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F86BC CENTRAL HEADER #339   02014B50 (33639248)\n-5F86C0 Created Zip Spec      14 (20) '2.0'\n-5F86C1 Created OS            00 (0) 'MS-DOS'\n-5F86C2 Extract Zip Spec      14 (20) '2.0'\n-5F86C3 Extract OS            00 (0) 'MS-DOS'\n-5F86C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F86C6 Compression Method    0000 (0) 'Stored'\n-5F86C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F86CC CRC                   C64481A5 (3326378405)\n-5F86D0 Compressed Size       00000723 (1827)\n-5F86D4 Uncompressed Size     00000723 (1827)\n-5F86D8 Filename Length       006F (111)\n-5F86DA Extra Length          0009 (9)\n-5F86DC Comment Length        0000 (0)\n-5F86DE Disk Start            0000 (0)\n-5F86E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F86E2 Ext File Attributes   00000000 (0)\n-5F86E6 Local Header Offset   000CF9E7 (850407)\n-5F86EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F86EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8759 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F875B   Length              0005 (5)\n-5F875D   Flags               01 (1) 'Modification'\n-5F875E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8762 CENTRAL HEADER #340   02014B50 (33639248)\n-5F8766 Created Zip Spec      14 (20) '2.0'\n-5F8767 Created OS            00 (0) 'MS-DOS'\n-5F8768 Extract Zip Spec      14 (20) '2.0'\n-5F8769 Extract OS            00 (0) 'MS-DOS'\n-5F876A General Purpose Flag  0000 (0)\n-5F876C Compression Method    0000 (0) 'Stored'\n-5F876E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8772 CRC                   00000000 (0)\n-5F8776 Compressed Size       00000000 (0)\n-5F877A Uncompressed Size     00000000 (0)\n-5F877E Filename Length       0057 (87)\n-5F8780 Extra Length          0009 (9)\n-5F8782 Comment Length        0000 (0)\n-5F8784 Disk Start            0000 (0)\n-5F8786 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8788 Ext File Attributes   00000000 (0)\n-5F878C Local Header Offset   000D01B0 (852400)\n-5F8790 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8790: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F87E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F87E9   Length              0005 (5)\n-5F87EB   Flags               01 (1) 'Modification'\n-5F87EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F87F0 CENTRAL HEADER #341   02014B50 (33639248)\n-5F87F4 Created Zip Spec      14 (20) '2.0'\n-5F87F5 Created OS            00 (0) 'MS-DOS'\n-5F87F6 Extract Zip Spec      14 (20) '2.0'\n-5F87F7 Extract OS            00 (0) 'MS-DOS'\n-5F87F8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F87FA Compression Method    0000 (0) 'Stored'\n-5F87FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8800 CRC                   39649106 (962892038)\n-5F8804 Compressed Size       000006E2 (1762)\n-5F8808 Uncompressed Size     000006E2 (1762)\n-5F880C Filename Length       006D (109)\n-5F880E Extra Length          0009 (9)\n-5F8810 Comment Length        0000 (0)\n-5F8812 Disk Start            0000 (0)\n-5F8814 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8816 Ext File Attributes   00000000 (0)\n-5F881A Local Header Offset   000D022E (852526)\n-5F881E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F881E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F888B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F888D   Length              0005 (5)\n-5F888F   Flags               01 (1) 'Modification'\n-5F8890   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8894 CENTRAL HEADER #342   02014B50 (33639248)\n-5F8898 Created Zip Spec      14 (20) '2.0'\n-5F8899 Created OS            00 (0) 'MS-DOS'\n-5F889A Extract Zip Spec      14 (20) '2.0'\n-5F889B Extract OS            00 (0) 'MS-DOS'\n-5F889C General Purpose Flag  0000 (0)\n-5F889E Compression Method    0000 (0) 'Stored'\n-5F88A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F88A4 CRC                   00000000 (0)\n-5F88A8 Compressed Size       00000000 (0)\n-5F88AC Uncompressed Size     00000000 (0)\n-5F88B0 Filename Length       0052 (82)\n-5F88B2 Extra Length          0009 (9)\n-5F88B4 Comment Length        0000 (0)\n-5F88B6 Disk Start            0000 (0)\n-5F88B8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F88BA Ext File Attributes   00000000 (0)\n-5F88BE Local Header Offset   000D09B4 (854452)\n-5F88C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F88C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8916   Length              0005 (5)\n-5F8918   Flags               01 (1) 'Modification'\n-5F8919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F891D CENTRAL HEADER #343   02014B50 (33639248)\n-5F8921 Created Zip Spec      14 (20) '2.0'\n-5F8922 Created OS            00 (0) 'MS-DOS'\n-5F8923 Extract Zip Spec      14 (20) '2.0'\n-5F8924 Extract OS            00 (0) 'MS-DOS'\n-5F8925 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8927 Compression Method    0000 (0) 'Stored'\n-5F8929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F892D CRC                   8DC8B44C (2378740812)\n-5F8931 Compressed Size       00000782 (1922)\n-5F8935 Uncompressed Size     00000782 (1922)\n-5F8939 Filename Length       0068 (104)\n-5F893B Extra Length          0009 (9)\n-5F893D Comment Length        0000 (0)\n-5F893F Disk Start            0000 (0)\n-5F8941 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8943 Ext File Attributes   00000000 (0)\n-5F8947 Local Header Offset   000D0A2D (854573)\n-5F894B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F894B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F89B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F89B5   Length              0005 (5)\n-5F89B7   Flags               01 (1) 'Modification'\n-5F89B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F89BC CENTRAL HEADER #344   02014B50 (33639248)\n-5F89C0 Created Zip Spec      14 (20) '2.0'\n-5F89C1 Created OS            00 (0) 'MS-DOS'\n-5F89C2 Extract Zip Spec      14 (20) '2.0'\n-5F89C3 Extract OS            00 (0) 'MS-DOS'\n-5F89C4 General Purpose Flag  0000 (0)\n-5F89C6 Compression Method    0000 (0) 'Stored'\n-5F89C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F89CC CRC                   00000000 (0)\n-5F89D0 Compressed Size       00000000 (0)\n-5F89D4 Uncompressed Size     00000000 (0)\n-5F89D8 Filename Length       0023 (35)\n-5F89DA Extra Length          0009 (9)\n-5F89DC Comment Length        0000 (0)\n-5F89DE Disk Start            0000 (0)\n-5F89E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F89E2 Ext File Attributes   00000000 (0)\n-5F89E6 Local Header Offset   000D124E (856654)\n-5F89EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F89EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8A0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8A0F   Length              0005 (5)\n-5F8A11   Flags               01 (1) 'Modification'\n-5F8A12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8A16 CENTRAL HEADER #345   02014B50 (33639248)\n-5F8A1A Created Zip Spec      14 (20) '2.0'\n-5F8A1B Created OS            00 (0) 'MS-DOS'\n-5F8A1C Extract Zip Spec      14 (20) '2.0'\n-5F8A1D Extract OS            00 (0) 'MS-DOS'\n-5F8A1E General Purpose Flag  0000 (0)\n-5F8A20 Compression Method    0000 (0) 'Stored'\n-5F8A22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8A26 CRC                   00000000 (0)\n-5F8A2A Compressed Size       00000000 (0)\n-5F8A2E Uncompressed Size     00000000 (0)\n-5F8A32 Filename Length       002A (42)\n-5F8A34 Extra Length          0009 (9)\n-5F8A36 Comment Length        0000 (0)\n-5F8A38 Disk Start            0000 (0)\n-5F8A3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8A3C Ext File Attributes   00000000 (0)\n-5F8A40 Local Header Offset   000D1298 (856728)\n-5F8A44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8A44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8A6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8A70   Length              0005 (5)\n-5F8A72   Flags               01 (1) 'Modification'\n-5F8A73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8A77 CENTRAL HEADER #346   02014B50 (33639248)\n-5F8A7B Created Zip Spec      14 (20) '2.0'\n-5F8A7C Created OS            00 (0) 'MS-DOS'\n-5F8A7D Extract Zip Spec      14 (20) '2.0'\n-5F8A7E Extract OS            00 (0) 'MS-DOS'\n-5F8A7F General Purpose Flag  0000 (0)\n-5F8A81 Compression Method    0000 (0) 'Stored'\n-5F8A83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8A87 CRC                   00000000 (0)\n-5F8A8B Compressed Size       00000000 (0)\n-5F8A8F Uncompressed Size     00000000 (0)\n-5F8A93 Filename Length       0052 (82)\n-5F8A95 Extra Length          0009 (9)\n-5F8A97 Comment Length        0000 (0)\n-5F8A99 Disk Start            0000 (0)\n-5F8A9B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8A9D Ext File Attributes   00000000 (0)\n-5F8AA1 Local Header Offset   000D12E9 (856809)\n-5F8AA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8AA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8AF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8AF9   Length              0005 (5)\n-5F8AFB   Flags               01 (1) 'Modification'\n-5F8AFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8B00 CENTRAL HEADER #347   02014B50 (33639248)\n-5F8B04 Created Zip Spec      14 (20) '2.0'\n-5F8B05 Created OS            00 (0) 'MS-DOS'\n-5F8B06 Extract Zip Spec      14 (20) '2.0'\n-5F8B07 Extract OS            00 (0) 'MS-DOS'\n-5F8B08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8B0A Compression Method    0000 (0) 'Stored'\n-5F8B0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8B10 CRC                   605D4301 (1616724737)\n-5F8B14 Compressed Size       00000914 (2324)\n-5F8B18 Uncompressed Size     00000914 (2324)\n-5F8B1C Filename Length       0068 (104)\n-5F8B1E Extra Length          0009 (9)\n-5F8B20 Comment Length        0000 (0)\n-5F8B22 Disk Start            0000 (0)\n-5F8B24 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8B26 Ext File Attributes   00000000 (0)\n-5F8B2A Local Header Offset   000D1362 (856930)\n-5F8B2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8B2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8B96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8B98   Length              0005 (5)\n-5F8B9A   Flags               01 (1) 'Modification'\n-5F8B9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8B9F CENTRAL HEADER #348   02014B50 (33639248)\n-5F8BA3 Created Zip Spec      14 (20) '2.0'\n-5F8BA4 Created OS            00 (0) 'MS-DOS'\n-5F8BA5 Extract Zip Spec      14 (20) '2.0'\n-5F8BA6 Extract OS            00 (0) 'MS-DOS'\n-5F8BA7 General Purpose Flag  0000 (0)\n-5F8BA9 Compression Method    0000 (0) 'Stored'\n-5F8BAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8BAF CRC                   00000000 (0)\n-5F8BB3 Compressed Size       00000000 (0)\n-5F8BB7 Uncompressed Size     00000000 (0)\n-5F8BBB Filename Length       005F (95)\n-5F8BBD Extra Length          0009 (9)\n-5F8BBF Comment Length        0000 (0)\n-5F8BC1 Disk Start            0000 (0)\n-5F8BC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8BC5 Ext File Attributes   00000000 (0)\n-5F8BC9 Local Header Offset   000D1D15 (859413)\n-5F8BCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8BCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8C2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8C2E   Length              0005 (5)\n-5F8C30   Flags               01 (1) 'Modification'\n-5F8C31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8C35 CENTRAL HEADER #349   02014B50 (33639248)\n-5F8C39 Created Zip Spec      14 (20) '2.0'\n-5F8C3A Created OS            00 (0) 'MS-DOS'\n-5F8C3B Extract Zip Spec      14 (20) '2.0'\n-5F8C3C Extract OS            00 (0) 'MS-DOS'\n-5F8C3D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8C3F Compression Method    0000 (0) 'Stored'\n-5F8C41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8C45 CRC                   A64E298E (2790140302)\n-5F8C49 Compressed Size       000007A5 (1957)\n-5F8C4D Uncompressed Size     000007A5 (1957)\n-5F8C51 Filename Length       0075 (117)\n-5F8C53 Extra Length          0009 (9)\n-5F8C55 Comment Length        0000 (0)\n-5F8C57 Disk Start            0000 (0)\n-5F8C59 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8C5B Ext File Attributes   00000000 (0)\n-5F8C5F Local Header Offset   000D1D9B (859547)\n-5F8C63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8C63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8CD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8CDA   Length              0005 (5)\n-5F8CDC   Flags               01 (1) 'Modification'\n-5F8CDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8CE1 CENTRAL HEADER #350   02014B50 (33639248)\n-5F8CE5 Created Zip Spec      14 (20) '2.0'\n-5F8CE6 Created OS            00 (0) 'MS-DOS'\n-5F8CE7 Extract Zip Spec      14 (20) '2.0'\n-5F8CE8 Extract OS            00 (0) 'MS-DOS'\n-5F8CE9 General Purpose Flag  0000 (0)\n-5F8CEB Compression Method    0000 (0) 'Stored'\n-5F8CED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8CF1 CRC                   00000000 (0)\n-5F8CF5 Compressed Size       00000000 (0)\n-5F8CF9 Uncompressed Size     00000000 (0)\n-5F8CFD Filename Length       0058 (88)\n-5F8CFF Extra Length          0009 (9)\n-5F8D01 Comment Length        0000 (0)\n-5F8D03 Disk Start            0000 (0)\n-5F8D05 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8D07 Ext File Attributes   00000000 (0)\n-5F8D0B Local Header Offset   000D25EC (861676)\n-5F8D0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8D0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8D67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8D69   Length              0005 (5)\n-5F8D6B   Flags               01 (1) 'Modification'\n-5F8D6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8D70 CENTRAL HEADER #351   02014B50 (33639248)\n-5F8D74 Created Zip Spec      14 (20) '2.0'\n-5F8D75 Created OS            00 (0) 'MS-DOS'\n-5F8D76 Extract Zip Spec      14 (20) '2.0'\n-5F8D77 Extract OS            00 (0) 'MS-DOS'\n-5F8D78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8D7A Compression Method    0000 (0) 'Stored'\n-5F8D7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8D80 CRC                   937D5C9D (2474466461)\n-5F8D84 Compressed Size       00000F43 (3907)\n-5F8D88 Uncompressed Size     00000F43 (3907)\n-5F8D8C Filename Length       006E (110)\n-5F8D8E Extra Length          0009 (9)\n-5F8D90 Comment Length        0000 (0)\n-5F8D92 Disk Start            0000 (0)\n-5F8D94 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8D96 Ext File Attributes   00000000 (0)\n-5F8D9A Local Header Offset   000D266B (861803)\n-5F8D9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8D9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8E0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8E0E   Length              0005 (5)\n-5F8E10   Flags               01 (1) 'Modification'\n-5F8E11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8E15 CENTRAL HEADER #352   02014B50 (33639248)\n-5F8E19 Created Zip Spec      14 (20) '2.0'\n-5F8E1A Created OS            00 (0) 'MS-DOS'\n-5F8E1B Extract Zip Spec      14 (20) '2.0'\n-5F8E1C Extract OS            00 (0) 'MS-DOS'\n-5F8E1D General Purpose Flag  0000 (0)\n-5F8E1F Compression Method    0000 (0) 'Stored'\n-5F8E21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8E25 CRC                   00000000 (0)\n-5F8E29 Compressed Size       00000000 (0)\n-5F8E2D Uncompressed Size     00000000 (0)\n-5F8E31 Filename Length       0025 (37)\n-5F8E33 Extra Length          0009 (9)\n-5F8E35 Comment Length        0000 (0)\n-5F8E37 Disk Start            0000 (0)\n-5F8E39 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8E3B Ext File Attributes   00000000 (0)\n-5F8E3F Local Header Offset   000D3653 (865875)\n-5F8E43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8E43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8E68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8E6A   Length              0005 (5)\n-5F8E6C   Flags               01 (1) 'Modification'\n-5F8E6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8E71 CENTRAL HEADER #353   02014B50 (33639248)\n-5F8E75 Created Zip Spec      14 (20) '2.0'\n-5F8E76 Created OS            00 (0) 'MS-DOS'\n-5F8E77 Extract Zip Spec      14 (20) '2.0'\n-5F8E78 Extract OS            00 (0) 'MS-DOS'\n-5F8E79 General Purpose Flag  0000 (0)\n-5F8E7B Compression Method    0000 (0) 'Stored'\n-5F8E7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8E81 CRC                   00000000 (0)\n-5F8E85 Compressed Size       00000000 (0)\n-5F8E89 Uncompressed Size     00000000 (0)\n-5F8E8D Filename Length       002C (44)\n-5F8E8F Extra Length          0009 (9)\n-5F8E91 Comment Length        0000 (0)\n-5F8E93 Disk Start            0000 (0)\n-5F8E95 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8E97 Ext File Attributes   00000000 (0)\n-5F8E9B Local Header Offset   000D369F (865951)\n-5F8E9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8E9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8ECB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8ECD   Length              0005 (5)\n-5F8ECF   Flags               01 (1) 'Modification'\n-5F8ED0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8ED4 CENTRAL HEADER #354   02014B50 (33639248)\n-5F8ED8 Created Zip Spec      14 (20) '2.0'\n-5F8ED9 Created OS            00 (0) 'MS-DOS'\n-5F8EDA Extract Zip Spec      14 (20) '2.0'\n-5F8EDB Extract OS            00 (0) 'MS-DOS'\n-5F8EDC General Purpose Flag  0000 (0)\n-5F8EDE Compression Method    0000 (0) 'Stored'\n-5F8EE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8EE4 CRC                   00000000 (0)\n-5F8EE8 Compressed Size       00000000 (0)\n-5F8EEC Uncompressed Size     00000000 (0)\n-5F8EF0 Filename Length       005C (92)\n-5F8EF2 Extra Length          0009 (9)\n-5F8EF4 Comment Length        0000 (0)\n-5F8EF6 Disk Start            0000 (0)\n-5F8EF8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8EFA Ext File Attributes   00000000 (0)\n-5F8EFE Local Header Offset   000D36F2 (866034)\n-5F8F02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8F02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F8F5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F8F60   Length              0005 (5)\n-5F8F62   Flags               01 (1) 'Modification'\n-5F8F63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F8F67 CENTRAL HEADER #355   02014B50 (33639248)\n-5F8F6B Created Zip Spec      14 (20) '2.0'\n-5F8F6C Created OS            00 (0) 'MS-DOS'\n-5F8F6D Extract Zip Spec      14 (20) '2.0'\n-5F8F6E Extract OS            00 (0) 'MS-DOS'\n-5F8F6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F8F71 Compression Method    0000 (0) 'Stored'\n-5F8F73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F8F77 CRC                   335CA1CD (861708749)\n-5F8F7B Compressed Size       00000E9A (3738)\n-5F8F7F Uncompressed Size     00000E9A (3738)\n-5F8F83 Filename Length       0072 (114)\n-5F8F85 Extra Length          0009 (9)\n-5F8F87 Comment Length        0000 (0)\n-5F8F89 Disk Start            0000 (0)\n-5F8F8B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F8F8D Ext File Attributes   00000000 (0)\n-5F8F91 Local Header Offset   000D3775 (866165)\n-5F8F95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8F95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9007 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9009   Length              0005 (5)\n-5F900B   Flags               01 (1) 'Modification'\n-5F900C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9010 CENTRAL HEADER #356   02014B50 (33639248)\n-5F9014 Created Zip Spec      14 (20) '2.0'\n-5F9015 Created OS            00 (0) 'MS-DOS'\n-5F9016 Extract Zip Spec      14 (20) '2.0'\n-5F9017 Extract OS            00 (0) 'MS-DOS'\n-5F9018 General Purpose Flag  0000 (0)\n-5F901A Compression Method    0000 (0) 'Stored'\n-5F901C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9020 CRC                   00000000 (0)\n-5F9024 Compressed Size       00000000 (0)\n-5F9028 Uncompressed Size     00000000 (0)\n-5F902C Filename Length       0068 (104)\n-5F902E Extra Length          0009 (9)\n-5F9030 Comment Length        0000 (0)\n-5F9032 Disk Start            0000 (0)\n-5F9034 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9036 Ext File Attributes   00000000 (0)\n-5F903A Local Header Offset   000D46B8 (870072)\n-5F903E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F903E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F90A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F90A8   Length              0005 (5)\n-5F90AA   Flags               01 (1) 'Modification'\n-5F90AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F90AF CENTRAL HEADER #357   02014B50 (33639248)\n-5F90B3 Created Zip Spec      14 (20) '2.0'\n-5F90B4 Created OS            00 (0) 'MS-DOS'\n-5F90B5 Extract Zip Spec      14 (20) '2.0'\n-5F90B6 Extract OS            00 (0) 'MS-DOS'\n-5F90B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F90B9 Compression Method    0000 (0) 'Stored'\n-5F90BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F90BF CRC                   3EE7FDDD (1055391197)\n-5F90C3 Compressed Size       00001059 (4185)\n-5F90C7 Uncompressed Size     00001059 (4185)\n-5F90CB Filename Length       007E (126)\n-5F90CD Extra Length          0009 (9)\n-5F90CF Comment Length        0000 (0)\n-5F90D1 Disk Start            0000 (0)\n-5F90D3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F90D5 Ext File Attributes   00000000 (0)\n-5F90D9 Local Header Offset   000D4747 (870215)\n-5F90DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F90DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F915B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F915D   Length              0005 (5)\n-5F915F   Flags               01 (1) 'Modification'\n-5F9160   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9164 CENTRAL HEADER #358   02014B50 (33639248)\n-5F9168 Created Zip Spec      14 (20) '2.0'\n-5F9169 Created OS            00 (0) 'MS-DOS'\n-5F916A Extract Zip Spec      14 (20) '2.0'\n-5F916B Extract OS            00 (0) 'MS-DOS'\n-5F916C General Purpose Flag  0000 (0)\n-5F916E Compression Method    0000 (0) 'Stored'\n-5F9170 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9174 CRC                   00000000 (0)\n-5F9178 Compressed Size       00000000 (0)\n-5F917C Uncompressed Size     00000000 (0)\n-5F9180 Filename Length       0025 (37)\n-5F9182 Extra Length          0009 (9)\n-5F9184 Comment Length        0000 (0)\n-5F9186 Disk Start            0000 (0)\n-5F9188 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F918A Ext File Attributes   00000000 (0)\n-5F918E Local Header Offset   000D5855 (874581)\n-5F9192 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9192: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F91B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F91B9   Length              0005 (5)\n-5F91BB   Flags               01 (1) 'Modification'\n-5F91BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F91C0 CENTRAL HEADER #359   02014B50 (33639248)\n-5F91C4 Created Zip Spec      14 (20) '2.0'\n-5F91C5 Created OS            00 (0) 'MS-DOS'\n-5F91C6 Extract Zip Spec      14 (20) '2.0'\n-5F91C7 Extract OS            00 (0) 'MS-DOS'\n-5F91C8 General Purpose Flag  0000 (0)\n-5F91CA Compression Method    0000 (0) 'Stored'\n-5F91CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F91D0 CRC                   00000000 (0)\n-5F91D4 Compressed Size       00000000 (0)\n-5F91D8 Uncompressed Size     00000000 (0)\n-5F91DC Filename Length       002C (44)\n-5F91DE Extra Length          0009 (9)\n-5F91E0 Comment Length        0000 (0)\n-5F91E2 Disk Start            0000 (0)\n-5F91E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F91E6 Ext File Attributes   00000000 (0)\n-5F91EA Local Header Offset   000D58A1 (874657)\n-5F91EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F91EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F921A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F921C   Length              0005 (5)\n-5F921E   Flags               01 (1) 'Modification'\n-5F921F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9223 CENTRAL HEADER #360   02014B50 (33639248)\n-5F9227 Created Zip Spec      14 (20) '2.0'\n-5F9228 Created OS            00 (0) 'MS-DOS'\n-5F9229 Extract Zip Spec      14 (20) '2.0'\n-5F922A Extract OS            00 (0) 'MS-DOS'\n-5F922B General Purpose Flag  0000 (0)\n-5F922D Compression Method    0000 (0) 'Stored'\n-5F922F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9233 CRC                   00000000 (0)\n-5F9237 Compressed Size       00000000 (0)\n-5F923B Uncompressed Size     00000000 (0)\n-5F923F Filename Length       005A (90)\n-5F9241 Extra Length          0009 (9)\n-5F9243 Comment Length        0000 (0)\n-5F9245 Disk Start            0000 (0)\n-5F9247 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9249 Ext File Attributes   00000000 (0)\n-5F924D Local Header Offset   000D58F4 (874740)\n-5F9251 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F7AB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7AB6   Length              0005 (5)\n+5F7AB8   Flags               01 (1) 'Modification'\n+5F7AB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7ABD CENTRAL HEADER #232   02014B50 (33639248)\n+5F7AC1 Created Zip Spec      14 (20) '2.0'\n+5F7AC2 Created OS            00 (0) 'MS-DOS'\n+5F7AC3 Extract Zip Spec      14 (20) '2.0'\n+5F7AC4 Extract OS            00 (0) 'MS-DOS'\n+5F7AC5 General Purpose Flag  0000 (0)\n+5F7AC7 Compression Method    0000 (0) 'Stored'\n+5F7AC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7ACD CRC                   00000000 (0)\n+5F7AD1 Compressed Size       00000000 (0)\n+5F7AD5 Uncompressed Size     00000000 (0)\n+5F7AD9 Filename Length       0068 (104)\n+5F7ADB Extra Length          0009 (9)\n+5F7ADD Comment Length        0000 (0)\n+5F7ADF Disk Start            0000 (0)\n+5F7AE1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7AE3 Ext File Attributes   00000000 (0)\n+5F7AE7 Local Header Offset   000839F6 (539126)\n+5F7AEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7AEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7B53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7B55   Length              0005 (5)\n+5F7B57   Flags               01 (1) 'Modification'\n+5F7B58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7B5C CENTRAL HEADER #233   02014B50 (33639248)\n+5F7B60 Created Zip Spec      14 (20) '2.0'\n+5F7B61 Created OS            00 (0) 'MS-DOS'\n+5F7B62 Extract Zip Spec      14 (20) '2.0'\n+5F7B63 Extract OS            00 (0) 'MS-DOS'\n+5F7B64 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7B66 Compression Method    0000 (0) 'Stored'\n+5F7B68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7B6C CRC                   23E20FDA (602017754)\n+5F7B70 Compressed Size       00002C4A (11338)\n+5F7B74 Uncompressed Size     00002C4A (11338)\n+5F7B78 Filename Length       007E (126)\n+5F7B7A Extra Length          0009 (9)\n+5F7B7C Comment Length        0000 (0)\n+5F7B7E Disk Start            0000 (0)\n+5F7B80 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7B82 Ext File Attributes   00000000 (0)\n+5F7B86 Local Header Offset   00083A85 (539269)\n+5F7B8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7B8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7C08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7C0A   Length              0005 (5)\n+5F7C0C   Flags               01 (1) 'Modification'\n+5F7C0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7C11 CENTRAL HEADER #234   02014B50 (33639248)\n+5F7C15 Created Zip Spec      14 (20) '2.0'\n+5F7C16 Created OS            00 (0) 'MS-DOS'\n+5F7C17 Extract Zip Spec      14 (20) '2.0'\n+5F7C18 Extract OS            00 (0) 'MS-DOS'\n+5F7C19 General Purpose Flag  0000 (0)\n+5F7C1B Compression Method    0000 (0) 'Stored'\n+5F7C1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7C21 CRC                   00000000 (0)\n+5F7C25 Compressed Size       00000000 (0)\n+5F7C29 Uncompressed Size     00000000 (0)\n+5F7C2D Filename Length       0023 (35)\n+5F7C2F Extra Length          0009 (9)\n+5F7C31 Comment Length        0000 (0)\n+5F7C33 Disk Start            0000 (0)\n+5F7C35 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7C37 Ext File Attributes   00000000 (0)\n+5F7C3B Local Header Offset   00086784 (550788)\n+5F7C3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7C3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7C62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7C64   Length              0005 (5)\n+5F7C66   Flags               01 (1) 'Modification'\n+5F7C67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7C6B CENTRAL HEADER #235   02014B50 (33639248)\n+5F7C6F Created Zip Spec      14 (20) '2.0'\n+5F7C70 Created OS            00 (0) 'MS-DOS'\n+5F7C71 Extract Zip Spec      14 (20) '2.0'\n+5F7C72 Extract OS            00 (0) 'MS-DOS'\n+5F7C73 General Purpose Flag  0000 (0)\n+5F7C75 Compression Method    0000 (0) 'Stored'\n+5F7C77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7C7B CRC                   00000000 (0)\n+5F7C7F Compressed Size       00000000 (0)\n+5F7C83 Uncompressed Size     00000000 (0)\n+5F7C87 Filename Length       002A (42)\n+5F7C89 Extra Length          0009 (9)\n+5F7C8B Comment Length        0000 (0)\n+5F7C8D Disk Start            0000 (0)\n+5F7C8F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7C91 Ext File Attributes   00000000 (0)\n+5F7C95 Local Header Offset   000867CE (550862)\n+5F7C99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7C99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7CC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7CC5   Length              0005 (5)\n+5F7CC7   Flags               01 (1) 'Modification'\n+5F7CC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7CCC CENTRAL HEADER #236   02014B50 (33639248)\n+5F7CD0 Created Zip Spec      14 (20) '2.0'\n+5F7CD1 Created OS            00 (0) 'MS-DOS'\n+5F7CD2 Extract Zip Spec      14 (20) '2.0'\n+5F7CD3 Extract OS            00 (0) 'MS-DOS'\n+5F7CD4 General Purpose Flag  0000 (0)\n+5F7CD6 Compression Method    0000 (0) 'Stored'\n+5F7CD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7CDC CRC                   00000000 (0)\n+5F7CE0 Compressed Size       00000000 (0)\n+5F7CE4 Uncompressed Size     00000000 (0)\n+5F7CE8 Filename Length       0052 (82)\n+5F7CEA Extra Length          0009 (9)\n+5F7CEC Comment Length        0000 (0)\n+5F7CEE Disk Start            0000 (0)\n+5F7CF0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7CF2 Ext File Attributes   00000000 (0)\n+5F7CF6 Local Header Offset   0008681F (550943)\n+5F7CFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7CFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7D4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7D4E   Length              0005 (5)\n+5F7D50   Flags               01 (1) 'Modification'\n+5F7D51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7D55 CENTRAL HEADER #237   02014B50 (33639248)\n+5F7D59 Created Zip Spec      14 (20) '2.0'\n+5F7D5A Created OS            00 (0) 'MS-DOS'\n+5F7D5B Extract Zip Spec      14 (20) '2.0'\n+5F7D5C Extract OS            00 (0) 'MS-DOS'\n+5F7D5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7D5F Compression Method    0000 (0) 'Stored'\n+5F7D61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7D65 CRC                   90D14EC3 (2429636291)\n+5F7D69 Compressed Size       00001ABD (6845)\n+5F7D6D Uncompressed Size     00001ABD (6845)\n+5F7D71 Filename Length       0068 (104)\n+5F7D73 Extra Length          0009 (9)\n+5F7D75 Comment Length        0000 (0)\n+5F7D77 Disk Start            0000 (0)\n+5F7D79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7D7B Ext File Attributes   00000000 (0)\n+5F7D7F Local Header Offset   00086898 (551064)\n+5F7D83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7D83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7DEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7DED   Length              0005 (5)\n+5F7DEF   Flags               01 (1) 'Modification'\n+5F7DF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7DF4 CENTRAL HEADER #238   02014B50 (33639248)\n+5F7DF8 Created Zip Spec      14 (20) '2.0'\n+5F7DF9 Created OS            00 (0) 'MS-DOS'\n+5F7DFA Extract Zip Spec      14 (20) '2.0'\n+5F7DFB Extract OS            00 (0) 'MS-DOS'\n+5F7DFC General Purpose Flag  0000 (0)\n+5F7DFE Compression Method    0000 (0) 'Stored'\n+5F7E00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7E04 CRC                   00000000 (0)\n+5F7E08 Compressed Size       00000000 (0)\n+5F7E0C Uncompressed Size     00000000 (0)\n+5F7E10 Filename Length       002E (46)\n+5F7E12 Extra Length          0009 (9)\n+5F7E14 Comment Length        0000 (0)\n+5F7E16 Disk Start            0000 (0)\n+5F7E18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7E1A Ext File Attributes   00000000 (0)\n+5F7E1E Local Header Offset   000883F4 (558068)\n+5F7E22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7E22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7E50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7E52   Length              0005 (5)\n+5F7E54   Flags               01 (1) 'Modification'\n+5F7E55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7E59 CENTRAL HEADER #239   02014B50 (33639248)\n+5F7E5D Created Zip Spec      14 (20) '2.0'\n+5F7E5E Created OS            00 (0) 'MS-DOS'\n+5F7E5F Extract Zip Spec      14 (20) '2.0'\n+5F7E60 Extract OS            00 (0) 'MS-DOS'\n+5F7E61 General Purpose Flag  0000 (0)\n+5F7E63 Compression Method    0000 (0) 'Stored'\n+5F7E65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7E69 CRC                   00000000 (0)\n+5F7E6D Compressed Size       00000000 (0)\n+5F7E71 Uncompressed Size     00000000 (0)\n+5F7E75 Filename Length       0035 (53)\n+5F7E77 Extra Length          0009 (9)\n+5F7E79 Comment Length        0000 (0)\n+5F7E7B Disk Start            0000 (0)\n+5F7E7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7E7F Ext File Attributes   00000000 (0)\n+5F7E83 Local Header Offset   00088449 (558153)\n+5F7E87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7E87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7EBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7EBE   Length              0005 (5)\n+5F7EC0   Flags               01 (1) 'Modification'\n+5F7EC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7EC5 CENTRAL HEADER #240   02014B50 (33639248)\n+5F7EC9 Created Zip Spec      14 (20) '2.0'\n+5F7ECA Created OS            00 (0) 'MS-DOS'\n+5F7ECB Extract Zip Spec      14 (20) '2.0'\n+5F7ECC Extract OS            00 (0) 'MS-DOS'\n+5F7ECD General Purpose Flag  0000 (0)\n+5F7ECF Compression Method    0000 (0) 'Stored'\n+5F7ED1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7ED5 CRC                   00000000 (0)\n+5F7ED9 Compressed Size       00000000 (0)\n+5F7EDD Uncompressed Size     00000000 (0)\n+5F7EE1 Filename Length       005E (94)\n+5F7EE3 Extra Length          0009 (9)\n+5F7EE5 Comment Length        0000 (0)\n+5F7EE7 Disk Start            0000 (0)\n+5F7EE9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7EEB Ext File Attributes   00000000 (0)\n+5F7EEF Local Header Offset   000884A5 (558245)\n+5F7EF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7EF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7F51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7F53   Length              0005 (5)\n+5F7F55   Flags               01 (1) 'Modification'\n+5F7F56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F7F5A CENTRAL HEADER #241   02014B50 (33639248)\n+5F7F5E Created Zip Spec      14 (20) '2.0'\n+5F7F5F Created OS            00 (0) 'MS-DOS'\n+5F7F60 Extract Zip Spec      14 (20) '2.0'\n+5F7F61 Extract OS            00 (0) 'MS-DOS'\n+5F7F62 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F7F64 Compression Method    0000 (0) 'Stored'\n+5F7F66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F7F6A CRC                   F19E6303 (4053689091)\n+5F7F6E Compressed Size       00000ED8 (3800)\n+5F7F72 Uncompressed Size     00000ED8 (3800)\n+5F7F76 Filename Length       0074 (116)\n+5F7F78 Extra Length          0009 (9)\n+5F7F7A Comment Length        0000 (0)\n+5F7F7C Disk Start            0000 (0)\n+5F7F7E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F7F80 Ext File Attributes   00000000 (0)\n+5F7F84 Local Header Offset   0008852A (558378)\n+5F7F88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F7F88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F7FFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F7FFE   Length              0005 (5)\n+5F8000   Flags               01 (1) 'Modification'\n+5F8001   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8005 CENTRAL HEADER #242   02014B50 (33639248)\n+5F8009 Created Zip Spec      14 (20) '2.0'\n+5F800A Created OS            00 (0) 'MS-DOS'\n+5F800B Extract Zip Spec      14 (20) '2.0'\n+5F800C Extract OS            00 (0) 'MS-DOS'\n+5F800D General Purpose Flag  0000 (0)\n+5F800F Compression Method    0000 (0) 'Stored'\n+5F8011 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8015 CRC                   00000000 (0)\n+5F8019 Compressed Size       00000000 (0)\n+5F801D Uncompressed Size     00000000 (0)\n+5F8021 Filename Length       0064 (100)\n+5F8023 Extra Length          0009 (9)\n+5F8025 Comment Length        0000 (0)\n+5F8027 Disk Start            0000 (0)\n+5F8029 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F802B Ext File Attributes   00000000 (0)\n+5F802F Local Header Offset   000894AD (562349)\n+5F8033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8097 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8099   Length              0005 (5)\n+5F809B   Flags               01 (1) 'Modification'\n+5F809C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F80A0 CENTRAL HEADER #243   02014B50 (33639248)\n+5F80A4 Created Zip Spec      14 (20) '2.0'\n+5F80A5 Created OS            00 (0) 'MS-DOS'\n+5F80A6 Extract Zip Spec      14 (20) '2.0'\n+5F80A7 Extract OS            00 (0) 'MS-DOS'\n+5F80A8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F80AA Compression Method    0000 (0) 'Stored'\n+5F80AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F80B0 CRC                   51B4F745 (1370814277)\n+5F80B4 Compressed Size       000016D7 (5847)\n+5F80B8 Uncompressed Size     000016D7 (5847)\n+5F80BC Filename Length       007A (122)\n+5F80BE Extra Length          0009 (9)\n+5F80C0 Comment Length        0000 (0)\n+5F80C2 Disk Start            0000 (0)\n+5F80C4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F80C6 Ext File Attributes   00000000 (0)\n+5F80CA Local Header Offset   00089538 (562488)\n+5F80CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F80CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8148 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F814A   Length              0005 (5)\n+5F814C   Flags               01 (1) 'Modification'\n+5F814D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8151 CENTRAL HEADER #244   02014B50 (33639248)\n+5F8155 Created Zip Spec      14 (20) '2.0'\n+5F8156 Created OS            00 (0) 'MS-DOS'\n+5F8157 Extract Zip Spec      14 (20) '2.0'\n+5F8158 Extract OS            00 (0) 'MS-DOS'\n+5F8159 General Purpose Flag  0000 (0)\n+5F815B Compression Method    0000 (0) 'Stored'\n+5F815D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8161 CRC                   00000000 (0)\n+5F8165 Compressed Size       00000000 (0)\n+5F8169 Uncompressed Size     00000000 (0)\n+5F816D Filename Length       0026 (38)\n+5F816F Extra Length          0009 (9)\n+5F8171 Comment Length        0000 (0)\n+5F8173 Disk Start            0000 (0)\n+5F8175 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8177 Ext File Attributes   00000000 (0)\n+5F817B Local Header Offset   0008ACC0 (568512)\n+5F817F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F817F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F81A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F81A7   Length              0005 (5)\n+5F81A9   Flags               01 (1) 'Modification'\n+5F81AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F81AE CENTRAL HEADER #245   02014B50 (33639248)\n+5F81B2 Created Zip Spec      14 (20) '2.0'\n+5F81B3 Created OS            00 (0) 'MS-DOS'\n+5F81B4 Extract Zip Spec      14 (20) '2.0'\n+5F81B5 Extract OS            00 (0) 'MS-DOS'\n+5F81B6 General Purpose Flag  0000 (0)\n+5F81B8 Compression Method    0000 (0) 'Stored'\n+5F81BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F81BE CRC                   00000000 (0)\n+5F81C2 Compressed Size       00000000 (0)\n+5F81C6 Uncompressed Size     00000000 (0)\n+5F81CA Filename Length       002D (45)\n+5F81CC Extra Length          0009 (9)\n+5F81CE Comment Length        0000 (0)\n+5F81D0 Disk Start            0000 (0)\n+5F81D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F81D4 Ext File Attributes   00000000 (0)\n+5F81D8 Local Header Offset   0008AD0D (568589)\n+5F81DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F81DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8209 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F820B   Length              0005 (5)\n+5F820D   Flags               01 (1) 'Modification'\n+5F820E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8212 CENTRAL HEADER #246   02014B50 (33639248)\n+5F8216 Created Zip Spec      14 (20) '2.0'\n+5F8217 Created OS            00 (0) 'MS-DOS'\n+5F8218 Extract Zip Spec      14 (20) '2.0'\n+5F8219 Extract OS            00 (0) 'MS-DOS'\n+5F821A General Purpose Flag  0000 (0)\n+5F821C Compression Method    0000 (0) 'Stored'\n+5F821E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8222 CRC                   00000000 (0)\n+5F8226 Compressed Size       00000000 (0)\n+5F822A Uncompressed Size     00000000 (0)\n+5F822E Filename Length       005C (92)\n+5F8230 Extra Length          0009 (9)\n+5F8232 Comment Length        0000 (0)\n+5F8234 Disk Start            0000 (0)\n+5F8236 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8238 Ext File Attributes   00000000 (0)\n+5F823C Local Header Offset   0008AD61 (568673)\n+5F8240 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8240: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F829C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F829E   Length              0005 (5)\n+5F82A0   Flags               01 (1) 'Modification'\n+5F82A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F82A5 CENTRAL HEADER #247   02014B50 (33639248)\n+5F82A9 Created Zip Spec      14 (20) '2.0'\n+5F82AA Created OS            00 (0) 'MS-DOS'\n+5F82AB Extract Zip Spec      14 (20) '2.0'\n+5F82AC Extract OS            00 (0) 'MS-DOS'\n+5F82AD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F82AF Compression Method    0000 (0) 'Stored'\n+5F82B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F82B5 CRC                   357DA477 (897426551)\n+5F82B9 Compressed Size       000006C6 (1734)\n+5F82BD Uncompressed Size     000006C6 (1734)\n+5F82C1 Filename Length       0072 (114)\n+5F82C3 Extra Length          0009 (9)\n+5F82C5 Comment Length        0000 (0)\n+5F82C7 Disk Start            0000 (0)\n+5F82C9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F82CB Ext File Attributes   00000000 (0)\n+5F82CF Local Header Offset   0008ADE4 (568804)\n+5F82D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F82D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8345 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8347   Length              0005 (5)\n+5F8349   Flags               01 (1) 'Modification'\n+5F834A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F834E CENTRAL HEADER #248   02014B50 (33639248)\n+5F8352 Created Zip Spec      14 (20) '2.0'\n+5F8353 Created OS            00 (0) 'MS-DOS'\n+5F8354 Extract Zip Spec      14 (20) '2.0'\n+5F8355 Extract OS            00 (0) 'MS-DOS'\n+5F8356 General Purpose Flag  0000 (0)\n+5F8358 Compression Method    0000 (0) 'Stored'\n+5F835A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F835E CRC                   00000000 (0)\n+5F8362 Compressed Size       00000000 (0)\n+5F8366 Uncompressed Size     00000000 (0)\n+5F836A Filename Length       0059 (89)\n+5F836C Extra Length          0009 (9)\n+5F836E Comment Length        0000 (0)\n+5F8370 Disk Start            0000 (0)\n+5F8372 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8374 Ext File Attributes   00000000 (0)\n+5F8378 Local Header Offset   0008B553 (570707)\n+5F837C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F837C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F83D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F83D7   Length              0005 (5)\n+5F83D9   Flags               01 (1) 'Modification'\n+5F83DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F83DE CENTRAL HEADER #249   02014B50 (33639248)\n+5F83E2 Created Zip Spec      14 (20) '2.0'\n+5F83E3 Created OS            00 (0) 'MS-DOS'\n+5F83E4 Extract Zip Spec      14 (20) '2.0'\n+5F83E5 Extract OS            00 (0) 'MS-DOS'\n+5F83E6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F83E8 Compression Method    0000 (0) 'Stored'\n+5F83EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F83EE CRC                   F9CAC97B (4190816635)\n+5F83F2 Compressed Size       000009BC (2492)\n+5F83F6 Uncompressed Size     000009BC (2492)\n+5F83FA Filename Length       006F (111)\n+5F83FC Extra Length          0009 (9)\n+5F83FE Comment Length        0000 (0)\n+5F8400 Disk Start            0000 (0)\n+5F8402 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8404 Ext File Attributes   00000000 (0)\n+5F8408 Local Header Offset   0008B5D3 (570835)\n+5F840C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F840C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F847B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F847D   Length              0005 (5)\n+5F847F   Flags               01 (1) 'Modification'\n+5F8480   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8484 CENTRAL HEADER #250   02014B50 (33639248)\n+5F8488 Created Zip Spec      14 (20) '2.0'\n+5F8489 Created OS            00 (0) 'MS-DOS'\n+5F848A Extract Zip Spec      14 (20) '2.0'\n+5F848B Extract OS            00 (0) 'MS-DOS'\n+5F848C General Purpose Flag  0000 (0)\n+5F848E Compression Method    0000 (0) 'Stored'\n+5F8490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8494 CRC                   00000000 (0)\n+5F8498 Compressed Size       00000000 (0)\n+5F849C Uncompressed Size     00000000 (0)\n+5F84A0 Filename Length       005F (95)\n+5F84A2 Extra Length          0009 (9)\n+5F84A4 Comment Length        0000 (0)\n+5F84A6 Disk Start            0000 (0)\n+5F84A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F84AA Ext File Attributes   00000000 (0)\n+5F84AE Local Header Offset   0008C035 (573493)\n+5F84B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F84B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8511 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8513   Length              0005 (5)\n+5F8515   Flags               01 (1) 'Modification'\n+5F8516   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F851A CENTRAL HEADER #251   02014B50 (33639248)\n+5F851E Created Zip Spec      14 (20) '2.0'\n+5F851F Created OS            00 (0) 'MS-DOS'\n+5F8520 Extract Zip Spec      14 (20) '2.0'\n+5F8521 Extract OS            00 (0) 'MS-DOS'\n+5F8522 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8524 Compression Method    0000 (0) 'Stored'\n+5F8526 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F852A CRC                   9DEB8C8B (2649459851)\n+5F852E Compressed Size       00000A07 (2567)\n+5F8532 Uncompressed Size     00000A07 (2567)\n+5F8536 Filename Length       0075 (117)\n+5F8538 Extra Length          0009 (9)\n+5F853A Comment Length        0000 (0)\n+5F853C Disk Start            0000 (0)\n+5F853E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8540 Ext File Attributes   00000000 (0)\n+5F8544 Local Header Offset   0008C0BB (573627)\n+5F8548 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8548: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F85BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F85BF   Length              0005 (5)\n+5F85C1   Flags               01 (1) 'Modification'\n+5F85C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F85C6 CENTRAL HEADER #252   02014B50 (33639248)\n+5F85CA Created Zip Spec      14 (20) '2.0'\n+5F85CB Created OS            00 (0) 'MS-DOS'\n+5F85CC Extract Zip Spec      14 (20) '2.0'\n+5F85CD Extract OS            00 (0) 'MS-DOS'\n+5F85CE General Purpose Flag  0000 (0)\n+5F85D0 Compression Method    0000 (0) 'Stored'\n+5F85D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F85D6 CRC                   00000000 (0)\n+5F85DA Compressed Size       00000000 (0)\n+5F85DE Uncompressed Size     00000000 (0)\n+5F85E2 Filename Length       0059 (89)\n+5F85E4 Extra Length          0009 (9)\n+5F85E6 Comment Length        0000 (0)\n+5F85E8 Disk Start            0000 (0)\n+5F85EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F85EC Ext File Attributes   00000000 (0)\n+5F85F0 Local Header Offset   0008CB6E (576366)\n+5F85F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F85F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F864D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F864F   Length              0005 (5)\n+5F8651   Flags               01 (1) 'Modification'\n+5F8652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8656 CENTRAL HEADER #253   02014B50 (33639248)\n+5F865A Created Zip Spec      14 (20) '2.0'\n+5F865B Created OS            00 (0) 'MS-DOS'\n+5F865C Extract Zip Spec      14 (20) '2.0'\n+5F865D Extract OS            00 (0) 'MS-DOS'\n+5F865E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8660 Compression Method    0000 (0) 'Stored'\n+5F8662 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8666 CRC                   85B17459 (2242999385)\n+5F866A Compressed Size       00000DDE (3550)\n+5F866E Uncompressed Size     00000DDE (3550)\n+5F8672 Filename Length       006F (111)\n+5F8674 Extra Length          0009 (9)\n+5F8676 Comment Length        0000 (0)\n+5F8678 Disk Start            0000 (0)\n+5F867A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F867C Ext File Attributes   00000000 (0)\n+5F8680 Local Header Offset   0008CBEE (576494)\n+5F8684 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8684: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F86F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F86F5   Length              0005 (5)\n+5F86F7   Flags               01 (1) 'Modification'\n+5F86F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F86FC CENTRAL HEADER #254   02014B50 (33639248)\n+5F8700 Created Zip Spec      14 (20) '2.0'\n+5F8701 Created OS            00 (0) 'MS-DOS'\n+5F8702 Extract Zip Spec      14 (20) '2.0'\n+5F8703 Extract OS            00 (0) 'MS-DOS'\n+5F8704 General Purpose Flag  0000 (0)\n+5F8706 Compression Method    0000 (0) 'Stored'\n+5F8708 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F870C CRC                   00000000 (0)\n+5F8710 Compressed Size       00000000 (0)\n+5F8714 Uncompressed Size     00000000 (0)\n+5F8718 Filename Length       0064 (100)\n+5F871A Extra Length          0009 (9)\n+5F871C Comment Length        0000 (0)\n+5F871E Disk Start            0000 (0)\n+5F8720 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8722 Ext File Attributes   00000000 (0)\n+5F8726 Local Header Offset   0008DA72 (580210)\n+5F872A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F872A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F878E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8790   Length              0005 (5)\n+5F8792   Flags               01 (1) 'Modification'\n+5F8793   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8797 CENTRAL HEADER #255   02014B50 (33639248)\n+5F879B Created Zip Spec      14 (20) '2.0'\n+5F879C Created OS            00 (0) 'MS-DOS'\n+5F879D Extract Zip Spec      14 (20) '2.0'\n+5F879E Extract OS            00 (0) 'MS-DOS'\n+5F879F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F87A1 Compression Method    0000 (0) 'Stored'\n+5F87A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F87A7 CRC                   9C229073 (2619510899)\n+5F87AB Compressed Size       000005CF (1487)\n+5F87AF Uncompressed Size     000005CF (1487)\n+5F87B3 Filename Length       007A (122)\n+5F87B5 Extra Length          0009 (9)\n+5F87B7 Comment Length        0000 (0)\n+5F87B9 Disk Start            0000 (0)\n+5F87BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F87BD Ext File Attributes   00000000 (0)\n+5F87C1 Local Header Offset   0008DAFD (580349)\n+5F87C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F87C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F883F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8841   Length              0005 (5)\n+5F8843   Flags               01 (1) 'Modification'\n+5F8844   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8848 CENTRAL HEADER #256   02014B50 (33639248)\n+5F884C Created Zip Spec      14 (20) '2.0'\n+5F884D Created OS            00 (0) 'MS-DOS'\n+5F884E Extract Zip Spec      14 (20) '2.0'\n+5F884F Extract OS            00 (0) 'MS-DOS'\n+5F8850 General Purpose Flag  0000 (0)\n+5F8852 Compression Method    0000 (0) 'Stored'\n+5F8854 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8858 CRC                   00000000 (0)\n+5F885C Compressed Size       00000000 (0)\n+5F8860 Uncompressed Size     00000000 (0)\n+5F8864 Filename Length       0064 (100)\n+5F8866 Extra Length          0009 (9)\n+5F8868 Comment Length        0000 (0)\n+5F886A Disk Start            0000 (0)\n+5F886C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F886E Ext File Attributes   00000000 (0)\n+5F8872 Local Header Offset   0008E17D (582013)\n+5F8876 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8876: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F88DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F88DC   Length              0005 (5)\n+5F88DE   Flags               01 (1) 'Modification'\n+5F88DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F88E3 CENTRAL HEADER #257   02014B50 (33639248)\n+5F88E7 Created Zip Spec      14 (20) '2.0'\n+5F88E8 Created OS            00 (0) 'MS-DOS'\n+5F88E9 Extract Zip Spec      14 (20) '2.0'\n+5F88EA Extract OS            00 (0) 'MS-DOS'\n+5F88EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F88ED Compression Method    0000 (0) 'Stored'\n+5F88EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F88F3 CRC                   A57691CD (2776011213)\n+5F88F7 Compressed Size       000005C2 (1474)\n+5F88FB Uncompressed Size     000005C2 (1474)\n+5F88FF Filename Length       007A (122)\n+5F8901 Extra Length          0009 (9)\n+5F8903 Comment Length        0000 (0)\n+5F8905 Disk Start            0000 (0)\n+5F8907 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8909 Ext File Attributes   00000000 (0)\n+5F890D Local Header Offset   0008E208 (582152)\n+5F8911 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8911: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F898B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F898D   Length              0005 (5)\n+5F898F   Flags               01 (1) 'Modification'\n+5F8990   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8994 CENTRAL HEADER #258   02014B50 (33639248)\n+5F8998 Created Zip Spec      14 (20) '2.0'\n+5F8999 Created OS            00 (0) 'MS-DOS'\n+5F899A Extract Zip Spec      14 (20) '2.0'\n+5F899B Extract OS            00 (0) 'MS-DOS'\n+5F899C General Purpose Flag  0000 (0)\n+5F899E Compression Method    0000 (0) 'Stored'\n+5F89A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F89A4 CRC                   00000000 (0)\n+5F89A8 Compressed Size       00000000 (0)\n+5F89AC Uncompressed Size     00000000 (0)\n+5F89B0 Filename Length       0063 (99)\n+5F89B2 Extra Length          0009 (9)\n+5F89B4 Comment Length        0000 (0)\n+5F89B6 Disk Start            0000 (0)\n+5F89B8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F89BA Ext File Attributes   00000000 (0)\n+5F89BE Local Header Offset   0008E87B (583803)\n+5F89C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F89C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8A25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8A27   Length              0005 (5)\n+5F8A29   Flags               01 (1) 'Modification'\n+5F8A2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8A2E CENTRAL HEADER #259   02014B50 (33639248)\n+5F8A32 Created Zip Spec      14 (20) '2.0'\n+5F8A33 Created OS            00 (0) 'MS-DOS'\n+5F8A34 Extract Zip Spec      14 (20) '2.0'\n+5F8A35 Extract OS            00 (0) 'MS-DOS'\n+5F8A36 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8A38 Compression Method    0000 (0) 'Stored'\n+5F8A3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8A3E CRC                   6CD31445 (1825772613)\n+5F8A42 Compressed Size       0000073A (1850)\n+5F8A46 Uncompressed Size     0000073A (1850)\n+5F8A4A Filename Length       0079 (121)\n+5F8A4C Extra Length          0009 (9)\n+5F8A4E Comment Length        0000 (0)\n+5F8A50 Disk Start            0000 (0)\n+5F8A52 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8A54 Ext File Attributes   00000000 (0)\n+5F8A58 Local Header Offset   0008E905 (583941)\n+5F8A5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8A5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8AD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8AD7   Length              0005 (5)\n+5F8AD9   Flags               01 (1) 'Modification'\n+5F8ADA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8ADE CENTRAL HEADER #260   02014B50 (33639248)\n+5F8AE2 Created Zip Spec      14 (20) '2.0'\n+5F8AE3 Created OS            00 (0) 'MS-DOS'\n+5F8AE4 Extract Zip Spec      14 (20) '2.0'\n+5F8AE5 Extract OS            00 (0) 'MS-DOS'\n+5F8AE6 General Purpose Flag  0000 (0)\n+5F8AE8 Compression Method    0000 (0) 'Stored'\n+5F8AEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8AEE CRC                   00000000 (0)\n+5F8AF2 Compressed Size       00000000 (0)\n+5F8AF6 Uncompressed Size     00000000 (0)\n+5F8AFA Filename Length       0061 (97)\n+5F8AFC Extra Length          0009 (9)\n+5F8AFE Comment Length        0000 (0)\n+5F8B00 Disk Start            0000 (0)\n+5F8B02 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8B04 Ext File Attributes   00000000 (0)\n+5F8B08 Local Header Offset   0008F0EF (585967)\n+5F8B0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8B0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8B6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8B6F   Length              0005 (5)\n+5F8B71   Flags               01 (1) 'Modification'\n+5F8B72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8B76 CENTRAL HEADER #261   02014B50 (33639248)\n+5F8B7A Created Zip Spec      14 (20) '2.0'\n+5F8B7B Created OS            00 (0) 'MS-DOS'\n+5F8B7C Extract Zip Spec      14 (20) '2.0'\n+5F8B7D Extract OS            00 (0) 'MS-DOS'\n+5F8B7E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8B80 Compression Method    0000 (0) 'Stored'\n+5F8B82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8B86 CRC                   C97DF8D6 (3380476118)\n+5F8B8A Compressed Size       00000A92 (2706)\n+5F8B8E Uncompressed Size     00000A92 (2706)\n+5F8B92 Filename Length       0077 (119)\n+5F8B94 Extra Length          0009 (9)\n+5F8B96 Comment Length        0000 (0)\n+5F8B98 Disk Start            0000 (0)\n+5F8B9A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8B9C Ext File Attributes   00000000 (0)\n+5F8BA0 Local Header Offset   0008F177 (586103)\n+5F8BA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8BA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8C1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8C1D   Length              0005 (5)\n+5F8C1F   Flags               01 (1) 'Modification'\n+5F8C20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8C24 CENTRAL HEADER #262   02014B50 (33639248)\n+5F8C28 Created Zip Spec      14 (20) '2.0'\n+5F8C29 Created OS            00 (0) 'MS-DOS'\n+5F8C2A Extract Zip Spec      14 (20) '2.0'\n+5F8C2B Extract OS            00 (0) 'MS-DOS'\n+5F8C2C General Purpose Flag  0000 (0)\n+5F8C2E Compression Method    0000 (0) 'Stored'\n+5F8C30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8C34 CRC                   00000000 (0)\n+5F8C38 Compressed Size       00000000 (0)\n+5F8C3C Uncompressed Size     00000000 (0)\n+5F8C40 Filename Length       0023 (35)\n+5F8C42 Extra Length          0009 (9)\n+5F8C44 Comment Length        0000 (0)\n+5F8C46 Disk Start            0000 (0)\n+5F8C48 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8C4A Ext File Attributes   00000000 (0)\n+5F8C4E Local Header Offset   0008FCB7 (588983)\n+5F8C52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8C52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8C75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8C77   Length              0005 (5)\n+5F8C79   Flags               01 (1) 'Modification'\n+5F8C7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8C7E CENTRAL HEADER #263   02014B50 (33639248)\n+5F8C82 Created Zip Spec      14 (20) '2.0'\n+5F8C83 Created OS            00 (0) 'MS-DOS'\n+5F8C84 Extract Zip Spec      14 (20) '2.0'\n+5F8C85 Extract OS            00 (0) 'MS-DOS'\n+5F8C86 General Purpose Flag  0000 (0)\n+5F8C88 Compression Method    0000 (0) 'Stored'\n+5F8C8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8C8E CRC                   00000000 (0)\n+5F8C92 Compressed Size       00000000 (0)\n+5F8C96 Uncompressed Size     00000000 (0)\n+5F8C9A Filename Length       002A (42)\n+5F8C9C Extra Length          0009 (9)\n+5F8C9E Comment Length        0000 (0)\n+5F8CA0 Disk Start            0000 (0)\n+5F8CA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8CA4 Ext File Attributes   00000000 (0)\n+5F8CA8 Local Header Offset   0008FD01 (589057)\n+5F8CAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8CAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8CD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8CD8   Length              0005 (5)\n+5F8CDA   Flags               01 (1) 'Modification'\n+5F8CDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8CDF CENTRAL HEADER #264   02014B50 (33639248)\n+5F8CE3 Created Zip Spec      14 (20) '2.0'\n+5F8CE4 Created OS            00 (0) 'MS-DOS'\n+5F8CE5 Extract Zip Spec      14 (20) '2.0'\n+5F8CE6 Extract OS            00 (0) 'MS-DOS'\n+5F8CE7 General Purpose Flag  0000 (0)\n+5F8CE9 Compression Method    0000 (0) 'Stored'\n+5F8CEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8CEF CRC                   00000000 (0)\n+5F8CF3 Compressed Size       00000000 (0)\n+5F8CF7 Uncompressed Size     00000000 (0)\n+5F8CFB Filename Length       0056 (86)\n+5F8CFD Extra Length          0009 (9)\n+5F8CFF Comment Length        0000 (0)\n+5F8D01 Disk Start            0000 (0)\n+5F8D03 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8D05 Ext File Attributes   00000000 (0)\n+5F8D09 Local Header Offset   0008FD52 (589138)\n+5F8D0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8D0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8D63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8D65   Length              0005 (5)\n+5F8D67   Flags               01 (1) 'Modification'\n+5F8D68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8D6C CENTRAL HEADER #265   02014B50 (33639248)\n+5F8D70 Created Zip Spec      14 (20) '2.0'\n+5F8D71 Created OS            00 (0) 'MS-DOS'\n+5F8D72 Extract Zip Spec      14 (20) '2.0'\n+5F8D73 Extract OS            00 (0) 'MS-DOS'\n+5F8D74 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8D76 Compression Method    0000 (0) 'Stored'\n+5F8D78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8D7C CRC                   0B04A112 (184852754)\n+5F8D80 Compressed Size       00000795 (1941)\n+5F8D84 Uncompressed Size     00000795 (1941)\n+5F8D88 Filename Length       006C (108)\n+5F8D8A Extra Length          0009 (9)\n+5F8D8C Comment Length        0000 (0)\n+5F8D8E Disk Start            0000 (0)\n+5F8D90 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8D92 Ext File Attributes   00000000 (0)\n+5F8D96 Local Header Offset   0008FDCF (589263)\n+5F8D9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8D9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8E06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8E08   Length              0005 (5)\n+5F8E0A   Flags               01 (1) 'Modification'\n+5F8E0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8E0F CENTRAL HEADER #266   02014B50 (33639248)\n+5F8E13 Created Zip Spec      14 (20) '2.0'\n+5F8E14 Created OS            00 (0) 'MS-DOS'\n+5F8E15 Extract Zip Spec      14 (20) '2.0'\n+5F8E16 Extract OS            00 (0) 'MS-DOS'\n+5F8E17 General Purpose Flag  0000 (0)\n+5F8E19 Compression Method    0000 (0) 'Stored'\n+5F8E1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8E1F CRC                   00000000 (0)\n+5F8E23 Compressed Size       00000000 (0)\n+5F8E27 Uncompressed Size     00000000 (0)\n+5F8E2B Filename Length       0031 (49)\n+5F8E2D Extra Length          0009 (9)\n+5F8E2F Comment Length        0000 (0)\n+5F8E31 Disk Start            0000 (0)\n+5F8E33 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8E35 Ext File Attributes   00000000 (0)\n+5F8E39 Local Header Offset   00090607 (591367)\n+5F8E3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8E3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8E6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8E70   Length              0005 (5)\n+5F8E72   Flags               01 (1) 'Modification'\n+5F8E73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8E77 CENTRAL HEADER #267   02014B50 (33639248)\n+5F8E7B Created Zip Spec      14 (20) '2.0'\n+5F8E7C Created OS            00 (0) 'MS-DOS'\n+5F8E7D Extract Zip Spec      14 (20) '2.0'\n+5F8E7E Extract OS            00 (0) 'MS-DOS'\n+5F8E7F General Purpose Flag  0000 (0)\n+5F8E81 Compression Method    0000 (0) 'Stored'\n+5F8E83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8E87 CRC                   00000000 (0)\n+5F8E8B Compressed Size       00000000 (0)\n+5F8E8F Uncompressed Size     00000000 (0)\n+5F8E93 Filename Length       0038 (56)\n+5F8E95 Extra Length          0009 (9)\n+5F8E97 Comment Length        0000 (0)\n+5F8E99 Disk Start            0000 (0)\n+5F8E9B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8E9D Ext File Attributes   00000000 (0)\n+5F8EA1 Local Header Offset   0009065F (591455)\n+5F8EA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8EA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8EDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8EDF   Length              0005 (5)\n+5F8EE1   Flags               01 (1) 'Modification'\n+5F8EE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8EE6 CENTRAL HEADER #268   02014B50 (33639248)\n+5F8EEA Created Zip Spec      14 (20) '2.0'\n+5F8EEB Created OS            00 (0) 'MS-DOS'\n+5F8EEC Extract Zip Spec      14 (20) '2.0'\n+5F8EED Extract OS            00 (0) 'MS-DOS'\n+5F8EEE General Purpose Flag  0000 (0)\n+5F8EF0 Compression Method    0000 (0) 'Stored'\n+5F8EF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8EF6 CRC                   00000000 (0)\n+5F8EFA Compressed Size       00000000 (0)\n+5F8EFE Uncompressed Size     00000000 (0)\n+5F8F02 Filename Length       006A (106)\n+5F8F04 Extra Length          0009 (9)\n+5F8F06 Comment Length        0000 (0)\n+5F8F08 Disk Start            0000 (0)\n+5F8F0A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8F0C Ext File Attributes   00000000 (0)\n+5F8F10 Local Header Offset   000906BE (591550)\n+5F8F14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8F14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F8F7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F8F80   Length              0005 (5)\n+5F8F82   Flags               01 (1) 'Modification'\n+5F8F83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F8F87 CENTRAL HEADER #269   02014B50 (33639248)\n+5F8F8B Created Zip Spec      14 (20) '2.0'\n+5F8F8C Created OS            00 (0) 'MS-DOS'\n+5F8F8D Extract Zip Spec      14 (20) '2.0'\n+5F8F8E Extract OS            00 (0) 'MS-DOS'\n+5F8F8F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F8F91 Compression Method    0000 (0) 'Stored'\n+5F8F93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F8F97 CRC                   9A51A289 (2589041289)\n+5F8F9B Compressed Size       000008AB (2219)\n+5F8F9F Uncompressed Size     000008AB (2219)\n+5F8FA3 Filename Length       0080 (128)\n+5F8FA5 Extra Length          0009 (9)\n+5F8FA7 Comment Length        0000 (0)\n+5F8FA9 Disk Start            0000 (0)\n+5F8FAB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F8FAD Ext File Attributes   00000000 (0)\n+5F8FB1 Local Header Offset   0009074F (591695)\n+5F8FB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8FB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9035 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9037   Length              0005 (5)\n+5F9039   Flags               01 (1) 'Modification'\n+5F903A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F903E CENTRAL HEADER #270   02014B50 (33639248)\n+5F9042 Created Zip Spec      14 (20) '2.0'\n+5F9043 Created OS            00 (0) 'MS-DOS'\n+5F9044 Extract Zip Spec      14 (20) '2.0'\n+5F9045 Extract OS            00 (0) 'MS-DOS'\n+5F9046 General Purpose Flag  0000 (0)\n+5F9048 Compression Method    0000 (0) 'Stored'\n+5F904A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F904E CRC                   00000000 (0)\n+5F9052 Compressed Size       00000000 (0)\n+5F9056 Uncompressed Size     00000000 (0)\n+5F905A Filename Length       0022 (34)\n+5F905C Extra Length          0009 (9)\n+5F905E Comment Length        0000 (0)\n+5F9060 Disk Start            0000 (0)\n+5F9062 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9064 Ext File Attributes   00000000 (0)\n+5F9068 Local Header Offset   000910B1 (594097)\n+5F906C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F906C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F908E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9090   Length              0005 (5)\n+5F9092   Flags               01 (1) 'Modification'\n+5F9093   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9097 CENTRAL HEADER #271   02014B50 (33639248)\n+5F909B Created Zip Spec      14 (20) '2.0'\n+5F909C Created OS            00 (0) 'MS-DOS'\n+5F909D Extract Zip Spec      14 (20) '2.0'\n+5F909E Extract OS            00 (0) 'MS-DOS'\n+5F909F General Purpose Flag  0000 (0)\n+5F90A1 Compression Method    0000 (0) 'Stored'\n+5F90A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F90A7 CRC                   00000000 (0)\n+5F90AB Compressed Size       00000000 (0)\n+5F90AF Uncompressed Size     00000000 (0)\n+5F90B3 Filename Length       0029 (41)\n+5F90B5 Extra Length          0009 (9)\n+5F90B7 Comment Length        0000 (0)\n+5F90B9 Disk Start            0000 (0)\n+5F90BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F90BD Ext File Attributes   00000000 (0)\n+5F90C1 Local Header Offset   000910FA (594170)\n+5F90C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F90C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F90EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F90F0   Length              0005 (5)\n+5F90F2   Flags               01 (1) 'Modification'\n+5F90F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F90F7 CENTRAL HEADER #272   02014B50 (33639248)\n+5F90FB Created Zip Spec      14 (20) '2.0'\n+5F90FC Created OS            00 (0) 'MS-DOS'\n+5F90FD Extract Zip Spec      14 (20) '2.0'\n+5F90FE Extract OS            00 (0) 'MS-DOS'\n+5F90FF General Purpose Flag  0000 (0)\n+5F9101 Compression Method    0000 (0) 'Stored'\n+5F9103 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9107 CRC                   00000000 (0)\n+5F910B Compressed Size       00000000 (0)\n+5F910F Uncompressed Size     00000000 (0)\n+5F9113 Filename Length       0063 (99)\n+5F9115 Extra Length          0009 (9)\n+5F9117 Comment Length        0000 (0)\n+5F9119 Disk Start            0000 (0)\n+5F911B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F911D Ext File Attributes   00000000 (0)\n+5F9121 Local Header Offset   0009114A (594250)\n+5F9125 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9125: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9188 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F918A   Length              0005 (5)\n+5F918C   Flags               01 (1) 'Modification'\n+5F918D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9191 CENTRAL HEADER #273   02014B50 (33639248)\n+5F9195 Created Zip Spec      14 (20) '2.0'\n+5F9196 Created OS            00 (0) 'MS-DOS'\n+5F9197 Extract Zip Spec      14 (20) '2.0'\n+5F9198 Extract OS            00 (0) 'MS-DOS'\n+5F9199 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F919B Compression Method    0000 (0) 'Stored'\n+5F919D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F91A1 CRC                   28034B81 (671304577)\n+5F91A5 Compressed Size       00000E44 (3652)\n+5F91A9 Uncompressed Size     00000E44 (3652)\n+5F91AD Filename Length       0079 (121)\n+5F91AF Extra Length          0009 (9)\n+5F91B1 Comment Length        0000 (0)\n+5F91B3 Disk Start            0000 (0)\n+5F91B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F91B7 Ext File Attributes   00000000 (0)\n+5F91BB Local Header Offset   000911D4 (594388)\n+5F91BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F91BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9238 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F923A   Length              0005 (5)\n+5F923C   Flags               01 (1) 'Modification'\n+5F923D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9241 CENTRAL HEADER #274   02014B50 (33639248)\n+5F9245 Created Zip Spec      14 (20) '2.0'\n+5F9246 Created OS            00 (0) 'MS-DOS'\n+5F9247 Extract Zip Spec      14 (20) '2.0'\n+5F9248 Extract OS            00 (0) 'MS-DOS'\n+5F9249 General Purpose Flag  0000 (0)\n+5F924B Compression Method    0000 (0) 'Stored'\n+5F924D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9251 CRC                   00000000 (0)\n+5F9255 Compressed Size       00000000 (0)\n+5F9259 Uncompressed Size     00000000 (0)\n+5F925D Filename Length       003C (60)\n+5F925F Extra Length          0009 (9)\n+5F9261 Comment Length        0000 (0)\n+5F9263 Disk Start            0000 (0)\n+5F9265 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9267 Ext File Attributes   00000000 (0)\n+5F926B Local Header Offset   000920C8 (598216)\n+5F926F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F9251: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F926F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5F92AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5F92AD   Length              0005 (5)\n 5F92AF   Flags               01 (1) 'Modification'\n 5F92B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5F92B4 CENTRAL HEADER #361   02014B50 (33639248)\n+5F92B4 CENTRAL HEADER #275   02014B50 (33639248)\n 5F92B8 Created Zip Spec      14 (20) '2.0'\n 5F92B9 Created OS            00 (0) 'MS-DOS'\n 5F92BA Extract Zip Spec      14 (20) '2.0'\n 5F92BB Extract OS            00 (0) 'MS-DOS'\n-5F92BC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n+5F92BC General Purpose Flag  0000 (0)\n 5F92BE Compression Method    0000 (0) 'Stored'\n 5F92C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F92C4 CRC                   0944969F (155489951)\n-5F92C8 Compressed Size       000017C7 (6087)\n-5F92CC Uncompressed Size     000017C7 (6087)\n-5F92D0 Filename Length       0070 (112)\n+5F92C4 CRC                   00000000 (0)\n+5F92C8 Compressed Size       00000000 (0)\n+5F92CC Uncompressed Size     00000000 (0)\n+5F92D0 Filename Length       0043 (67)\n 5F92D2 Extra Length          0009 (9)\n 5F92D4 Comment Length        0000 (0)\n 5F92D6 Disk Start            0000 (0)\n 5F92D8 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5F92DA Ext File Attributes   00000000 (0)\n-5F92DE Local Header Offset   000D5975 (874869)\n-5F92E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F92DE Local Header Offset   0009212B (598315)\n+5F92E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F92E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9325 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9327   Length              0005 (5)\n+5F9329   Flags               01 (1) 'Modification'\n+5F932A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F932E CENTRAL HEADER #276   02014B50 (33639248)\n+5F9332 Created Zip Spec      14 (20) '2.0'\n+5F9333 Created OS            00 (0) 'MS-DOS'\n+5F9334 Extract Zip Spec      14 (20) '2.0'\n+5F9335 Extract OS            00 (0) 'MS-DOS'\n+5F9336 General Purpose Flag  0000 (0)\n+5F9338 Compression Method    0000 (0) 'Stored'\n+5F933A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F933E CRC                   00000000 (0)\n+5F9342 Compressed Size       00000000 (0)\n+5F9346 Uncompressed Size     00000000 (0)\n+5F934A Filename Length       0061 (97)\n+5F934C Extra Length          0009 (9)\n+5F934E Comment Length        0000 (0)\n+5F9350 Disk Start            0000 (0)\n+5F9352 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9354 Ext File Attributes   00000000 (0)\n+5F9358 Local Header Offset   00092195 (598421)\n+5F935C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F935C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F93BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F93BF   Length              0005 (5)\n+5F93C1   Flags               01 (1) 'Modification'\n+5F93C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F93C6 CENTRAL HEADER #277   02014B50 (33639248)\n+5F93CA Created Zip Spec      14 (20) '2.0'\n+5F93CB Created OS            00 (0) 'MS-DOS'\n+5F93CC Extract Zip Spec      14 (20) '2.0'\n+5F93CD Extract OS            00 (0) 'MS-DOS'\n+5F93CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F93D0 Compression Method    0000 (0) 'Stored'\n+5F93D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F93D6 CRC                   9ED7BE90 (2664939152)\n+5F93DA Compressed Size       000036E7 (14055)\n+5F93DE Uncompressed Size     000036E7 (14055)\n+5F93E2 Filename Length       0077 (119)\n+5F93E4 Extra Length          0009 (9)\n+5F93E6 Comment Length        0000 (0)\n+5F93E8 Disk Start            0000 (0)\n+5F93EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F93EC Ext File Attributes   00000000 (0)\n+5F93F0 Local Header Offset   0009221D (598557)\n+5F93F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F93F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F946B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F946D   Length              0005 (5)\n+5F946F   Flags               01 (1) 'Modification'\n+5F9470   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9474 CENTRAL HEADER #278   02014B50 (33639248)\n+5F9478 Created Zip Spec      14 (20) '2.0'\n+5F9479 Created OS            00 (0) 'MS-DOS'\n+5F947A Extract Zip Spec      14 (20) '2.0'\n+5F947B Extract OS            00 (0) 'MS-DOS'\n+5F947C General Purpose Flag  0000 (0)\n+5F947E Compression Method    0000 (0) 'Stored'\n+5F9480 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9484 CRC                   00000000 (0)\n+5F9488 Compressed Size       00000000 (0)\n+5F948C Uncompressed Size     00000000 (0)\n+5F9490 Filename Length       0061 (97)\n+5F9492 Extra Length          0009 (9)\n+5F9494 Comment Length        0000 (0)\n+5F9496 Disk Start            0000 (0)\n+5F9498 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F949A Ext File Attributes   00000000 (0)\n+5F949E Local Header Offset   000959B2 (612786)\n+5F94A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F94A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9503 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9505   Length              0005 (5)\n+5F9507   Flags               01 (1) 'Modification'\n+5F9508   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F950C CENTRAL HEADER #279   02014B50 (33639248)\n+5F9510 Created Zip Spec      14 (20) '2.0'\n+5F9511 Created OS            00 (0) 'MS-DOS'\n+5F9512 Extract Zip Spec      14 (20) '2.0'\n+5F9513 Extract OS            00 (0) 'MS-DOS'\n+5F9514 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9516 Compression Method    0000 (0) 'Stored'\n+5F9518 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F951C CRC                   DF1BCC3E (3743140926)\n+5F9520 Compressed Size       00004792 (18322)\n+5F9524 Uncompressed Size     00004792 (18322)\n+5F9528 Filename Length       0077 (119)\n+5F952A Extra Length          0009 (9)\n+5F952C Comment Length        0000 (0)\n+5F952E Disk Start            0000 (0)\n+5F9530 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9532 Ext File Attributes   00000000 (0)\n+5F9536 Local Header Offset   00095A3A (612922)\n+5F953A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F953A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F95B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F95B3   Length              0005 (5)\n+5F95B5   Flags               01 (1) 'Modification'\n+5F95B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F95BA CENTRAL HEADER #280   02014B50 (33639248)\n+5F95BE Created Zip Spec      14 (20) '2.0'\n+5F95BF Created OS            00 (0) 'MS-DOS'\n+5F95C0 Extract Zip Spec      14 (20) '2.0'\n+5F95C1 Extract OS            00 (0) 'MS-DOS'\n+5F95C2 General Purpose Flag  0000 (0)\n+5F95C4 Compression Method    0000 (0) 'Stored'\n+5F95C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F95CA CRC                   00000000 (0)\n+5F95CE Compressed Size       00000000 (0)\n+5F95D2 Uncompressed Size     00000000 (0)\n+5F95D6 Filename Length       0063 (99)\n+5F95D8 Extra Length          0009 (9)\n+5F95DA Comment Length        0000 (0)\n+5F95DC Disk Start            0000 (0)\n+5F95DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F95E0 Ext File Attributes   00000000 (0)\n+5F95E4 Local Header Offset   0009A27A (631418)\n+5F95E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F95E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F964B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F964D   Length              0005 (5)\n+5F964F   Flags               01 (1) 'Modification'\n+5F9650   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9654 CENTRAL HEADER #281   02014B50 (33639248)\n+5F9658 Created Zip Spec      14 (20) '2.0'\n+5F9659 Created OS            00 (0) 'MS-DOS'\n+5F965A Extract Zip Spec      14 (20) '2.0'\n+5F965B Extract OS            00 (0) 'MS-DOS'\n+5F965C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F965E Compression Method    0000 (0) 'Stored'\n+5F9660 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9664 CRC                   27CFA48B (667919499)\n+5F9668 Compressed Size       00005DDC (24028)\n+5F966C Uncompressed Size     00005DDC (24028)\n+5F9670 Filename Length       0079 (121)\n+5F9672 Extra Length          0009 (9)\n+5F9674 Comment Length        0000 (0)\n+5F9676 Disk Start            0000 (0)\n+5F9678 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F967A Ext File Attributes   00000000 (0)\n+5F967E Local Header Offset   0009A304 (631556)\n+5F9682 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9682: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F96FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F96FD   Length              0005 (5)\n+5F96FF   Flags               01 (1) 'Modification'\n+5F9700   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9704 CENTRAL HEADER #282   02014B50 (33639248)\n+5F9708 Created Zip Spec      14 (20) '2.0'\n+5F9709 Created OS            00 (0) 'MS-DOS'\n+5F970A Extract Zip Spec      14 (20) '2.0'\n+5F970B Extract OS            00 (0) 'MS-DOS'\n+5F970C General Purpose Flag  0000 (0)\n+5F970E Compression Method    0000 (0) 'Stored'\n+5F9710 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9714 CRC                   00000000 (0)\n+5F9718 Compressed Size       00000000 (0)\n+5F971C Uncompressed Size     00000000 (0)\n+5F9720 Filename Length       0067 (103)\n+5F9722 Extra Length          0009 (9)\n+5F9724 Comment Length        0000 (0)\n+5F9726 Disk Start            0000 (0)\n+5F9728 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F972A Ext File Attributes   00000000 (0)\n+5F972E Local Header Offset   000A0190 (655760)\n+5F9732 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9732: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F979B   Length              0005 (5)\n+5F979D   Flags               01 (1) 'Modification'\n+5F979E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F97A2 CENTRAL HEADER #283   02014B50 (33639248)\n+5F97A6 Created Zip Spec      14 (20) '2.0'\n+5F97A7 Created OS            00 (0) 'MS-DOS'\n+5F97A8 Extract Zip Spec      14 (20) '2.0'\n+5F97A9 Extract OS            00 (0) 'MS-DOS'\n+5F97AA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F97AC Compression Method    0000 (0) 'Stored'\n+5F97AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F97B2 CRC                   620AB78F (1644869519)\n+5F97B6 Compressed Size       00003B3A (15162)\n+5F97BA Uncompressed Size     00003B3A (15162)\n+5F97BE Filename Length       007D (125)\n+5F97C0 Extra Length          0009 (9)\n+5F97C2 Comment Length        0000 (0)\n+5F97C4 Disk Start            0000 (0)\n+5F97C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F97C8 Ext File Attributes   00000000 (0)\n+5F97CC Local Header Offset   000A021E (655902)\n+5F97D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F97D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F984D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F984F   Length              0005 (5)\n+5F9851   Flags               01 (1) 'Modification'\n+5F9852   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9856 CENTRAL HEADER #284   02014B50 (33639248)\n+5F985A Created Zip Spec      14 (20) '2.0'\n+5F985B Created OS            00 (0) 'MS-DOS'\n+5F985C Extract Zip Spec      14 (20) '2.0'\n+5F985D Extract OS            00 (0) 'MS-DOS'\n+5F985E General Purpose Flag  0000 (0)\n+5F9860 Compression Method    0000 (0) 'Stored'\n+5F9862 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9866 CRC                   00000000 (0)\n+5F986A Compressed Size       00000000 (0)\n+5F986E Uncompressed Size     00000000 (0)\n+5F9872 Filename Length       0067 (103)\n+5F9874 Extra Length          0009 (9)\n+5F9876 Comment Length        0000 (0)\n+5F9878 Disk Start            0000 (0)\n+5F987A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F987C Ext File Attributes   00000000 (0)\n+5F9880 Local Header Offset   000A3E0C (671244)\n+5F9884 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9884: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F98EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F98ED   Length              0005 (5)\n+5F98EF   Flags               01 (1) 'Modification'\n+5F98F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F98F4 CENTRAL HEADER #285   02014B50 (33639248)\n+5F98F8 Created Zip Spec      14 (20) '2.0'\n+5F98F9 Created OS            00 (0) 'MS-DOS'\n+5F98FA Extract Zip Spec      14 (20) '2.0'\n+5F98FB Extract OS            00 (0) 'MS-DOS'\n+5F98FC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F98FE Compression Method    0000 (0) 'Stored'\n+5F9900 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9904 CRC                   1E08683A (503867450)\n+5F9908 Compressed Size       00004865 (18533)\n+5F990C Uncompressed Size     00004865 (18533)\n+5F9910 Filename Length       007D (125)\n+5F9912 Extra Length          0009 (9)\n+5F9914 Comment Length        0000 (0)\n+5F9916 Disk Start            0000 (0)\n+5F9918 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F991A Ext File Attributes   00000000 (0)\n+5F991E Local Header Offset   000A3E9A (671386)\n+5F9922 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9922: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F999F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F99A1   Length              0005 (5)\n+5F99A3   Flags               01 (1) 'Modification'\n+5F99A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F99A8 CENTRAL HEADER #286   02014B50 (33639248)\n+5F99AC Created Zip Spec      14 (20) '2.0'\n+5F99AD Created OS            00 (0) 'MS-DOS'\n+5F99AE Extract Zip Spec      14 (20) '2.0'\n+5F99AF Extract OS            00 (0) 'MS-DOS'\n+5F99B0 General Purpose Flag  0000 (0)\n+5F99B2 Compression Method    0000 (0) 'Stored'\n+5F99B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F99B8 CRC                   00000000 (0)\n+5F99BC Compressed Size       00000000 (0)\n+5F99C0 Uncompressed Size     00000000 (0)\n+5F99C4 Filename Length       006B (107)\n+5F99C6 Extra Length          0009 (9)\n+5F99C8 Comment Length        0000 (0)\n+5F99CA Disk Start            0000 (0)\n+5F99CC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F99CE Ext File Attributes   00000000 (0)\n+5F99D2 Local Header Offset   000A87B3 (690099)\n+5F99D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F99D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9A41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9A43   Length              0005 (5)\n+5F9A45   Flags               01 (1) 'Modification'\n+5F9A46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9A4A CENTRAL HEADER #287   02014B50 (33639248)\n+5F9A4E Created Zip Spec      14 (20) '2.0'\n+5F9A4F Created OS            00 (0) 'MS-DOS'\n+5F9A50 Extract Zip Spec      14 (20) '2.0'\n+5F9A51 Extract OS            00 (0) 'MS-DOS'\n+5F9A52 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9A54 Compression Method    0000 (0) 'Stored'\n+5F9A56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9A5A CRC                   53DFF1D7 (1407185367)\n+5F9A5E Compressed Size       00000ADF (2783)\n+5F9A62 Uncompressed Size     00000ADF (2783)\n+5F9A66 Filename Length       0081 (129)\n+5F9A68 Extra Length          0009 (9)\n+5F9A6A Comment Length        0000 (0)\n+5F9A6C Disk Start            0000 (0)\n+5F9A6E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9A70 Ext File Attributes   00000000 (0)\n+5F9A74 Local Header Offset   000A8845 (690245)\n+5F9A78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9A78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9AF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9AFB   Length              0005 (5)\n+5F9AFD   Flags               01 (1) 'Modification'\n+5F9AFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9B02 CENTRAL HEADER #288   02014B50 (33639248)\n+5F9B06 Created Zip Spec      14 (20) '2.0'\n+5F9B07 Created OS            00 (0) 'MS-DOS'\n+5F9B08 Extract Zip Spec      14 (20) '2.0'\n+5F9B09 Extract OS            00 (0) 'MS-DOS'\n+5F9B0A General Purpose Flag  0000 (0)\n+5F9B0C Compression Method    0000 (0) 'Stored'\n+5F9B0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9B12 CRC                   00000000 (0)\n+5F9B16 Compressed Size       00000000 (0)\n+5F9B1A Uncompressed Size     00000000 (0)\n+5F9B1E Filename Length       0067 (103)\n+5F9B20 Extra Length          0009 (9)\n+5F9B22 Comment Length        0000 (0)\n+5F9B24 Disk Start            0000 (0)\n+5F9B26 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9B28 Ext File Attributes   00000000 (0)\n+5F9B2C Local Header Offset   000A93DC (693212)\n+5F9B30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9B30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9B97 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9B99   Length              0005 (5)\n+5F9B9B   Flags               01 (1) 'Modification'\n+5F9B9C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9BA0 CENTRAL HEADER #289   02014B50 (33639248)\n+5F9BA4 Created Zip Spec      14 (20) '2.0'\n+5F9BA5 Created OS            00 (0) 'MS-DOS'\n+5F9BA6 Extract Zip Spec      14 (20) '2.0'\n+5F9BA7 Extract OS            00 (0) 'MS-DOS'\n+5F9BA8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9BAA Compression Method    0000 (0) 'Stored'\n+5F9BAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9BB0 CRC                   6D3A5445 (1832539205)\n+5F9BB4 Compressed Size       00000939 (2361)\n+5F9BB8 Uncompressed Size     00000939 (2361)\n+5F9BBC Filename Length       007D (125)\n+5F9BBE Extra Length          0009 (9)\n+5F9BC0 Comment Length        0000 (0)\n+5F9BC2 Disk Start            0000 (0)\n+5F9BC4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9BC6 Ext File Attributes   00000000 (0)\n+5F9BCA Local Header Offset   000A946A (693354)\n+5F9BCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9BCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9C4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9C4D   Length              0005 (5)\n+5F9C4F   Flags               01 (1) 'Modification'\n+5F9C50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9C54 CENTRAL HEADER #290   02014B50 (33639248)\n+5F9C58 Created Zip Spec      14 (20) '2.0'\n+5F9C59 Created OS            00 (0) 'MS-DOS'\n+5F9C5A Extract Zip Spec      14 (20) '2.0'\n+5F9C5B Extract OS            00 (0) 'MS-DOS'\n+5F9C5C General Purpose Flag  0000 (0)\n+5F9C5E Compression Method    0000 (0) 'Stored'\n+5F9C60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9C64 CRC                   00000000 (0)\n+5F9C68 Compressed Size       00000000 (0)\n+5F9C6C Uncompressed Size     00000000 (0)\n+5F9C70 Filename Length       0076 (118)\n+5F9C72 Extra Length          0009 (9)\n+5F9C74 Comment Length        0000 (0)\n+5F9C76 Disk Start            0000 (0)\n+5F9C78 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9C7A Ext File Attributes   00000000 (0)\n+5F9C7E Local Header Offset   000A9E57 (695895)\n+5F9C82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9C82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9CF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9CFA   Length              0005 (5)\n+5F9CFC   Flags               01 (1) 'Modification'\n+5F9CFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9D01 CENTRAL HEADER #291   02014B50 (33639248)\n+5F9D05 Created Zip Spec      14 (20) '2.0'\n+5F9D06 Created OS            00 (0) 'MS-DOS'\n+5F9D07 Extract Zip Spec      14 (20) '2.0'\n+5F9D08 Extract OS            00 (0) 'MS-DOS'\n+5F9D09 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9D0B Compression Method    0000 (0) 'Stored'\n+5F9D0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9D11 CRC                   5C6B1924 (1550522660)\n+5F9D15 Compressed Size       00000DDD (3549)\n+5F9D19 Uncompressed Size     00000DDD (3549)\n+5F9D1D Filename Length       008C (140)\n+5F9D1F Extra Length          0009 (9)\n+5F9D21 Comment Length        0000 (0)\n+5F9D23 Disk Start            0000 (0)\n+5F9D25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9D27 Ext File Attributes   00000000 (0)\n+5F9D2B Local Header Offset   000A9EF4 (696052)\n+5F9D2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXX'\n #\n-# WARNING: Offset 0x5F92E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F9D2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5F9352 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9354   Length              0005 (5)\n-5F9356   Flags               01 (1) 'Modification'\n-5F9357   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F935B CENTRAL HEADER #362   02014B50 (33639248)\n-5F935F Created Zip Spec      14 (20) '2.0'\n-5F9360 Created OS            00 (0) 'MS-DOS'\n-5F9361 Extract Zip Spec      14 (20) '2.0'\n-5F9362 Extract OS            00 (0) 'MS-DOS'\n-5F9363 General Purpose Flag  0000 (0)\n-5F9365 Compression Method    0000 (0) 'Stored'\n-5F9367 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F936B CRC                   00000000 (0)\n-5F936F Compressed Size       00000000 (0)\n-5F9373 Uncompressed Size     00000000 (0)\n-5F9377 Filename Length       0027 (39)\n-5F9379 Extra Length          0009 (9)\n-5F937B Comment Length        0000 (0)\n-5F937D Disk Start            0000 (0)\n-5F937F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9381 Ext File Attributes   00000000 (0)\n-5F9385 Local Header Offset   000D71E3 (881123)\n-5F9389 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9389: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F93B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F93B2   Length              0005 (5)\n-5F93B4   Flags               01 (1) 'Modification'\n-5F93B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F93B9 CENTRAL HEADER #363   02014B50 (33639248)\n-5F93BD Created Zip Spec      14 (20) '2.0'\n-5F93BE Created OS            00 (0) 'MS-DOS'\n-5F93BF Extract Zip Spec      14 (20) '2.0'\n-5F93C0 Extract OS            00 (0) 'MS-DOS'\n-5F93C1 General Purpose Flag  0000 (0)\n-5F93C3 Compression Method    0000 (0) 'Stored'\n-5F93C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F93C9 CRC                   00000000 (0)\n-5F93CD Compressed Size       00000000 (0)\n-5F93D1 Uncompressed Size     00000000 (0)\n-5F93D5 Filename Length       002E (46)\n-5F93D7 Extra Length          0009 (9)\n-5F93D9 Comment Length        0000 (0)\n-5F93DB Disk Start            0000 (0)\n-5F93DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F93DF Ext File Attributes   00000000 (0)\n-5F93E3 Local Header Offset   000D7231 (881201)\n-5F93E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F93E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9415 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9417   Length              0005 (5)\n-5F9419   Flags               01 (1) 'Modification'\n-5F941A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F941E CENTRAL HEADER #364   02014B50 (33639248)\n-5F9422 Created Zip Spec      14 (20) '2.0'\n-5F9423 Created OS            00 (0) 'MS-DOS'\n-5F9424 Extract Zip Spec      14 (20) '2.0'\n-5F9425 Extract OS            00 (0) 'MS-DOS'\n-5F9426 General Purpose Flag  0000 (0)\n-5F9428 Compression Method    0000 (0) 'Stored'\n-5F942A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F942E CRC                   00000000 (0)\n-5F9432 Compressed Size       00000000 (0)\n-5F9436 Uncompressed Size     00000000 (0)\n-5F943A Filename Length       0067 (103)\n-5F943C Extra Length          0009 (9)\n-5F943E Comment Length        0000 (0)\n-5F9440 Disk Start            0000 (0)\n-5F9442 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9444 Ext File Attributes   00000000 (0)\n-5F9448 Local Header Offset   000D7286 (881286)\n-5F944C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F944C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F94B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F94B5   Length              0005 (5)\n-5F94B7   Flags               01 (1) 'Modification'\n-5F94B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F94BC CENTRAL HEADER #365   02014B50 (33639248)\n-5F94C0 Created Zip Spec      14 (20) '2.0'\n-5F94C1 Created OS            00 (0) 'MS-DOS'\n-5F94C2 Extract Zip Spec      14 (20) '2.0'\n-5F94C3 Extract OS            00 (0) 'MS-DOS'\n-5F94C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F94C6 Compression Method    0000 (0) 'Stored'\n-5F94C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F94CC CRC                   67FA3A91 (1744452241)\n-5F94D0 Compressed Size       00000C5B (3163)\n-5F94D4 Uncompressed Size     00000C5B (3163)\n-5F94D8 Filename Length       007D (125)\n-5F94DA Extra Length          0009 (9)\n-5F94DC Comment Length        0000 (0)\n-5F94DE Disk Start            0000 (0)\n-5F94E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F94E2 Ext File Attributes   00000000 (0)\n-5F94E6 Local Header Offset   000D7314 (881428)\n-5F94EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F94EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9567 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9569   Length              0005 (5)\n-5F956B   Flags               01 (1) 'Modification'\n-5F956C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9570 CENTRAL HEADER #366   02014B50 (33639248)\n-5F9574 Created Zip Spec      14 (20) '2.0'\n-5F9575 Created OS            00 (0) 'MS-DOS'\n-5F9576 Extract Zip Spec      14 (20) '2.0'\n-5F9577 Extract OS            00 (0) 'MS-DOS'\n-5F9578 General Purpose Flag  0000 (0)\n-5F957A Compression Method    0000 (0) 'Stored'\n-5F957C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9580 CRC                   00000000 (0)\n-5F9584 Compressed Size       00000000 (0)\n-5F9588 Uncompressed Size     00000000 (0)\n-5F958C Filename Length       0067 (103)\n-5F958E Extra Length          0009 (9)\n-5F9590 Comment Length        0000 (0)\n-5F9592 Disk Start            0000 (0)\n-5F9594 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9596 Ext File Attributes   00000000 (0)\n-5F959A Local Header Offset   000D8023 (884771)\n-5F959E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F959E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9605 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9607   Length              0005 (5)\n-5F9609   Flags               01 (1) 'Modification'\n-5F960A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F960E CENTRAL HEADER #367   02014B50 (33639248)\n-5F9612 Created Zip Spec      14 (20) '2.0'\n-5F9613 Created OS            00 (0) 'MS-DOS'\n-5F9614 Extract Zip Spec      14 (20) '2.0'\n-5F9615 Extract OS            00 (0) 'MS-DOS'\n-5F9616 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9618 Compression Method    0000 (0) 'Stored'\n-5F961A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F961E CRC                   63513D5C (1666268508)\n-5F9622 Compressed Size       000007C0 (1984)\n-5F9626 Uncompressed Size     000007C0 (1984)\n-5F962A Filename Length       007D (125)\n-5F962C Extra Length          0009 (9)\n-5F962E Comment Length        0000 (0)\n-5F9630 Disk Start            0000 (0)\n-5F9632 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9634 Ext File Attributes   00000000 (0)\n-5F9638 Local Header Offset   000D80B1 (884913)\n-5F963C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F963C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F96B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F96BB   Length              0005 (5)\n-5F96BD   Flags               01 (1) 'Modification'\n-5F96BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F96C2 CENTRAL HEADER #368   02014B50 (33639248)\n-5F96C6 Created Zip Spec      14 (20) '2.0'\n-5F96C7 Created OS            00 (0) 'MS-DOS'\n-5F96C8 Extract Zip Spec      14 (20) '2.0'\n-5F96C9 Extract OS            00 (0) 'MS-DOS'\n-5F96CA General Purpose Flag  0000 (0)\n-5F96CC Compression Method    0000 (0) 'Stored'\n-5F96CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F96D2 CRC                   00000000 (0)\n-5F96D6 Compressed Size       00000000 (0)\n-5F96DA Uncompressed Size     00000000 (0)\n-5F96DE Filename Length       005E (94)\n-5F96E0 Extra Length          0009 (9)\n-5F96E2 Comment Length        0000 (0)\n-5F96E4 Disk Start            0000 (0)\n-5F96E6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F96E8 Ext File Attributes   00000000 (0)\n-5F96EC Local Header Offset   000D8925 (887077)\n-5F96F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F96F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F974E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9750   Length              0005 (5)\n-5F9752   Flags               01 (1) 'Modification'\n-5F9753   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9757 CENTRAL HEADER #369   02014B50 (33639248)\n-5F975B Created Zip Spec      14 (20) '2.0'\n-5F975C Created OS            00 (0) 'MS-DOS'\n-5F975D Extract Zip Spec      14 (20) '2.0'\n-5F975E Extract OS            00 (0) 'MS-DOS'\n-5F975F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9761 Compression Method    0000 (0) 'Stored'\n-5F9763 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9767 CRC                   99929518 (2576520472)\n-5F976B Compressed Size       00000EDA (3802)\n-5F976F Uncompressed Size     00000EDA (3802)\n-5F9773 Filename Length       0074 (116)\n-5F9775 Extra Length          0009 (9)\n-5F9777 Comment Length        0000 (0)\n-5F9779 Disk Start            0000 (0)\n-5F977B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F977D Ext File Attributes   00000000 (0)\n-5F9781 Local Header Offset   000D89AA (887210)\n-5F9785 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9785: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F97F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F97FB   Length              0005 (5)\n-5F97FD   Flags               01 (1) 'Modification'\n-5F97FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9802 CENTRAL HEADER #370   02014B50 (33639248)\n-5F9806 Created Zip Spec      14 (20) '2.0'\n-5F9807 Created OS            00 (0) 'MS-DOS'\n-5F9808 Extract Zip Spec      14 (20) '2.0'\n-5F9809 Extract OS            00 (0) 'MS-DOS'\n-5F980A General Purpose Flag  0000 (0)\n-5F980C Compression Method    0000 (0) 'Stored'\n-5F980E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9812 CRC                   00000000 (0)\n-5F9816 Compressed Size       00000000 (0)\n-5F981A Uncompressed Size     00000000 (0)\n-5F981E Filename Length       005C (92)\n-5F9820 Extra Length          0009 (9)\n-5F9822 Comment Length        0000 (0)\n-5F9824 Disk Start            0000 (0)\n-5F9826 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9828 Ext File Attributes   00000000 (0)\n-5F982C Local Header Offset   000D992F (891183)\n-5F9830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F988C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F988E   Length              0005 (5)\n-5F9890   Flags               01 (1) 'Modification'\n-5F9891   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9895 CENTRAL HEADER #371   02014B50 (33639248)\n-5F9899 Created Zip Spec      14 (20) '2.0'\n-5F989A Created OS            00 (0) 'MS-DOS'\n-5F989B Extract Zip Spec      14 (20) '2.0'\n-5F989C Extract OS            00 (0) 'MS-DOS'\n-5F989D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F989F Compression Method    0000 (0) 'Stored'\n-5F98A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F98A5 CRC                   E6BF62E0 (3871302368)\n-5F98A9 Compressed Size       000008F8 (2296)\n-5F98AD Uncompressed Size     000008F8 (2296)\n-5F98B1 Filename Length       0072 (114)\n-5F98B3 Extra Length          0009 (9)\n-5F98B5 Comment Length        0000 (0)\n-5F98B7 Disk Start            0000 (0)\n-5F98B9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F98BB Ext File Attributes   00000000 (0)\n-5F98BF Local Header Offset   000D99B2 (891314)\n-5F98C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F98C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9935 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9937   Length              0005 (5)\n-5F9939   Flags               01 (1) 'Modification'\n-5F993A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F993E CENTRAL HEADER #372   02014B50 (33639248)\n-5F9942 Created Zip Spec      14 (20) '2.0'\n-5F9943 Created OS            00 (0) 'MS-DOS'\n-5F9944 Extract Zip Spec      14 (20) '2.0'\n-5F9945 Extract OS            00 (0) 'MS-DOS'\n-5F9946 General Purpose Flag  0000 (0)\n-5F9948 Compression Method    0000 (0) 'Stored'\n-5F994A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F994E CRC                   00000000 (0)\n-5F9952 Compressed Size       00000000 (0)\n-5F9956 Uncompressed Size     00000000 (0)\n-5F995A Filename Length       0061 (97)\n-5F995C Extra Length          0009 (9)\n-5F995E Comment Length        0000 (0)\n-5F9960 Disk Start            0000 (0)\n-5F9962 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9964 Ext File Attributes   00000000 (0)\n-5F9968 Local Header Offset   000DA353 (893779)\n-5F996C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F996C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F99CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F99CF   Length              0005 (5)\n-5F99D1   Flags               01 (1) 'Modification'\n-5F99D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F99D6 CENTRAL HEADER #373   02014B50 (33639248)\n-5F99DA Created Zip Spec      14 (20) '2.0'\n-5F99DB Created OS            00 (0) 'MS-DOS'\n-5F99DC Extract Zip Spec      14 (20) '2.0'\n-5F99DD Extract OS            00 (0) 'MS-DOS'\n-5F99DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F99E0 Compression Method    0000 (0) 'Stored'\n-5F99E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F99E6 CRC                   01130591 (18023825)\n-5F99EA Compressed Size       00000594 (1428)\n-5F99EE Uncompressed Size     00000594 (1428)\n-5F99F2 Filename Length       0077 (119)\n-5F99F4 Extra Length          0009 (9)\n-5F99F6 Comment Length        0000 (0)\n-5F99F8 Disk Start            0000 (0)\n-5F99FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F99FC Ext File Attributes   00000000 (0)\n-5F9A00 Local Header Offset   000DA3DB (893915)\n-5F9A04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9A04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9A7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9A7D   Length              0005 (5)\n-5F9A7F   Flags               01 (1) 'Modification'\n-5F9A80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9A84 CENTRAL HEADER #374   02014B50 (33639248)\n-5F9A88 Created Zip Spec      14 (20) '2.0'\n-5F9A89 Created OS            00 (0) 'MS-DOS'\n-5F9A8A Extract Zip Spec      14 (20) '2.0'\n-5F9A8B Extract OS            00 (0) 'MS-DOS'\n-5F9A8C General Purpose Flag  0000 (0)\n-5F9A8E Compression Method    0000 (0) 'Stored'\n-5F9A90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9A94 CRC                   00000000 (0)\n-5F9A98 Compressed Size       00000000 (0)\n-5F9A9C Uncompressed Size     00000000 (0)\n-5F9AA0 Filename Length       0063 (99)\n-5F9AA2 Extra Length          0009 (9)\n-5F9AA4 Comment Length        0000 (0)\n-5F9AA6 Disk Start            0000 (0)\n-5F9AA8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9AAA Ext File Attributes   00000000 (0)\n-5F9AAE Local Header Offset   000DAA1D (895517)\n-5F9AB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9AB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9B17   Length              0005 (5)\n-5F9B19   Flags               01 (1) 'Modification'\n-5F9B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9B1E CENTRAL HEADER #375   02014B50 (33639248)\n-5F9B22 Created Zip Spec      14 (20) '2.0'\n-5F9B23 Created OS            00 (0) 'MS-DOS'\n-5F9B24 Extract Zip Spec      14 (20) '2.0'\n-5F9B25 Extract OS            00 (0) 'MS-DOS'\n-5F9B26 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9B28 Compression Method    0000 (0) 'Stored'\n-5F9B2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9B2E CRC                   F05E2331 (4032701233)\n-5F9B32 Compressed Size       00000831 (2097)\n-5F9B36 Uncompressed Size     00000831 (2097)\n-5F9B3A Filename Length       0079 (121)\n-5F9B3C Extra Length          0009 (9)\n-5F9B3E Comment Length        0000 (0)\n-5F9B40 Disk Start            0000 (0)\n-5F9B42 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9B44 Ext File Attributes   00000000 (0)\n-5F9B48 Local Header Offset   000DAAA7 (895655)\n-5F9B4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9B4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9BC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9BC7   Length              0005 (5)\n-5F9BC9   Flags               01 (1) 'Modification'\n-5F9BCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9BCE CENTRAL HEADER #376   02014B50 (33639248)\n-5F9BD2 Created Zip Spec      14 (20) '2.0'\n-5F9BD3 Created OS            00 (0) 'MS-DOS'\n-5F9BD4 Extract Zip Spec      14 (20) '2.0'\n-5F9BD5 Extract OS            00 (0) 'MS-DOS'\n-5F9BD6 General Purpose Flag  0000 (0)\n-5F9BD8 Compression Method    0000 (0) 'Stored'\n-5F9BDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9BDE CRC                   00000000 (0)\n-5F9BE2 Compressed Size       00000000 (0)\n-5F9BE6 Uncompressed Size     00000000 (0)\n-5F9BEA Filename Length       0061 (97)\n-5F9BEC Extra Length          0009 (9)\n-5F9BEE Comment Length        0000 (0)\n-5F9BF0 Disk Start            0000 (0)\n-5F9BF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9BF4 Ext File Attributes   00000000 (0)\n-5F9BF8 Local Header Offset   000DB388 (897928)\n-5F9BFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9BFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9C5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9C5F   Length              0005 (5)\n-5F9C61   Flags               01 (1) 'Modification'\n-5F9C62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9C66 CENTRAL HEADER #377   02014B50 (33639248)\n-5F9C6A Created Zip Spec      14 (20) '2.0'\n-5F9C6B Created OS            00 (0) 'MS-DOS'\n-5F9C6C Extract Zip Spec      14 (20) '2.0'\n-5F9C6D Extract OS            00 (0) 'MS-DOS'\n-5F9C6E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9C70 Compression Method    0000 (0) 'Stored'\n-5F9C72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9C76 CRC                   80ED3BA4 (2163030948)\n-5F9C7A Compressed Size       000015D0 (5584)\n-5F9C7E Uncompressed Size     000015D0 (5584)\n-5F9C82 Filename Length       0077 (119)\n-5F9C84 Extra Length          0009 (9)\n-5F9C86 Comment Length        0000 (0)\n-5F9C88 Disk Start            0000 (0)\n-5F9C8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9C8C Ext File Attributes   00000000 (0)\n-5F9C90 Local Header Offset   000DB410 (898064)\n-5F9C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9D0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9D0D   Length              0005 (5)\n-5F9D0F   Flags               01 (1) 'Modification'\n-5F9D10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9D14 CENTRAL HEADER #378   02014B50 (33639248)\n-5F9D18 Created Zip Spec      14 (20) '2.0'\n-5F9D19 Created OS            00 (0) 'MS-DOS'\n-5F9D1A Extract Zip Spec      14 (20) '2.0'\n-5F9D1B Extract OS            00 (0) 'MS-DOS'\n-5F9D1C General Purpose Flag  0000 (0)\n-5F9D1E Compression Method    0000 (0) 'Stored'\n-5F9D20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9D24 CRC                   00000000 (0)\n-5F9D28 Compressed Size       00000000 (0)\n-5F9D2C Uncompressed Size     00000000 (0)\n-5F9D30 Filename Length       0067 (103)\n-5F9D32 Extra Length          0009 (9)\n-5F9D34 Comment Length        0000 (0)\n-5F9D36 Disk Start            0000 (0)\n-5F9D38 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9D3A Ext File Attributes   00000000 (0)\n-5F9D3E Local Header Offset   000DCA8E (903822)\n-5F9D42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9D42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9DA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9DAB   Length              0005 (5)\n-5F9DAD   Flags               01 (1) 'Modification'\n-5F9DAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9DB2 CENTRAL HEADER #379   02014B50 (33639248)\n-5F9DB6 Created Zip Spec      14 (20) '2.0'\n-5F9DB7 Created OS            00 (0) 'MS-DOS'\n-5F9DB8 Extract Zip Spec      14 (20) '2.0'\n-5F9DB9 Extract OS            00 (0) 'MS-DOS'\n-5F9DBA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9DBC Compression Method    0000 (0) 'Stored'\n-5F9DBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9DC2 CRC                   BEB620A1 (3199606945)\n-5F9DC6 Compressed Size       00001FB2 (8114)\n-5F9DCA Uncompressed Size     00001FB2 (8114)\n-5F9DCE Filename Length       007D (125)\n-5F9DD0 Extra Length          0009 (9)\n-5F9DD2 Comment Length        0000 (0)\n-5F9DD4 Disk Start            0000 (0)\n-5F9DD6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9DD8 Ext File Attributes   00000000 (0)\n-5F9DDC Local Header Offset   000DCB1C (903964)\n-5F9DE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9DE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9E5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9E5F   Length              0005 (5)\n-5F9E61   Flags               01 (1) 'Modification'\n-5F9E62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9E66 CENTRAL HEADER #380   02014B50 (33639248)\n-5F9E6A Created Zip Spec      14 (20) '2.0'\n-5F9E6B Created OS            00 (0) 'MS-DOS'\n-5F9E6C Extract Zip Spec      14 (20) '2.0'\n-5F9E6D Extract OS            00 (0) 'MS-DOS'\n-5F9E6E General Purpose Flag  0000 (0)\n-5F9E70 Compression Method    0000 (0) 'Stored'\n-5F9E72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9E76 CRC                   00000000 (0)\n-5F9E7A Compressed Size       00000000 (0)\n-5F9E7E Uncompressed Size     00000000 (0)\n-5F9E82 Filename Length       005E (94)\n-5F9E84 Extra Length          0009 (9)\n-5F9E86 Comment Length        0000 (0)\n-5F9E88 Disk Start            0000 (0)\n-5F9E8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9E8C Ext File Attributes   00000000 (0)\n-5F9E90 Local Header Offset   000DEB82 (912258)\n-5F9E94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9E94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9EF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9EF4   Length              0005 (5)\n-5F9EF6   Flags               01 (1) 'Modification'\n-5F9EF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9EFB CENTRAL HEADER #381   02014B50 (33639248)\n-5F9EFF Created Zip Spec      14 (20) '2.0'\n-5F9F00 Created OS            00 (0) 'MS-DOS'\n-5F9F01 Extract Zip Spec      14 (20) '2.0'\n-5F9F02 Extract OS            00 (0) 'MS-DOS'\n-5F9F03 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5F9F05 Compression Method    0000 (0) 'Stored'\n-5F9F07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9F0B CRC                   61A0CE5A (1637928538)\n-5F9F0F Compressed Size       000012FA (4858)\n-5F9F13 Uncompressed Size     000012FA (4858)\n-5F9F17 Filename Length       0074 (116)\n-5F9F19 Extra Length          0009 (9)\n-5F9F1B Comment Length        0000 (0)\n-5F9F1D Disk Start            0000 (0)\n-5F9F1F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9F21 Ext File Attributes   00000000 (0)\n-5F9F25 Local Header Offset   000DEC07 (912391)\n-5F9F29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9F29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F9F9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F9F9F   Length              0005 (5)\n-5F9FA1   Flags               01 (1) 'Modification'\n-5F9FA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5F9FA6 CENTRAL HEADER #382   02014B50 (33639248)\n-5F9FAA Created Zip Spec      14 (20) '2.0'\n-5F9FAB Created OS            00 (0) 'MS-DOS'\n-5F9FAC Extract Zip Spec      14 (20) '2.0'\n-5F9FAD Extract OS            00 (0) 'MS-DOS'\n-5F9FAE General Purpose Flag  0000 (0)\n-5F9FB0 Compression Method    0000 (0) 'Stored'\n-5F9FB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F9FB6 CRC                   00000000 (0)\n-5F9FBA Compressed Size       00000000 (0)\n-5F9FBE Uncompressed Size     00000000 (0)\n-5F9FC2 Filename Length       0061 (97)\n-5F9FC4 Extra Length          0009 (9)\n-5F9FC6 Comment Length        0000 (0)\n-5F9FC8 Disk Start            0000 (0)\n-5F9FCA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5F9FCC Ext File Attributes   00000000 (0)\n-5F9FD0 Local Header Offset   000DFFAC (917420)\n-5F9FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F9FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA035 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA037   Length              0005 (5)\n-5FA039   Flags               01 (1) 'Modification'\n-5FA03A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA03E CENTRAL HEADER #383   02014B50 (33639248)\n-5FA042 Created Zip Spec      14 (20) '2.0'\n-5FA043 Created OS            00 (0) 'MS-DOS'\n-5FA044 Extract Zip Spec      14 (20) '2.0'\n-5FA045 Extract OS            00 (0) 'MS-DOS'\n-5FA046 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA048 Compression Method    0000 (0) 'Stored'\n-5FA04A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA04E CRC                   624BE63E (1649141310)\n-5FA052 Compressed Size       00001315 (4885)\n-5FA056 Uncompressed Size     00001315 (4885)\n-5FA05A Filename Length       0077 (119)\n-5FA05C Extra Length          0009 (9)\n-5FA05E Comment Length        0000 (0)\n-5FA060 Disk Start            0000 (0)\n-5FA062 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA064 Ext File Attributes   00000000 (0)\n-5FA068 Local Header Offset   000E0034 (917556)\n-5FA06C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA06C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA0E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA0E5   Length              0005 (5)\n-5FA0E7   Flags               01 (1) 'Modification'\n-5FA0E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA0EC CENTRAL HEADER #384   02014B50 (33639248)\n-5FA0F0 Created Zip Spec      14 (20) '2.0'\n-5FA0F1 Created OS            00 (0) 'MS-DOS'\n-5FA0F2 Extract Zip Spec      14 (20) '2.0'\n-5FA0F3 Extract OS            00 (0) 'MS-DOS'\n-5FA0F4 General Purpose Flag  0000 (0)\n-5FA0F6 Compression Method    0000 (0) 'Stored'\n-5FA0F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA0FC CRC                   00000000 (0)\n-5FA100 Compressed Size       00000000 (0)\n-5FA104 Uncompressed Size     00000000 (0)\n-5FA108 Filename Length       005D (93)\n-5FA10A Extra Length          0009 (9)\n-5FA10C Comment Length        0000 (0)\n-5FA10E Disk Start            0000 (0)\n-5FA110 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA112 Ext File Attributes   00000000 (0)\n-5FA116 Local Header Offset   000E13F7 (922615)\n-5FA11A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA11A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA177 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA179   Length              0005 (5)\n-5FA17B   Flags               01 (1) 'Modification'\n-5FA17C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA180 CENTRAL HEADER #385   02014B50 (33639248)\n-5FA184 Created Zip Spec      14 (20) '2.0'\n-5FA185 Created OS            00 (0) 'MS-DOS'\n-5FA186 Extract Zip Spec      14 (20) '2.0'\n-5FA187 Extract OS            00 (0) 'MS-DOS'\n-5FA188 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA18A Compression Method    0000 (0) 'Stored'\n-5FA18C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA190 CRC                   F4A07CA3 (4104158371)\n-5FA194 Compressed Size       000027E4 (10212)\n-5FA198 Uncompressed Size     000027E4 (10212)\n-5FA19C Filename Length       0073 (115)\n-5FA19E Extra Length          0009 (9)\n-5FA1A0 Comment Length        0000 (0)\n-5FA1A2 Disk Start            0000 (0)\n-5FA1A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA1A6 Ext File Attributes   00000000 (0)\n-5FA1AA Local Header Offset   000E147B (922747)\n-5FA1AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA1AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA221 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA223   Length              0005 (5)\n-5FA225   Flags               01 (1) 'Modification'\n-5FA226   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA22A CENTRAL HEADER #386   02014B50 (33639248)\n-5FA22E Created Zip Spec      14 (20) '2.0'\n-5FA22F Created OS            00 (0) 'MS-DOS'\n-5FA230 Extract Zip Spec      14 (20) '2.0'\n-5FA231 Extract OS            00 (0) 'MS-DOS'\n-5FA232 General Purpose Flag  0000 (0)\n-5FA234 Compression Method    0000 (0) 'Stored'\n-5FA236 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA23A CRC                   00000000 (0)\n-5FA23E Compressed Size       00000000 (0)\n-5FA242 Uncompressed Size     00000000 (0)\n-5FA246 Filename Length       0065 (101)\n-5FA248 Extra Length          0009 (9)\n-5FA24A Comment Length        0000 (0)\n-5FA24C Disk Start            0000 (0)\n-5FA24E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA250 Ext File Attributes   00000000 (0)\n-5FA254 Local Header Offset   000E3D09 (933129)\n-5FA258 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA258: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA2BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA2BF   Length              0005 (5)\n-5FA2C1   Flags               01 (1) 'Modification'\n-5FA2C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA2C6 CENTRAL HEADER #387   02014B50 (33639248)\n-5FA2CA Created Zip Spec      14 (20) '2.0'\n-5FA2CB Created OS            00 (0) 'MS-DOS'\n-5FA2CC Extract Zip Spec      14 (20) '2.0'\n-5FA2CD Extract OS            00 (0) 'MS-DOS'\n-5FA2CE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA2D0 Compression Method    0000 (0) 'Stored'\n-5FA2D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA2D6 CRC                   6E031E40 (1845698112)\n-5FA2DA Compressed Size       00001276 (4726)\n-5FA2DE Uncompressed Size     00001276 (4726)\n-5FA2E2 Filename Length       007B (123)\n-5FA2E4 Extra Length          0009 (9)\n-5FA2E6 Comment Length        0000 (0)\n-5FA2E8 Disk Start            0000 (0)\n-5FA2EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA2EC Ext File Attributes   00000000 (0)\n-5FA2F0 Local Header Offset   000E3D95 (933269)\n-5FA2F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA2F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA36F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA371   Length              0005 (5)\n-5FA373   Flags               01 (1) 'Modification'\n-5FA374   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA378 CENTRAL HEADER #388   02014B50 (33639248)\n-5FA37C Created Zip Spec      14 (20) '2.0'\n-5FA37D Created OS            00 (0) 'MS-DOS'\n-5FA37E Extract Zip Spec      14 (20) '2.0'\n-5FA37F Extract OS            00 (0) 'MS-DOS'\n-5FA380 General Purpose Flag  0000 (0)\n-5FA382 Compression Method    0000 (0) 'Stored'\n-5FA384 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA388 CRC                   00000000 (0)\n-5FA38C Compressed Size       00000000 (0)\n-5FA390 Uncompressed Size     00000000 (0)\n-5FA394 Filename Length       0064 (100)\n-5FA396 Extra Length          0009 (9)\n-5FA398 Comment Length        0000 (0)\n-5FA39A Disk Start            0000 (0)\n-5FA39C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA39E Ext File Attributes   00000000 (0)\n-5FA3A2 Local Header Offset   000E50BD (938173)\n-5FA3A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA3A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA40A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA40C   Length              0005 (5)\n-5FA40E   Flags               01 (1) 'Modification'\n-5FA40F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA413 CENTRAL HEADER #389   02014B50 (33639248)\n-5FA417 Created Zip Spec      14 (20) '2.0'\n-5FA418 Created OS            00 (0) 'MS-DOS'\n-5FA419 Extract Zip Spec      14 (20) '2.0'\n-5FA41A Extract OS            00 (0) 'MS-DOS'\n-5FA41B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA41D Compression Method    0000 (0) 'Stored'\n-5FA41F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA423 CRC                   5987930A (1502057226)\n-5FA427 Compressed Size       00000BDE (3038)\n-5FA42B Uncompressed Size     00000BDE (3038)\n-5FA42F Filename Length       007A (122)\n-5FA431 Extra Length          0009 (9)\n-5FA433 Comment Length        0000 (0)\n-5FA435 Disk Start            0000 (0)\n-5FA437 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA439 Ext File Attributes   00000000 (0)\n-5FA43D Local Header Offset   000E5148 (938312)\n-5FA441 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA441: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA4BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA4BD   Length              0005 (5)\n-5FA4BF   Flags               01 (1) 'Modification'\n-5FA4C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA4C4 CENTRAL HEADER #390   02014B50 (33639248)\n-5FA4C8 Created Zip Spec      14 (20) '2.0'\n-5FA4C9 Created OS            00 (0) 'MS-DOS'\n-5FA4CA Extract Zip Spec      14 (20) '2.0'\n-5FA4CB Extract OS            00 (0) 'MS-DOS'\n-5FA4CC General Purpose Flag  0000 (0)\n-5FA4CE Compression Method    0000 (0) 'Stored'\n-5FA4D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA4D4 CRC                   00000000 (0)\n-5FA4D8 Compressed Size       00000000 (0)\n-5FA4DC Uncompressed Size     00000000 (0)\n-5FA4E0 Filename Length       0065 (101)\n-5FA4E2 Extra Length          0009 (9)\n-5FA4E4 Comment Length        0000 (0)\n-5FA4E6 Disk Start            0000 (0)\n-5FA4E8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA4EA Ext File Attributes   00000000 (0)\n-5FA4EE Local Header Offset   000E5DD7 (941527)\n-5FA4F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA4F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA557 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA559   Length              0005 (5)\n-5FA55B   Flags               01 (1) 'Modification'\n-5FA55C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA560 CENTRAL HEADER #391   02014B50 (33639248)\n-5FA564 Created Zip Spec      14 (20) '2.0'\n-5FA565 Created OS            00 (0) 'MS-DOS'\n-5FA566 Extract Zip Spec      14 (20) '2.0'\n-5FA567 Extract OS            00 (0) 'MS-DOS'\n-5FA568 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA56A Compression Method    0000 (0) 'Stored'\n-5FA56C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA570 CRC                   CA93F7B9 (3398694841)\n-5FA574 Compressed Size       000008CF (2255)\n-5FA578 Uncompressed Size     000008CF (2255)\n-5FA57C Filename Length       007B (123)\n-5FA57E Extra Length          0009 (9)\n-5FA580 Comment Length        0000 (0)\n-5FA582 Disk Start            0000 (0)\n-5FA584 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA586 Ext File Attributes   00000000 (0)\n-5FA58A Local Header Offset   000E5E63 (941667)\n-5FA58E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA58E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA609 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA60B   Length              0005 (5)\n-5FA60D   Flags               01 (1) 'Modification'\n-5FA60E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA612 CENTRAL HEADER #392   02014B50 (33639248)\n-5FA616 Created Zip Spec      14 (20) '2.0'\n-5FA617 Created OS            00 (0) 'MS-DOS'\n-5FA618 Extract Zip Spec      14 (20) '2.0'\n-5FA619 Extract OS            00 (0) 'MS-DOS'\n-5FA61A General Purpose Flag  0000 (0)\n-5FA61C Compression Method    0000 (0) 'Stored'\n-5FA61E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA622 CRC                   00000000 (0)\n-5FA626 Compressed Size       00000000 (0)\n-5FA62A Uncompressed Size     00000000 (0)\n-5FA62E Filename Length       0063 (99)\n-5FA630 Extra Length          0009 (9)\n-5FA632 Comment Length        0000 (0)\n-5FA634 Disk Start            0000 (0)\n-5FA636 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA638 Ext File Attributes   00000000 (0)\n-5FA63C Local Header Offset   000E67E4 (944100)\n-5FA640 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA640: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA6A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA6A5   Length              0005 (5)\n-5FA6A7   Flags               01 (1) 'Modification'\n-5FA6A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA6AC CENTRAL HEADER #393   02014B50 (33639248)\n-5FA6B0 Created Zip Spec      14 (20) '2.0'\n-5FA6B1 Created OS            00 (0) 'MS-DOS'\n-5FA6B2 Extract Zip Spec      14 (20) '2.0'\n-5FA6B3 Extract OS            00 (0) 'MS-DOS'\n-5FA6B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA6B6 Compression Method    0000 (0) 'Stored'\n-5FA6B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA6BC CRC                   673E5975 (1732139381)\n-5FA6C0 Compressed Size       00000CA9 (3241)\n-5FA6C4 Uncompressed Size     00000CA9 (3241)\n-5FA6C8 Filename Length       0079 (121)\n-5FA6CA Extra Length          0009 (9)\n-5FA6CC Comment Length        0000 (0)\n-5FA6CE Disk Start            0000 (0)\n-5FA6D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA6D2 Ext File Attributes   00000000 (0)\n-5FA6D6 Local Header Offset   000E686E (944238)\n-5FA6DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA6DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA753 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA755   Length              0005 (5)\n-5FA757   Flags               01 (1) 'Modification'\n-5FA758   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA75C CENTRAL HEADER #394   02014B50 (33639248)\n-5FA760 Created Zip Spec      14 (20) '2.0'\n-5FA761 Created OS            00 (0) 'MS-DOS'\n-5FA762 Extract Zip Spec      14 (20) '2.0'\n-5FA763 Extract OS            00 (0) 'MS-DOS'\n-5FA764 General Purpose Flag  0000 (0)\n-5FA766 Compression Method    0000 (0) 'Stored'\n-5FA768 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA76C CRC                   00000000 (0)\n-5FA770 Compressed Size       00000000 (0)\n-5FA774 Uncompressed Size     00000000 (0)\n-5FA778 Filename Length       0061 (97)\n-5FA77A Extra Length          0009 (9)\n-5FA77C Comment Length        0000 (0)\n-5FA77E Disk Start            0000 (0)\n-5FA780 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA782 Ext File Attributes   00000000 (0)\n-5FA786 Local Header Offset   000E75C7 (947655)\n-5FA78A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA78A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA7EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA7ED   Length              0005 (5)\n-5FA7EF   Flags               01 (1) 'Modification'\n-5FA7F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA7F4 CENTRAL HEADER #395   02014B50 (33639248)\n-5FA7F8 Created Zip Spec      14 (20) '2.0'\n-5FA7F9 Created OS            00 (0) 'MS-DOS'\n-5FA7FA Extract Zip Spec      14 (20) '2.0'\n-5FA7FB Extract OS            00 (0) 'MS-DOS'\n-5FA7FC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA7FE Compression Method    0000 (0) 'Stored'\n-5FA800 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA804 CRC                   33033645 (855848517)\n-5FA808 Compressed Size       0000503C (20540)\n-5FA80C Uncompressed Size     0000503C (20540)\n-5FA810 Filename Length       0077 (119)\n-5FA812 Extra Length          0009 (9)\n-5FA814 Comment Length        0000 (0)\n-5FA816 Disk Start            0000 (0)\n-5FA818 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA81A Ext File Attributes   00000000 (0)\n-5FA81E Local Header Offset   000E764F (947791)\n-5FA822 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA822: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA899 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA89B   Length              0005 (5)\n-5FA89D   Flags               01 (1) 'Modification'\n-5FA89E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA8A2 CENTRAL HEADER #396   02014B50 (33639248)\n-5FA8A6 Created Zip Spec      14 (20) '2.0'\n-5FA8A7 Created OS            00 (0) 'MS-DOS'\n-5FA8A8 Extract Zip Spec      14 (20) '2.0'\n-5FA8A9 Extract OS            00 (0) 'MS-DOS'\n-5FA8AA General Purpose Flag  0000 (0)\n-5FA8AC Compression Method    0000 (0) 'Stored'\n-5FA8AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA8B2 CRC                   00000000 (0)\n-5FA8B6 Compressed Size       00000000 (0)\n-5FA8BA Uncompressed Size     00000000 (0)\n-5FA8BE Filename Length       0064 (100)\n-5FA8C0 Extra Length          0009 (9)\n-5FA8C2 Comment Length        0000 (0)\n-5FA8C4 Disk Start            0000 (0)\n-5FA8C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA8C8 Ext File Attributes   00000000 (0)\n-5FA8CC Local Header Offset   000EC739 (968505)\n-5FA8D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA8D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA934 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA936   Length              0005 (5)\n-5FA938   Flags               01 (1) 'Modification'\n-5FA939   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA93D CENTRAL HEADER #397   02014B50 (33639248)\n-5FA941 Created Zip Spec      14 (20) '2.0'\n-5FA942 Created OS            00 (0) 'MS-DOS'\n-5FA943 Extract Zip Spec      14 (20) '2.0'\n-5FA944 Extract OS            00 (0) 'MS-DOS'\n-5FA945 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FA947 Compression Method    0000 (0) 'Stored'\n-5FA949 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA94D CRC                   F5037A64 (4110645860)\n-5FA951 Compressed Size       0000080E (2062)\n-5FA955 Uncompressed Size     0000080E (2062)\n-5FA959 Filename Length       007A (122)\n-5FA95B Extra Length          0009 (9)\n-5FA95D Comment Length        0000 (0)\n-5FA95F Disk Start            0000 (0)\n-5FA961 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FA963 Ext File Attributes   00000000 (0)\n-5FA967 Local Header Offset   000EC7C4 (968644)\n-5FA96B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FA96B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FA9E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FA9E7   Length              0005 (5)\n-5FA9E9   Flags               01 (1) 'Modification'\n-5FA9EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FA9EE CENTRAL HEADER #398   02014B50 (33639248)\n-5FA9F2 Created Zip Spec      14 (20) '2.0'\n-5FA9F3 Created OS            00 (0) 'MS-DOS'\n-5FA9F4 Extract Zip Spec      14 (20) '2.0'\n-5FA9F5 Extract OS            00 (0) 'MS-DOS'\n-5FA9F6 General Purpose Flag  0000 (0)\n-5FA9F8 Compression Method    0000 (0) 'Stored'\n-5FA9FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FA9FE CRC                   00000000 (0)\n-5FAA02 Compressed Size       00000000 (0)\n-5FAA06 Uncompressed Size     00000000 (0)\n-5FAA0A Filename Length       005A (90)\n-5FAA0C Extra Length          0009 (9)\n-5FAA0E Comment Length        0000 (0)\n-5FAA10 Disk Start            0000 (0)\n-5FAA12 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAA14 Ext File Attributes   00000000 (0)\n-5FAA18 Local Header Offset   000ED083 (970883)\n-5FAA1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F9DBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9DBD   Length              0005 (5)\n+5F9DBF   Flags               01 (1) 'Modification'\n+5F9DC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9DC4 CENTRAL HEADER #292   02014B50 (33639248)\n+5F9DC8 Created Zip Spec      14 (20) '2.0'\n+5F9DC9 Created OS            00 (0) 'MS-DOS'\n+5F9DCA Extract Zip Spec      14 (20) '2.0'\n+5F9DCB Extract OS            00 (0) 'MS-DOS'\n+5F9DCC General Purpose Flag  0000 (0)\n+5F9DCE Compression Method    0000 (0) 'Stored'\n+5F9DD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9DD4 CRC                   00000000 (0)\n+5F9DD8 Compressed Size       00000000 (0)\n+5F9DDC Uncompressed Size     00000000 (0)\n+5F9DE0 Filename Length       0061 (97)\n+5F9DE2 Extra Length          0009 (9)\n+5F9DE4 Comment Length        0000 (0)\n+5F9DE6 Disk Start            0000 (0)\n+5F9DE8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9DEA Ext File Attributes   00000000 (0)\n+5F9DEE Local Header Offset   000AAD94 (699796)\n+5F9DF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9DF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9E53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9E55   Length              0005 (5)\n+5F9E57   Flags               01 (1) 'Modification'\n+5F9E58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9E5C CENTRAL HEADER #293   02014B50 (33639248)\n+5F9E60 Created Zip Spec      14 (20) '2.0'\n+5F9E61 Created OS            00 (0) 'MS-DOS'\n+5F9E62 Extract Zip Spec      14 (20) '2.0'\n+5F9E63 Extract OS            00 (0) 'MS-DOS'\n+5F9E64 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9E66 Compression Method    0000 (0) 'Stored'\n+5F9E68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9E6C CRC                   C7DF88BB (3353315515)\n+5F9E70 Compressed Size       00009335 (37685)\n+5F9E74 Uncompressed Size     00009335 (37685)\n+5F9E78 Filename Length       0077 (119)\n+5F9E7A Extra Length          0009 (9)\n+5F9E7C Comment Length        0000 (0)\n+5F9E7E Disk Start            0000 (0)\n+5F9E80 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9E82 Ext File Attributes   00000000 (0)\n+5F9E86 Local Header Offset   000AAE1C (699932)\n+5F9E8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9E8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9F01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9F03   Length              0005 (5)\n+5F9F05   Flags               01 (1) 'Modification'\n+5F9F06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9F0A CENTRAL HEADER #294   02014B50 (33639248)\n+5F9F0E Created Zip Spec      14 (20) '2.0'\n+5F9F0F Created OS            00 (0) 'MS-DOS'\n+5F9F10 Extract Zip Spec      14 (20) '2.0'\n+5F9F11 Extract OS            00 (0) 'MS-DOS'\n+5F9F12 General Purpose Flag  0000 (0)\n+5F9F14 Compression Method    0000 (0) 'Stored'\n+5F9F16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9F1A CRC                   00000000 (0)\n+5F9F1E Compressed Size       00000000 (0)\n+5F9F22 Uncompressed Size     00000000 (0)\n+5F9F26 Filename Length       006A (106)\n+5F9F28 Extra Length          0009 (9)\n+5F9F2A Comment Length        0000 (0)\n+5F9F2C Disk Start            0000 (0)\n+5F9F2E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9F30 Ext File Attributes   00000000 (0)\n+5F9F34 Local Header Offset   000B41FF (737791)\n+5F9F38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9F38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F9FA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F9FA4   Length              0005 (5)\n+5F9FA6   Flags               01 (1) 'Modification'\n+5F9FA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5F9FAB CENTRAL HEADER #295   02014B50 (33639248)\n+5F9FAF Created Zip Spec      14 (20) '2.0'\n+5F9FB0 Created OS            00 (0) 'MS-DOS'\n+5F9FB1 Extract Zip Spec      14 (20) '2.0'\n+5F9FB2 Extract OS            00 (0) 'MS-DOS'\n+5F9FB3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5F9FB5 Compression Method    0000 (0) 'Stored'\n+5F9FB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F9FBB CRC                   217BBE0B (561757707)\n+5F9FBF Compressed Size       00001BB1 (7089)\n+5F9FC3 Uncompressed Size     00001BB1 (7089)\n+5F9FC7 Filename Length       0080 (128)\n+5F9FC9 Extra Length          0009 (9)\n+5F9FCB Comment Length        0000 (0)\n+5F9FCD Disk Start            0000 (0)\n+5F9FCF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5F9FD1 Ext File Attributes   00000000 (0)\n+5F9FD5 Local Header Offset   000B4290 (737936)\n+5F9FD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F9FD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA059 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA05B   Length              0005 (5)\n+5FA05D   Flags               01 (1) 'Modification'\n+5FA05E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA062 CENTRAL HEADER #296   02014B50 (33639248)\n+5FA066 Created Zip Spec      14 (20) '2.0'\n+5FA067 Created OS            00 (0) 'MS-DOS'\n+5FA068 Extract Zip Spec      14 (20) '2.0'\n+5FA069 Extract OS            00 (0) 'MS-DOS'\n+5FA06A General Purpose Flag  0000 (0)\n+5FA06C Compression Method    0000 (0) 'Stored'\n+5FA06E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA072 CRC                   00000000 (0)\n+5FA076 Compressed Size       00000000 (0)\n+5FA07A Uncompressed Size     00000000 (0)\n+5FA07E Filename Length       0029 (41)\n+5FA080 Extra Length          0009 (9)\n+5FA082 Comment Length        0000 (0)\n+5FA084 Disk Start            0000 (0)\n+5FA086 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA088 Ext File Attributes   00000000 (0)\n+5FA08C Local Header Offset   000B5EF8 (745208)\n+5FA090 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA090: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA0B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA0BB   Length              0005 (5)\n+5FA0BD   Flags               01 (1) 'Modification'\n+5FA0BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA0C2 CENTRAL HEADER #297   02014B50 (33639248)\n+5FA0C6 Created Zip Spec      14 (20) '2.0'\n+5FA0C7 Created OS            00 (0) 'MS-DOS'\n+5FA0C8 Extract Zip Spec      14 (20) '2.0'\n+5FA0C9 Extract OS            00 (0) 'MS-DOS'\n+5FA0CA General Purpose Flag  0000 (0)\n+5FA0CC Compression Method    0000 (0) 'Stored'\n+5FA0CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA0D2 CRC                   00000000 (0)\n+5FA0D6 Compressed Size       00000000 (0)\n+5FA0DA Uncompressed Size     00000000 (0)\n+5FA0DE Filename Length       0030 (48)\n+5FA0E0 Extra Length          0009 (9)\n+5FA0E2 Comment Length        0000 (0)\n+5FA0E4 Disk Start            0000 (0)\n+5FA0E6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA0E8 Ext File Attributes   00000000 (0)\n+5FA0EC Local Header Offset   000B5F48 (745288)\n+5FA0F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA0F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA120 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA122   Length              0005 (5)\n+5FA124   Flags               01 (1) 'Modification'\n+5FA125   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA129 CENTRAL HEADER #298   02014B50 (33639248)\n+5FA12D Created Zip Spec      14 (20) '2.0'\n+5FA12E Created OS            00 (0) 'MS-DOS'\n+5FA12F Extract Zip Spec      14 (20) '2.0'\n+5FA130 Extract OS            00 (0) 'MS-DOS'\n+5FA131 General Purpose Flag  0000 (0)\n+5FA133 Compression Method    0000 (0) 'Stored'\n+5FA135 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA139 CRC                   00000000 (0)\n+5FA13D Compressed Size       00000000 (0)\n+5FA141 Uncompressed Size     00000000 (0)\n+5FA145 Filename Length       006A (106)\n+5FA147 Extra Length          0009 (9)\n+5FA149 Comment Length        0000 (0)\n+5FA14B Disk Start            0000 (0)\n+5FA14D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA14F Ext File Attributes   00000000 (0)\n+5FA153 Local Header Offset   000B5F9F (745375)\n+5FA157 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA157: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA1C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA1C3   Length              0005 (5)\n+5FA1C5   Flags               01 (1) 'Modification'\n+5FA1C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA1CA CENTRAL HEADER #299   02014B50 (33639248)\n+5FA1CE Created Zip Spec      14 (20) '2.0'\n+5FA1CF Created OS            00 (0) 'MS-DOS'\n+5FA1D0 Extract Zip Spec      14 (20) '2.0'\n+5FA1D1 Extract OS            00 (0) 'MS-DOS'\n+5FA1D2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA1D4 Compression Method    0000 (0) 'Stored'\n+5FA1D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA1DA CRC                   DCEFA272 (3706692210)\n+5FA1DE Compressed Size       000009D3 (2515)\n+5FA1E2 Uncompressed Size     000009D3 (2515)\n+5FA1E6 Filename Length       0080 (128)\n+5FA1E8 Extra Length          0009 (9)\n+5FA1EA Comment Length        0000 (0)\n+5FA1EC Disk Start            0000 (0)\n+5FA1EE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA1F0 Ext File Attributes   00000000 (0)\n+5FA1F4 Local Header Offset   000B6030 (745520)\n+5FA1F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA1F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA278 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA27A   Length              0005 (5)\n+5FA27C   Flags               01 (1) 'Modification'\n+5FA27D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA281 CENTRAL HEADER #300   02014B50 (33639248)\n+5FA285 Created Zip Spec      14 (20) '2.0'\n+5FA286 Created OS            00 (0) 'MS-DOS'\n+5FA287 Extract Zip Spec      14 (20) '2.0'\n+5FA288 Extract OS            00 (0) 'MS-DOS'\n+5FA289 General Purpose Flag  0000 (0)\n+5FA28B Compression Method    0000 (0) 'Stored'\n+5FA28D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA291 CRC                   00000000 (0)\n+5FA295 Compressed Size       00000000 (0)\n+5FA299 Uncompressed Size     00000000 (0)\n+5FA29D Filename Length       006C (108)\n+5FA29F Extra Length          0009 (9)\n+5FA2A1 Comment Length        0000 (0)\n+5FA2A3 Disk Start            0000 (0)\n+5FA2A5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA2A7 Ext File Attributes   00000000 (0)\n+5FA2AB Local Header Offset   000B6ABA (748218)\n+5FA2AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA2AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA31B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA31D   Length              0005 (5)\n+5FA31F   Flags               01 (1) 'Modification'\n+5FA320   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA324 CENTRAL HEADER #301   02014B50 (33639248)\n+5FA328 Created Zip Spec      14 (20) '2.0'\n+5FA329 Created OS            00 (0) 'MS-DOS'\n+5FA32A Extract Zip Spec      14 (20) '2.0'\n+5FA32B Extract OS            00 (0) 'MS-DOS'\n+5FA32C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA32E Compression Method    0000 (0) 'Stored'\n+5FA330 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA334 CRC                   26E963FE (652829694)\n+5FA338 Compressed Size       00001276 (4726)\n+5FA33C Uncompressed Size     00001276 (4726)\n+5FA340 Filename Length       0082 (130)\n+5FA342 Extra Length          0009 (9)\n+5FA344 Comment Length        0000 (0)\n+5FA346 Disk Start            0000 (0)\n+5FA348 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA34A Ext File Attributes   00000000 (0)\n+5FA34E Local Header Offset   000B6B4D (748365)\n+5FA352 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA352: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA3D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA3D6   Length              0005 (5)\n+5FA3D8   Flags               01 (1) 'Modification'\n+5FA3D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA3DD CENTRAL HEADER #302   02014B50 (33639248)\n+5FA3E1 Created Zip Spec      14 (20) '2.0'\n+5FA3E2 Created OS            00 (0) 'MS-DOS'\n+5FA3E3 Extract Zip Spec      14 (20) '2.0'\n+5FA3E4 Extract OS            00 (0) 'MS-DOS'\n+5FA3E5 General Purpose Flag  0000 (0)\n+5FA3E7 Compression Method    0000 (0) 'Stored'\n+5FA3E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA3ED CRC                   00000000 (0)\n+5FA3F1 Compressed Size       00000000 (0)\n+5FA3F5 Uncompressed Size     00000000 (0)\n+5FA3F9 Filename Length       0028 (40)\n+5FA3FB Extra Length          0009 (9)\n+5FA3FD Comment Length        0000 (0)\n+5FA3FF Disk Start            0000 (0)\n+5FA401 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA403 Ext File Attributes   00000000 (0)\n+5FA407 Local Header Offset   000B7E7C (753276)\n+5FA40B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA40B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA433 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA435   Length              0005 (5)\n+5FA437   Flags               01 (1) 'Modification'\n+5FA438   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA43C CENTRAL HEADER #303   02014B50 (33639248)\n+5FA440 Created Zip Spec      14 (20) '2.0'\n+5FA441 Created OS            00 (0) 'MS-DOS'\n+5FA442 Extract Zip Spec      14 (20) '2.0'\n+5FA443 Extract OS            00 (0) 'MS-DOS'\n+5FA444 General Purpose Flag  0000 (0)\n+5FA446 Compression Method    0000 (0) 'Stored'\n+5FA448 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA44C CRC                   00000000 (0)\n+5FA450 Compressed Size       00000000 (0)\n+5FA454 Uncompressed Size     00000000 (0)\n+5FA458 Filename Length       002F (47)\n+5FA45A Extra Length          0009 (9)\n+5FA45C Comment Length        0000 (0)\n+5FA45E Disk Start            0000 (0)\n+5FA460 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA462 Ext File Attributes   00000000 (0)\n+5FA466 Local Header Offset   000B7ECB (753355)\n+5FA46A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA46A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA499 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA49B   Length              0005 (5)\n+5FA49D   Flags               01 (1) 'Modification'\n+5FA49E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA4A2 CENTRAL HEADER #304   02014B50 (33639248)\n+5FA4A6 Created Zip Spec      14 (20) '2.0'\n+5FA4A7 Created OS            00 (0) 'MS-DOS'\n+5FA4A8 Extract Zip Spec      14 (20) '2.0'\n+5FA4A9 Extract OS            00 (0) 'MS-DOS'\n+5FA4AA General Purpose Flag  0000 (0)\n+5FA4AC Compression Method    0000 (0) 'Stored'\n+5FA4AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA4B2 CRC                   00000000 (0)\n+5FA4B6 Compressed Size       00000000 (0)\n+5FA4BA Uncompressed Size     00000000 (0)\n+5FA4BE Filename Length       005F (95)\n+5FA4C0 Extra Length          0009 (9)\n+5FA4C2 Comment Length        0000 (0)\n+5FA4C4 Disk Start            0000 (0)\n+5FA4C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA4C8 Ext File Attributes   00000000 (0)\n+5FA4CC Local Header Offset   000B7F21 (753441)\n+5FA4D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA4D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA52F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA531   Length              0005 (5)\n+5FA533   Flags               01 (1) 'Modification'\n+5FA534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA538 CENTRAL HEADER #305   02014B50 (33639248)\n+5FA53C Created Zip Spec      14 (20) '2.0'\n+5FA53D Created OS            00 (0) 'MS-DOS'\n+5FA53E Extract Zip Spec      14 (20) '2.0'\n+5FA53F Extract OS            00 (0) 'MS-DOS'\n+5FA540 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA542 Compression Method    0000 (0) 'Stored'\n+5FA544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA548 CRC                   6B96B8CE (1805039822)\n+5FA54C Compressed Size       00008944 (35140)\n+5FA550 Uncompressed Size     00008944 (35140)\n+5FA554 Filename Length       0075 (117)\n+5FA556 Extra Length          0009 (9)\n+5FA558 Comment Length        0000 (0)\n+5FA55A Disk Start            0000 (0)\n+5FA55C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA55E Ext File Attributes   00000000 (0)\n+5FA562 Local Header Offset   000B7FA7 (753575)\n+5FA566 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA566: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA5DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA5DD   Length              0005 (5)\n+5FA5DF   Flags               01 (1) 'Modification'\n+5FA5E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA5E4 CENTRAL HEADER #306   02014B50 (33639248)\n+5FA5E8 Created Zip Spec      14 (20) '2.0'\n+5FA5E9 Created OS            00 (0) 'MS-DOS'\n+5FA5EA Extract Zip Spec      14 (20) '2.0'\n+5FA5EB Extract OS            00 (0) 'MS-DOS'\n+5FA5EC General Purpose Flag  0000 (0)\n+5FA5EE Compression Method    0000 (0) 'Stored'\n+5FA5F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA5F4 CRC                   00000000 (0)\n+5FA5F8 Compressed Size       00000000 (0)\n+5FA5FC Uncompressed Size     00000000 (0)\n+5FA600 Filename Length       0066 (102)\n+5FA602 Extra Length          0009 (9)\n+5FA604 Comment Length        0000 (0)\n+5FA606 Disk Start            0000 (0)\n+5FA608 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA60A Ext File Attributes   00000000 (0)\n+5FA60E Local Header Offset   000C0997 (788887)\n+5FA612 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA612: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA678 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA67A   Length              0005 (5)\n+5FA67C   Flags               01 (1) 'Modification'\n+5FA67D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA681 CENTRAL HEADER #307   02014B50 (33639248)\n+5FA685 Created Zip Spec      14 (20) '2.0'\n+5FA686 Created OS            00 (0) 'MS-DOS'\n+5FA687 Extract Zip Spec      14 (20) '2.0'\n+5FA688 Extract OS            00 (0) 'MS-DOS'\n+5FA689 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA68B Compression Method    0000 (0) 'Stored'\n+5FA68D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA691 CRC                   DB2A8543 (3676996931)\n+5FA695 Compressed Size       00001C3A (7226)\n+5FA699 Uncompressed Size     00001C3A (7226)\n+5FA69D Filename Length       007C (124)\n+5FA69F Extra Length          0009 (9)\n+5FA6A1 Comment Length        0000 (0)\n+5FA6A3 Disk Start            0000 (0)\n+5FA6A5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA6A7 Ext File Attributes   00000000 (0)\n+5FA6AB Local Header Offset   000C0A24 (789028)\n+5FA6AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA6AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA72B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA72D   Length              0005 (5)\n+5FA72F   Flags               01 (1) 'Modification'\n+5FA730   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA734 CENTRAL HEADER #308   02014B50 (33639248)\n+5FA738 Created Zip Spec      14 (20) '2.0'\n+5FA739 Created OS            00 (0) 'MS-DOS'\n+5FA73A Extract Zip Spec      14 (20) '2.0'\n+5FA73B Extract OS            00 (0) 'MS-DOS'\n+5FA73C General Purpose Flag  0000 (0)\n+5FA73E Compression Method    0000 (0) 'Stored'\n+5FA740 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA744 CRC                   00000000 (0)\n+5FA748 Compressed Size       00000000 (0)\n+5FA74C Uncompressed Size     00000000 (0)\n+5FA750 Filename Length       0069 (105)\n+5FA752 Extra Length          0009 (9)\n+5FA754 Comment Length        0000 (0)\n+5FA756 Disk Start            0000 (0)\n+5FA758 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA75A Ext File Attributes   00000000 (0)\n+5FA75E Local Header Offset   000C2711 (796433)\n+5FA762 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA762: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA7CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA7CD   Length              0005 (5)\n+5FA7CF   Flags               01 (1) 'Modification'\n+5FA7D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA7D4 CENTRAL HEADER #309   02014B50 (33639248)\n+5FA7D8 Created Zip Spec      14 (20) '2.0'\n+5FA7D9 Created OS            00 (0) 'MS-DOS'\n+5FA7DA Extract Zip Spec      14 (20) '2.0'\n+5FA7DB Extract OS            00 (0) 'MS-DOS'\n+5FA7DC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA7DE Compression Method    0000 (0) 'Stored'\n+5FA7E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA7E4 CRC                   FF5BC4DC (4284204252)\n+5FA7E8 Compressed Size       00001552 (5458)\n+5FA7EC Uncompressed Size     00001552 (5458)\n+5FA7F0 Filename Length       007F (127)\n+5FA7F2 Extra Length          0009 (9)\n+5FA7F4 Comment Length        0000 (0)\n+5FA7F6 Disk Start            0000 (0)\n+5FA7F8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA7FA Ext File Attributes   00000000 (0)\n+5FA7FE Local Header Offset   000C27A1 (796577)\n+5FA802 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA802: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA881 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA883   Length              0005 (5)\n+5FA885   Flags               01 (1) 'Modification'\n+5FA886   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA88A CENTRAL HEADER #310   02014B50 (33639248)\n+5FA88E Created Zip Spec      14 (20) '2.0'\n+5FA88F Created OS            00 (0) 'MS-DOS'\n+5FA890 Extract Zip Spec      14 (20) '2.0'\n+5FA891 Extract OS            00 (0) 'MS-DOS'\n+5FA892 General Purpose Flag  0000 (0)\n+5FA894 Compression Method    0000 (0) 'Stored'\n+5FA896 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA89A CRC                   00000000 (0)\n+5FA89E Compressed Size       00000000 (0)\n+5FA8A2 Uncompressed Size     00000000 (0)\n+5FA8A6 Filename Length       0069 (105)\n+5FA8A8 Extra Length          0009 (9)\n+5FA8AA Comment Length        0000 (0)\n+5FA8AC Disk Start            0000 (0)\n+5FA8AE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA8B0 Ext File Attributes   00000000 (0)\n+5FA8B4 Local Header Offset   000C3DA9 (802217)\n+5FA8B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA8B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA921 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA923   Length              0005 (5)\n+5FA925   Flags               01 (1) 'Modification'\n+5FA926   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA92A CENTRAL HEADER #311   02014B50 (33639248)\n+5FA92E Created Zip Spec      14 (20) '2.0'\n+5FA92F Created OS            00 (0) 'MS-DOS'\n+5FA930 Extract Zip Spec      14 (20) '2.0'\n+5FA931 Extract OS            00 (0) 'MS-DOS'\n+5FA932 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FA934 Compression Method    0000 (0) 'Stored'\n+5FA936 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA93A CRC                   D6140D51 (3591638353)\n+5FA93E Compressed Size       00003C2C (15404)\n+5FA942 Uncompressed Size     00003C2C (15404)\n+5FA946 Filename Length       007F (127)\n+5FA948 Extra Length          0009 (9)\n+5FA94A Comment Length        0000 (0)\n+5FA94C Disk Start            0000 (0)\n+5FA94E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FA950 Ext File Attributes   00000000 (0)\n+5FA954 Local Header Offset   000C3E39 (802361)\n+5FA958 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FA958: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FA9D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FA9D9   Length              0005 (5)\n+5FA9DB   Flags               01 (1) 'Modification'\n+5FA9DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FA9E0 CENTRAL HEADER #312   02014B50 (33639248)\n+5FA9E4 Created Zip Spec      14 (20) '2.0'\n+5FA9E5 Created OS            00 (0) 'MS-DOS'\n+5FA9E6 Extract Zip Spec      14 (20) '2.0'\n+5FA9E7 Extract OS            00 (0) 'MS-DOS'\n+5FA9E8 General Purpose Flag  0000 (0)\n+5FA9EA Compression Method    0000 (0) 'Stored'\n+5FA9EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FA9F0 CRC                   00000000 (0)\n+5FA9F4 Compressed Size       00000000 (0)\n+5FA9F8 Uncompressed Size     00000000 (0)\n+5FA9FC Filename Length       0068 (104)\n+5FA9FE Extra Length          0009 (9)\n+5FAA00 Comment Length        0000 (0)\n+5FAA02 Disk Start            0000 (0)\n+5FAA04 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAA06 Ext File Attributes   00000000 (0)\n+5FAA0A Local Header Offset   000C7B1B (817947)\n+5FAA0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5FAA1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FAA0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5FAA76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5FAA78   Length              0005 (5)\n 5FAA7A   Flags               01 (1) 'Modification'\n 5FAA7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-5FAA7F CENTRAL HEADER #399   02014B50 (33639248)\n+5FAA7F CENTRAL HEADER #313   02014B50 (33639248)\n 5FAA83 Created Zip Spec      14 (20) '2.0'\n 5FAA84 Created OS            00 (0) 'MS-DOS'\n 5FAA85 Extract Zip Spec      14 (20) '2.0'\n 5FAA86 Extract OS            00 (0) 'MS-DOS'\n 5FAA87 General Purpose Flag  0008 (8)\n        [Bit  3]              1 'Streamed'\n 5FAA89 Compression Method    0000 (0) 'Stored'\n 5FAA8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAA8F CRC                   DB187B38 (3675814712)\n-5FAA93 Compressed Size       00001A85 (6789)\n-5FAA97 Uncompressed Size     00001A85 (6789)\n-5FAA9B Filename Length       0070 (112)\n+5FAA8F CRC                   86CE2079 (2261655673)\n+5FAA93 Compressed Size       00002162 (8546)\n+5FAA97 Uncompressed Size     00002162 (8546)\n+5FAA9B Filename Length       007E (126)\n 5FAA9D Extra Length          0009 (9)\n 5FAA9F Comment Length        0000 (0)\n 5FAAA1 Disk Start            0000 (0)\n 5FAAA3 Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 5FAAA5 Ext File Attributes   00000000 (0)\n-5FAAA9 Local Header Offset   000ED104 (971012)\n-5FAAAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5FAAA9 Local Header Offset   000C7BAA (818090)\n+5FAAAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAAAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAB2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAB2D   Length              0005 (5)\n+5FAB2F   Flags               01 (1) 'Modification'\n+5FAB30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAB34 CENTRAL HEADER #314   02014B50 (33639248)\n+5FAB38 Created Zip Spec      14 (20) '2.0'\n+5FAB39 Created OS            00 (0) 'MS-DOS'\n+5FAB3A Extract Zip Spec      14 (20) '2.0'\n+5FAB3B Extract OS            00 (0) 'MS-DOS'\n+5FAB3C General Purpose Flag  0000 (0)\n+5FAB3E Compression Method    0000 (0) 'Stored'\n+5FAB40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAB44 CRC                   00000000 (0)\n+5FAB48 Compressed Size       00000000 (0)\n+5FAB4C Uncompressed Size     00000000 (0)\n+5FAB50 Filename Length       0026 (38)\n+5FAB52 Extra Length          0009 (9)\n+5FAB54 Comment Length        0000 (0)\n+5FAB56 Disk Start            0000 (0)\n+5FAB58 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAB5A Ext File Attributes   00000000 (0)\n+5FAB5E Local Header Offset   000C9DC1 (826817)\n+5FAB62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAB62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAB88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAB8A   Length              0005 (5)\n+5FAB8C   Flags               01 (1) 'Modification'\n+5FAB8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAB91 CENTRAL HEADER #315   02014B50 (33639248)\n+5FAB95 Created Zip Spec      14 (20) '2.0'\n+5FAB96 Created OS            00 (0) 'MS-DOS'\n+5FAB97 Extract Zip Spec      14 (20) '2.0'\n+5FAB98 Extract OS            00 (0) 'MS-DOS'\n+5FAB99 General Purpose Flag  0000 (0)\n+5FAB9B Compression Method    0000 (0) 'Stored'\n+5FAB9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FABA1 CRC                   00000000 (0)\n+5FABA5 Compressed Size       00000000 (0)\n+5FABA9 Uncompressed Size     00000000 (0)\n+5FABAD Filename Length       002D (45)\n+5FABAF Extra Length          0009 (9)\n+5FABB1 Comment Length        0000 (0)\n+5FABB3 Disk Start            0000 (0)\n+5FABB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FABB7 Ext File Attributes   00000000 (0)\n+5FABBB Local Header Offset   000C9E0E (826894)\n+5FABBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FABBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FABEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FABEE   Length              0005 (5)\n+5FABF0   Flags               01 (1) 'Modification'\n+5FABF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FABF5 CENTRAL HEADER #316   02014B50 (33639248)\n+5FABF9 Created Zip Spec      14 (20) '2.0'\n+5FABFA Created OS            00 (0) 'MS-DOS'\n+5FABFB Extract Zip Spec      14 (20) '2.0'\n+5FABFC Extract OS            00 (0) 'MS-DOS'\n+5FABFD General Purpose Flag  0000 (0)\n+5FABFF Compression Method    0000 (0) 'Stored'\n+5FAC01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAC05 CRC                   00000000 (0)\n+5FAC09 Compressed Size       00000000 (0)\n+5FAC0D Uncompressed Size     00000000 (0)\n+5FAC11 Filename Length       005B (91)\n+5FAC13 Extra Length          0009 (9)\n+5FAC15 Comment Length        0000 (0)\n+5FAC17 Disk Start            0000 (0)\n+5FAC19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAC1B Ext File Attributes   00000000 (0)\n+5FAC1F Local Header Offset   000C9E62 (826978)\n+5FAC23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAC23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAC7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAC80   Length              0005 (5)\n+5FAC82   Flags               01 (1) 'Modification'\n+5FAC83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAC87 CENTRAL HEADER #317   02014B50 (33639248)\n+5FAC8B Created Zip Spec      14 (20) '2.0'\n+5FAC8C Created OS            00 (0) 'MS-DOS'\n+5FAC8D Extract Zip Spec      14 (20) '2.0'\n+5FAC8E Extract OS            00 (0) 'MS-DOS'\n+5FAC8F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FAC91 Compression Method    0000 (0) 'Stored'\n+5FAC93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAC97 CRC                   B12610E6 (2972061926)\n+5FAC9B Compressed Size       00000A5B (2651)\n+5FAC9F Uncompressed Size     00000A5B (2651)\n+5FACA3 Filename Length       0071 (113)\n+5FACA5 Extra Length          0009 (9)\n+5FACA7 Comment Length        0000 (0)\n+5FACA9 Disk Start            0000 (0)\n+5FACAB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FACAD Ext File Attributes   00000000 (0)\n+5FACB1 Local Header Offset   000C9EE4 (827108)\n+5FACB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FACB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAD26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAD28   Length              0005 (5)\n+5FAD2A   Flags               01 (1) 'Modification'\n+5FAD2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAD2F CENTRAL HEADER #318   02014B50 (33639248)\n+5FAD33 Created Zip Spec      14 (20) '2.0'\n+5FAD34 Created OS            00 (0) 'MS-DOS'\n+5FAD35 Extract Zip Spec      14 (20) '2.0'\n+5FAD36 Extract OS            00 (0) 'MS-DOS'\n+5FAD37 General Purpose Flag  0000 (0)\n+5FAD39 Compression Method    0000 (0) 'Stored'\n+5FAD3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAD3F CRC                   00000000 (0)\n+5FAD43 Compressed Size       00000000 (0)\n+5FAD47 Uncompressed Size     00000000 (0)\n+5FAD4B Filename Length       0035 (53)\n+5FAD4D Extra Length          0009 (9)\n+5FAD4F Comment Length        0000 (0)\n+5FAD51 Disk Start            0000 (0)\n+5FAD53 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAD55 Ext File Attributes   00000000 (0)\n+5FAD59 Local Header Offset   000CA9E7 (829927)\n+5FAD5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAD5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAD92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAD94   Length              0005 (5)\n+5FAD96   Flags               01 (1) 'Modification'\n+5FAD97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAD9B CENTRAL HEADER #319   02014B50 (33639248)\n+5FAD9F Created Zip Spec      14 (20) '2.0'\n+5FADA0 Created OS            00 (0) 'MS-DOS'\n+5FADA1 Extract Zip Spec      14 (20) '2.0'\n+5FADA2 Extract OS            00 (0) 'MS-DOS'\n+5FADA3 General Purpose Flag  0000 (0)\n+5FADA5 Compression Method    0000 (0) 'Stored'\n+5FADA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FADAB CRC                   00000000 (0)\n+5FADAF Compressed Size       00000000 (0)\n+5FADB3 Uncompressed Size     00000000 (0)\n+5FADB7 Filename Length       003C (60)\n+5FADB9 Extra Length          0009 (9)\n+5FADBB Comment Length        0000 (0)\n+5FADBD Disk Start            0000 (0)\n+5FADBF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FADC1 Ext File Attributes   00000000 (0)\n+5FADC5 Local Header Offset   000CAA43 (830019)\n+5FADC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FADC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAE05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAE07   Length              0005 (5)\n+5FAE09   Flags               01 (1) 'Modification'\n+5FAE0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAE0E CENTRAL HEADER #320   02014B50 (33639248)\n+5FAE12 Created Zip Spec      14 (20) '2.0'\n+5FAE13 Created OS            00 (0) 'MS-DOS'\n+5FAE14 Extract Zip Spec      14 (20) '2.0'\n+5FAE15 Extract OS            00 (0) 'MS-DOS'\n+5FAE16 General Purpose Flag  0000 (0)\n+5FAE18 Compression Method    0000 (0) 'Stored'\n+5FAE1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAE1E CRC                   00000000 (0)\n+5FAE22 Compressed Size       00000000 (0)\n+5FAE26 Uncompressed Size     00000000 (0)\n+5FAE2A Filename Length       0076 (118)\n+5FAE2C Extra Length          0009 (9)\n+5FAE2E Comment Length        0000 (0)\n+5FAE30 Disk Start            0000 (0)\n+5FAE32 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAE34 Ext File Attributes   00000000 (0)\n+5FAE38 Local Header Offset   000CAAA6 (830118)\n+5FAE3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAE3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAEB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAEB4   Length              0005 (5)\n+5FAEB6   Flags               01 (1) 'Modification'\n+5FAEB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAEBB CENTRAL HEADER #321   02014B50 (33639248)\n+5FAEBF Created Zip Spec      14 (20) '2.0'\n+5FAEC0 Created OS            00 (0) 'MS-DOS'\n+5FAEC1 Extract Zip Spec      14 (20) '2.0'\n+5FAEC2 Extract OS            00 (0) 'MS-DOS'\n+5FAEC3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FAEC5 Compression Method    0000 (0) 'Stored'\n+5FAEC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAECB CRC                   041CE92B (69003563)\n+5FAECF Compressed Size       00000B22 (2850)\n+5FAED3 Uncompressed Size     00000B22 (2850)\n+5FAED7 Filename Length       008C (140)\n+5FAED9 Extra Length          0009 (9)\n+5FAEDB Comment Length        0000 (0)\n+5FAEDD Disk Start            0000 (0)\n+5FAEDF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAEE1 Ext File Attributes   00000000 (0)\n+5FAEE5 Local Header Offset   000CAB43 (830275)\n+5FAEE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAEE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FAF75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FAF77   Length              0005 (5)\n+5FAF79   Flags               01 (1) 'Modification'\n+5FAF7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FAF7E CENTRAL HEADER #322   02014B50 (33639248)\n+5FAF82 Created Zip Spec      14 (20) '2.0'\n+5FAF83 Created OS            00 (0) 'MS-DOS'\n+5FAF84 Extract Zip Spec      14 (20) '2.0'\n+5FAF85 Extract OS            00 (0) 'MS-DOS'\n+5FAF86 General Purpose Flag  0000 (0)\n+5FAF88 Compression Method    0000 (0) 'Stored'\n+5FAF8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FAF8E CRC                   00000000 (0)\n+5FAF92 Compressed Size       00000000 (0)\n+5FAF96 Uncompressed Size     00000000 (0)\n+5FAF9A Filename Length       0075 (117)\n+5FAF9C Extra Length          0009 (9)\n+5FAF9E Comment Length        0000 (0)\n+5FAFA0 Disk Start            0000 (0)\n+5FAFA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FAFA4 Ext File Attributes   00000000 (0)\n+5FAFA8 Local Header Offset   000CB728 (833320)\n+5FAFAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FAFAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB023   Length              0005 (5)\n+5FB025   Flags               01 (1) 'Modification'\n+5FB026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB02A CENTRAL HEADER #323   02014B50 (33639248)\n+5FB02E Created Zip Spec      14 (20) '2.0'\n+5FB02F Created OS            00 (0) 'MS-DOS'\n+5FB030 Extract Zip Spec      14 (20) '2.0'\n+5FB031 Extract OS            00 (0) 'MS-DOS'\n+5FB032 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB034 Compression Method    0000 (0) 'Stored'\n+5FB036 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB03A CRC                   16A4BA93 (379894419)\n+5FB03E Compressed Size       000016E4 (5860)\n+5FB042 Uncompressed Size     000016E4 (5860)\n+5FB046 Filename Length       008B (139)\n+5FB048 Extra Length          0009 (9)\n+5FB04A Comment Length        0000 (0)\n+5FB04C Disk Start            0000 (0)\n+5FB04E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB050 Ext File Attributes   00000000 (0)\n+5FB054 Local Header Offset   000CB7C4 (833476)\n+5FB058 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXX'\n+#\n+# WARNING: Offset 0x5FB058: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB0E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB0E5   Length              0005 (5)\n+5FB0E7   Flags               01 (1) 'Modification'\n+5FB0E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB0EC CENTRAL HEADER #324   02014B50 (33639248)\n+5FB0F0 Created Zip Spec      14 (20) '2.0'\n+5FB0F1 Created OS            00 (0) 'MS-DOS'\n+5FB0F2 Extract Zip Spec      14 (20) '2.0'\n+5FB0F3 Extract OS            00 (0) 'MS-DOS'\n+5FB0F4 General Purpose Flag  0000 (0)\n+5FB0F6 Compression Method    0000 (0) 'Stored'\n+5FB0F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB0FC CRC                   00000000 (0)\n+5FB100 Compressed Size       00000000 (0)\n+5FB104 Uncompressed Size     00000000 (0)\n+5FB108 Filename Length       0078 (120)\n+5FB10A Extra Length          0009 (9)\n+5FB10C Comment Length        0000 (0)\n+5FB10E Disk Start            0000 (0)\n+5FB110 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB112 Ext File Attributes   00000000 (0)\n+5FB116 Local Header Offset   000CCF6A (839530)\n+5FB11A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB11A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB192 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB194   Length              0005 (5)\n+5FB196   Flags               01 (1) 'Modification'\n+5FB197   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB19B CENTRAL HEADER #325   02014B50 (33639248)\n+5FB19F Created Zip Spec      14 (20) '2.0'\n+5FB1A0 Created OS            00 (0) 'MS-DOS'\n+5FB1A1 Extract Zip Spec      14 (20) '2.0'\n+5FB1A2 Extract OS            00 (0) 'MS-DOS'\n+5FB1A3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB1A5 Compression Method    0000 (0) 'Stored'\n+5FB1A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB1AB CRC                   390AB403 (957002755)\n+5FB1AF Compressed Size       00001068 (4200)\n+5FB1B3 Uncompressed Size     00001068 (4200)\n+5FB1B7 Filename Length       008E (142)\n+5FB1B9 Extra Length          0009 (9)\n+5FB1BB Comment Length        0000 (0)\n+5FB1BD Disk Start            0000 (0)\n+5FB1BF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB1C1 Ext File Attributes   00000000 (0)\n+5FB1C5 Local Header Offset   000CD009 (839689)\n+5FB1C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB1C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB257 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB259   Length              0005 (5)\n+5FB25B   Flags               01 (1) 'Modification'\n+5FB25C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB260 CENTRAL HEADER #326   02014B50 (33639248)\n+5FB264 Created Zip Spec      14 (20) '2.0'\n+5FB265 Created OS            00 (0) 'MS-DOS'\n+5FB266 Extract Zip Spec      14 (20) '2.0'\n+5FB267 Extract OS            00 (0) 'MS-DOS'\n+5FB268 General Purpose Flag  0000 (0)\n+5FB26A Compression Method    0000 (0) 'Stored'\n+5FB26C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB270 CRC                   00000000 (0)\n+5FB274 Compressed Size       00000000 (0)\n+5FB278 Uncompressed Size     00000000 (0)\n+5FB27C Filename Length       0074 (116)\n+5FB27E Extra Length          0009 (9)\n+5FB280 Comment Length        0000 (0)\n+5FB282 Disk Start            0000 (0)\n+5FB284 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB286 Ext File Attributes   00000000 (0)\n+5FB28A Local Header Offset   000CE136 (844086)\n+5FB28E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB28E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB302 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB304   Length              0005 (5)\n+5FB306   Flags               01 (1) 'Modification'\n+5FB307   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB30B CENTRAL HEADER #327   02014B50 (33639248)\n+5FB30F Created Zip Spec      14 (20) '2.0'\n+5FB310 Created OS            00 (0) 'MS-DOS'\n+5FB311 Extract Zip Spec      14 (20) '2.0'\n+5FB312 Extract OS            00 (0) 'MS-DOS'\n+5FB313 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB315 Compression Method    0000 (0) 'Stored'\n+5FB317 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB31B CRC                   3DE98548 (1038714184)\n+5FB31F Compressed Size       000016AA (5802)\n+5FB323 Uncompressed Size     000016AA (5802)\n+5FB327 Filename Length       008A (138)\n+5FB329 Extra Length          0009 (9)\n+5FB32B Comment Length        0000 (0)\n+5FB32D Disk Start            0000 (0)\n+5FB32F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB331 Ext File Attributes   00000000 (0)\n+5FB335 Local Header Offset   000CE1D1 (844241)\n+5FB339 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXX'\n #\n-# WARNING: Offset 0x5FAAAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FB339: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5FAB1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAB1F   Length              0005 (5)\n-5FAB21   Flags               01 (1) 'Modification'\n-5FAB22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAB26 CENTRAL HEADER #400   02014B50 (33639248)\n-5FAB2A Created Zip Spec      14 (20) '2.0'\n-5FAB2B Created OS            00 (0) 'MS-DOS'\n-5FAB2C Extract Zip Spec      14 (20) '2.0'\n-5FAB2D Extract OS            00 (0) 'MS-DOS'\n-5FAB2E General Purpose Flag  0000 (0)\n-5FAB30 Compression Method    0000 (0) 'Stored'\n-5FAB32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAB36 CRC                   00000000 (0)\n-5FAB3A Compressed Size       00000000 (0)\n-5FAB3E Uncompressed Size     00000000 (0)\n-5FAB42 Filename Length       005B (91)\n-5FAB44 Extra Length          0009 (9)\n-5FAB46 Comment Length        0000 (0)\n-5FAB48 Disk Start            0000 (0)\n-5FAB4A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAB4C Ext File Attributes   00000000 (0)\n-5FAB50 Local Header Offset   000EEC30 (977968)\n-5FAB54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAB54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FABAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FABB1   Length              0005 (5)\n-5FABB3   Flags               01 (1) 'Modification'\n-5FABB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FABB8 CENTRAL HEADER #401   02014B50 (33639248)\n-5FABBC Created Zip Spec      14 (20) '2.0'\n-5FABBD Created OS            00 (0) 'MS-DOS'\n-5FABBE Extract Zip Spec      14 (20) '2.0'\n-5FABBF Extract OS            00 (0) 'MS-DOS'\n-5FABC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FABC2 Compression Method    0000 (0) 'Stored'\n-5FABC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FABC8 CRC                   CD183667 (3440916071)\n-5FABCC Compressed Size       00001A6E (6766)\n-5FABD0 Uncompressed Size     00001A6E (6766)\n-5FABD4 Filename Length       0071 (113)\n-5FABD6 Extra Length          0009 (9)\n-5FABD8 Comment Length        0000 (0)\n-5FABDA Disk Start            0000 (0)\n-5FABDC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FABDE Ext File Attributes   00000000 (0)\n-5FABE2 Local Header Offset   000EECB2 (978098)\n-5FABE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FABE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FAC57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAC59   Length              0005 (5)\n-5FAC5B   Flags               01 (1) 'Modification'\n-5FAC5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAC60 CENTRAL HEADER #402   02014B50 (33639248)\n-5FAC64 Created Zip Spec      14 (20) '2.0'\n-5FAC65 Created OS            00 (0) 'MS-DOS'\n-5FAC66 Extract Zip Spec      14 (20) '2.0'\n-5FAC67 Extract OS            00 (0) 'MS-DOS'\n-5FAC68 General Purpose Flag  0000 (0)\n-5FAC6A Compression Method    0000 (0) 'Stored'\n-5FAC6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAC70 CRC                   00000000 (0)\n-5FAC74 Compressed Size       00000000 (0)\n-5FAC78 Uncompressed Size     00000000 (0)\n-5FAC7C Filename Length       005B (91)\n-5FAC7E Extra Length          0009 (9)\n-5FAC80 Comment Length        0000 (0)\n-5FAC82 Disk Start            0000 (0)\n-5FAC84 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAC86 Ext File Attributes   00000000 (0)\n-5FAC8A Local Header Offset   000F07C8 (985032)\n-5FAC8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAC8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FACE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FACEB   Length              0005 (5)\n-5FACED   Flags               01 (1) 'Modification'\n-5FACEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FACF2 CENTRAL HEADER #403   02014B50 (33639248)\n-5FACF6 Created Zip Spec      14 (20) '2.0'\n-5FACF7 Created OS            00 (0) 'MS-DOS'\n-5FACF8 Extract Zip Spec      14 (20) '2.0'\n-5FACF9 Extract OS            00 (0) 'MS-DOS'\n-5FACFA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FACFC Compression Method    0000 (0) 'Stored'\n-5FACFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAD02 CRC                   0C7DD276 (209572470)\n-5FAD06 Compressed Size       00001A92 (6802)\n-5FAD0A Uncompressed Size     00001A92 (6802)\n-5FAD0E Filename Length       0071 (113)\n-5FAD10 Extra Length          0009 (9)\n-5FAD12 Comment Length        0000 (0)\n-5FAD14 Disk Start            0000 (0)\n-5FAD16 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAD18 Ext File Attributes   00000000 (0)\n-5FAD1C Local Header Offset   000F084A (985162)\n-5FAD20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAD20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FAD91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAD93   Length              0005 (5)\n-5FAD95   Flags               01 (1) 'Modification'\n-5FAD96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAD9A CENTRAL HEADER #404   02014B50 (33639248)\n-5FAD9E Created Zip Spec      14 (20) '2.0'\n-5FAD9F Created OS            00 (0) 'MS-DOS'\n-5FADA0 Extract Zip Spec      14 (20) '2.0'\n-5FADA1 Extract OS            00 (0) 'MS-DOS'\n-5FADA2 General Purpose Flag  0000 (0)\n-5FADA4 Compression Method    0000 (0) 'Stored'\n-5FADA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FADAA CRC                   00000000 (0)\n-5FADAE Compressed Size       00000000 (0)\n-5FADB2 Uncompressed Size     00000000 (0)\n-5FADB6 Filename Length       005C (92)\n-5FADB8 Extra Length          0009 (9)\n-5FADBA Comment Length        0000 (0)\n-5FADBC Disk Start            0000 (0)\n-5FADBE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FADC0 Ext File Attributes   00000000 (0)\n-5FADC4 Local Header Offset   000F2384 (992132)\n-5FADC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FADC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FAE24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAE26   Length              0005 (5)\n-5FAE28   Flags               01 (1) 'Modification'\n-5FAE29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAE2D CENTRAL HEADER #405   02014B50 (33639248)\n-5FAE31 Created Zip Spec      14 (20) '2.0'\n-5FAE32 Created OS            00 (0) 'MS-DOS'\n-5FAE33 Extract Zip Spec      14 (20) '2.0'\n-5FAE34 Extract OS            00 (0) 'MS-DOS'\n-5FAE35 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FAE37 Compression Method    0000 (0) 'Stored'\n-5FAE39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAE3D CRC                   60EA12C2 (1625952962)\n-5FAE41 Compressed Size       00001733 (5939)\n-5FAE45 Uncompressed Size     00001733 (5939)\n-5FAE49 Filename Length       0072 (114)\n-5FAE4B Extra Length          0009 (9)\n-5FAE4D Comment Length        0000 (0)\n-5FAE4F Disk Start            0000 (0)\n-5FAE51 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAE53 Ext File Attributes   00000000 (0)\n-5FAE57 Local Header Offset   000F2407 (992263)\n-5FAE5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAE5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FAECD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAECF   Length              0005 (5)\n-5FAED1   Flags               01 (1) 'Modification'\n-5FAED2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAED6 CENTRAL HEADER #406   02014B50 (33639248)\n-5FAEDA Created Zip Spec      14 (20) '2.0'\n-5FAEDB Created OS            00 (0) 'MS-DOS'\n-5FAEDC Extract Zip Spec      14 (20) '2.0'\n-5FAEDD Extract OS            00 (0) 'MS-DOS'\n-5FAEDE General Purpose Flag  0000 (0)\n-5FAEE0 Compression Method    0000 (0) 'Stored'\n-5FAEE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAEE6 CRC                   00000000 (0)\n-5FAEEA Compressed Size       00000000 (0)\n-5FAEEE Uncompressed Size     00000000 (0)\n-5FAEF2 Filename Length       005F (95)\n-5FAEF4 Extra Length          0009 (9)\n-5FAEF6 Comment Length        0000 (0)\n-5FAEF8 Disk Start            0000 (0)\n-5FAEFA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAEFC Ext File Attributes   00000000 (0)\n-5FAF00 Local Header Offset   000F3BE3 (998371)\n-5FAF04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAF04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FAF63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FAF65   Length              0005 (5)\n-5FAF67   Flags               01 (1) 'Modification'\n-5FAF68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FAF6C CENTRAL HEADER #407   02014B50 (33639248)\n-5FAF70 Created Zip Spec      14 (20) '2.0'\n-5FAF71 Created OS            00 (0) 'MS-DOS'\n-5FAF72 Extract Zip Spec      14 (20) '2.0'\n-5FAF73 Extract OS            00 (0) 'MS-DOS'\n-5FAF74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FAF76 Compression Method    0000 (0) 'Stored'\n-5FAF78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FAF7C CRC                   4BB1EABD (1269951165)\n-5FAF80 Compressed Size       0000167D (5757)\n-5FAF84 Uncompressed Size     0000167D (5757)\n-5FAF88 Filename Length       0075 (117)\n-5FAF8A Extra Length          0009 (9)\n-5FAF8C Comment Length        0000 (0)\n-5FAF8E Disk Start            0000 (0)\n-5FAF90 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FAF92 Ext File Attributes   00000000 (0)\n-5FAF96 Local Header Offset   000F3C69 (998505)\n-5FAF9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FAF9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB00F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB011   Length              0005 (5)\n-5FB013   Flags               01 (1) 'Modification'\n-5FB014   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB018 CENTRAL HEADER #408   02014B50 (33639248)\n-5FB01C Created Zip Spec      14 (20) '2.0'\n-5FB01D Created OS            00 (0) 'MS-DOS'\n-5FB01E Extract Zip Spec      14 (20) '2.0'\n-5FB01F Extract OS            00 (0) 'MS-DOS'\n-5FB020 General Purpose Flag  0000 (0)\n-5FB022 Compression Method    0000 (0) 'Stored'\n-5FB024 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB028 CRC                   00000000 (0)\n-5FB02C Compressed Size       00000000 (0)\n-5FB030 Uncompressed Size     00000000 (0)\n-5FB034 Filename Length       005F (95)\n-5FB036 Extra Length          0009 (9)\n-5FB038 Comment Length        0000 (0)\n-5FB03A Disk Start            0000 (0)\n-5FB03C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB03E Ext File Attributes   00000000 (0)\n-5FB042 Local Header Offset   000F5392 (1004434)\n-5FB046 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB046: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB0A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB0A7   Length              0005 (5)\n-5FB0A9   Flags               01 (1) 'Modification'\n-5FB0AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB0AE CENTRAL HEADER #409   02014B50 (33639248)\n-5FB0B2 Created Zip Spec      14 (20) '2.0'\n-5FB0B3 Created OS            00 (0) 'MS-DOS'\n-5FB0B4 Extract Zip Spec      14 (20) '2.0'\n-5FB0B5 Extract OS            00 (0) 'MS-DOS'\n-5FB0B6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB0B8 Compression Method    0000 (0) 'Stored'\n-5FB0BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB0BE CRC                   A18A8EB9 (2710212281)\n-5FB0C2 Compressed Size       0000328A (12938)\n-5FB0C6 Uncompressed Size     0000328A (12938)\n-5FB0CA Filename Length       0075 (117)\n-5FB0CC Extra Length          0009 (9)\n-5FB0CE Comment Length        0000 (0)\n-5FB0D0 Disk Start            0000 (0)\n-5FB0D2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB0D4 Ext File Attributes   00000000 (0)\n-5FB0D8 Local Header Offset   000F5418 (1004568)\n-5FB0DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB0DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB151 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB153   Length              0005 (5)\n-5FB155   Flags               01 (1) 'Modification'\n-5FB156   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB15A CENTRAL HEADER #410   02014B50 (33639248)\n-5FB15E Created Zip Spec      14 (20) '2.0'\n-5FB15F Created OS            00 (0) 'MS-DOS'\n-5FB160 Extract Zip Spec      14 (20) '2.0'\n-5FB161 Extract OS            00 (0) 'MS-DOS'\n-5FB162 General Purpose Flag  0000 (0)\n-5FB164 Compression Method    0000 (0) 'Stored'\n-5FB166 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB16A CRC                   00000000 (0)\n-5FB16E Compressed Size       00000000 (0)\n-5FB172 Uncompressed Size     00000000 (0)\n-5FB176 Filename Length       005E (94)\n-5FB178 Extra Length          0009 (9)\n-5FB17A Comment Length        0000 (0)\n-5FB17C Disk Start            0000 (0)\n-5FB17E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB180 Ext File Attributes   00000000 (0)\n-5FB184 Local Header Offset   000F874E (1017678)\n-5FB188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB1E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB1E8   Length              0005 (5)\n-5FB1EA   Flags               01 (1) 'Modification'\n-5FB1EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB1EF CENTRAL HEADER #411   02014B50 (33639248)\n-5FB1F3 Created Zip Spec      14 (20) '2.0'\n-5FB1F4 Created OS            00 (0) 'MS-DOS'\n-5FB1F5 Extract Zip Spec      14 (20) '2.0'\n-5FB1F6 Extract OS            00 (0) 'MS-DOS'\n-5FB1F7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB1F9 Compression Method    0000 (0) 'Stored'\n-5FB1FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB1FF CRC                   B7B762D6 (3082248918)\n-5FB203 Compressed Size       00003879 (14457)\n-5FB207 Uncompressed Size     00003879 (14457)\n-5FB20B Filename Length       0074 (116)\n-5FB20D Extra Length          0009 (9)\n-5FB20F Comment Length        0000 (0)\n-5FB211 Disk Start            0000 (0)\n-5FB213 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB215 Ext File Attributes   00000000 (0)\n-5FB219 Local Header Offset   000F87D3 (1017811)\n-5FB21D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB21D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB291 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB293   Length              0005 (5)\n-5FB295   Flags               01 (1) 'Modification'\n-5FB296   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB29A CENTRAL HEADER #412   02014B50 (33639248)\n-5FB29E Created Zip Spec      14 (20) '2.0'\n-5FB29F Created OS            00 (0) 'MS-DOS'\n-5FB2A0 Extract Zip Spec      14 (20) '2.0'\n-5FB2A1 Extract OS            00 (0) 'MS-DOS'\n-5FB2A2 General Purpose Flag  0000 (0)\n-5FB2A4 Compression Method    0000 (0) 'Stored'\n-5FB2A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB2AA CRC                   00000000 (0)\n-5FB2AE Compressed Size       00000000 (0)\n-5FB2B2 Uncompressed Size     00000000 (0)\n-5FB2B6 Filename Length       0062 (98)\n-5FB2B8 Extra Length          0009 (9)\n-5FB2BA Comment Length        0000 (0)\n-5FB2BC Disk Start            0000 (0)\n-5FB2BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB2C0 Ext File Attributes   00000000 (0)\n-5FB2C4 Local Header Offset   000FC0F7 (1032439)\n-5FB2C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB2C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB32A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB32C   Length              0005 (5)\n-5FB32E   Flags               01 (1) 'Modification'\n-5FB32F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB333 CENTRAL HEADER #413   02014B50 (33639248)\n-5FB337 Created Zip Spec      14 (20) '2.0'\n-5FB338 Created OS            00 (0) 'MS-DOS'\n-5FB339 Extract Zip Spec      14 (20) '2.0'\n-5FB33A Extract OS            00 (0) 'MS-DOS'\n-5FB33B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB33D Compression Method    0000 (0) 'Stored'\n-5FB33F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB343 CRC                   A2B9D29A (2730087066)\n-5FB347 Compressed Size       00002150 (8528)\n-5FB34B Uncompressed Size     00002150 (8528)\n-5FB34F Filename Length       0078 (120)\n-5FB351 Extra Length          0009 (9)\n-5FB353 Comment Length        0000 (0)\n-5FB355 Disk Start            0000 (0)\n-5FB357 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB359 Ext File Attributes   00000000 (0)\n-5FB35D Local Header Offset   000FC180 (1032576)\n-5FB361 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB361: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB3D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB3DB   Length              0005 (5)\n-5FB3DD   Flags               01 (1) 'Modification'\n-5FB3DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB3E2 CENTRAL HEADER #414   02014B50 (33639248)\n-5FB3E6 Created Zip Spec      14 (20) '2.0'\n-5FB3E7 Created OS            00 (0) 'MS-DOS'\n-5FB3E8 Extract Zip Spec      14 (20) '2.0'\n-5FB3E9 Extract OS            00 (0) 'MS-DOS'\n-5FB3EA General Purpose Flag  0000 (0)\n-5FB3EC Compression Method    0000 (0) 'Stored'\n-5FB3EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB3F2 CRC                   00000000 (0)\n-5FB3F6 Compressed Size       00000000 (0)\n-5FB3FA Uncompressed Size     00000000 (0)\n-5FB3FE Filename Length       005B (91)\n-5FB400 Extra Length          0009 (9)\n-5FB402 Comment Length        0000 (0)\n-5FB404 Disk Start            0000 (0)\n-5FB406 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB408 Ext File Attributes   00000000 (0)\n-5FB40C Local Header Offset   000FE37F (1041279)\n-5FB410 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB410: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB46B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB46D   Length              0005 (5)\n-5FB46F   Flags               01 (1) 'Modification'\n-5FB470   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB474 CENTRAL HEADER #415   02014B50 (33639248)\n-5FB478 Created Zip Spec      14 (20) '2.0'\n-5FB479 Created OS            00 (0) 'MS-DOS'\n-5FB47A Extract Zip Spec      14 (20) '2.0'\n-5FB47B Extract OS            00 (0) 'MS-DOS'\n-5FB47C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB47E Compression Method    0000 (0) 'Stored'\n-5FB480 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB484 CRC                   C4FC7EA2 (3304881826)\n-5FB488 Compressed Size       000011DC (4572)\n-5FB48C Uncompressed Size     000011DC (4572)\n-5FB490 Filename Length       0071 (113)\n-5FB492 Extra Length          0009 (9)\n-5FB494 Comment Length        0000 (0)\n-5FB496 Disk Start            0000 (0)\n-5FB498 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB49A Ext File Attributes   00000000 (0)\n-5FB49E Local Header Offset   000FE401 (1041409)\n-5FB4A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB4A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB513 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB515   Length              0005 (5)\n-5FB517   Flags               01 (1) 'Modification'\n-5FB518   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB51C CENTRAL HEADER #416   02014B50 (33639248)\n-5FB520 Created Zip Spec      14 (20) '2.0'\n-5FB521 Created OS            00 (0) 'MS-DOS'\n-5FB522 Extract Zip Spec      14 (20) '2.0'\n-5FB523 Extract OS            00 (0) 'MS-DOS'\n-5FB524 General Purpose Flag  0000 (0)\n-5FB526 Compression Method    0000 (0) 'Stored'\n-5FB528 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB52C CRC                   00000000 (0)\n-5FB530 Compressed Size       00000000 (0)\n-5FB534 Uncompressed Size     00000000 (0)\n-5FB538 Filename Length       005E (94)\n-5FB53A Extra Length          0009 (9)\n-5FB53C Comment Length        0000 (0)\n-5FB53E Disk Start            0000 (0)\n-5FB540 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB542 Ext File Attributes   00000000 (0)\n-5FB546 Local Header Offset   000FF685 (1046149)\n-5FB54A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB54A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB5A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB5AA   Length              0005 (5)\n-5FB5AC   Flags               01 (1) 'Modification'\n-5FB5AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB5B1 CENTRAL HEADER #417   02014B50 (33639248)\n-5FB5B5 Created Zip Spec      14 (20) '2.0'\n-5FB5B6 Created OS            00 (0) 'MS-DOS'\n-5FB5B7 Extract Zip Spec      14 (20) '2.0'\n-5FB5B8 Extract OS            00 (0) 'MS-DOS'\n-5FB5B9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB5BB Compression Method    0000 (0) 'Stored'\n-5FB5BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB5C1 CRC                   EE30A8D8 (3996166360)\n-5FB5C5 Compressed Size       000072FB (29435)\n-5FB5C9 Uncompressed Size     000072FB (29435)\n-5FB5CD Filename Length       0074 (116)\n-5FB5CF Extra Length          0009 (9)\n-5FB5D1 Comment Length        0000 (0)\n-5FB5D3 Disk Start            0000 (0)\n-5FB5D5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB5D7 Ext File Attributes   00000000 (0)\n-5FB5DB Local Header Offset   000FF70A (1046282)\n-5FB5DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB5DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB653 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB655   Length              0005 (5)\n-5FB657   Flags               01 (1) 'Modification'\n-5FB658   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB65C CENTRAL HEADER #418   02014B50 (33639248)\n-5FB660 Created Zip Spec      14 (20) '2.0'\n-5FB661 Created OS            00 (0) 'MS-DOS'\n-5FB662 Extract Zip Spec      14 (20) '2.0'\n-5FB663 Extract OS            00 (0) 'MS-DOS'\n-5FB664 General Purpose Flag  0000 (0)\n-5FB666 Compression Method    0000 (0) 'Stored'\n-5FB668 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB66C CRC                   00000000 (0)\n-5FB670 Compressed Size       00000000 (0)\n-5FB674 Uncompressed Size     00000000 (0)\n-5FB678 Filename Length       0063 (99)\n-5FB67A Extra Length          0009 (9)\n-5FB67C Comment Length        0000 (0)\n-5FB67E Disk Start            0000 (0)\n-5FB680 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB682 Ext File Attributes   00000000 (0)\n-5FB686 Local Header Offset   00106AB0 (1075888)\n-5FB68A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB68A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB6ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB6EF   Length              0005 (5)\n-5FB6F1   Flags               01 (1) 'Modification'\n-5FB6F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB6F6 CENTRAL HEADER #419   02014B50 (33639248)\n-5FB6FA Created Zip Spec      14 (20) '2.0'\n-5FB6FB Created OS            00 (0) 'MS-DOS'\n-5FB6FC Extract Zip Spec      14 (20) '2.0'\n-5FB6FD Extract OS            00 (0) 'MS-DOS'\n-5FB6FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB700 Compression Method    0000 (0) 'Stored'\n-5FB702 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB706 CRC                   CA474DE0 (3393670624)\n-5FB70A Compressed Size       000007B6 (1974)\n-5FB70E Uncompressed Size     000007B6 (1974)\n-5FB712 Filename Length       0079 (121)\n-5FB714 Extra Length          0009 (9)\n-5FB716 Comment Length        0000 (0)\n-5FB718 Disk Start            0000 (0)\n-5FB71A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB71C Ext File Attributes   00000000 (0)\n-5FB720 Local Header Offset   00106B3A (1076026)\n-5FB724 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB724: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB79D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB79F   Length              0005 (5)\n-5FB7A1   Flags               01 (1) 'Modification'\n-5FB7A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB7A6 CENTRAL HEADER #420   02014B50 (33639248)\n-5FB7AA Created Zip Spec      14 (20) '2.0'\n-5FB7AB Created OS            00 (0) 'MS-DOS'\n-5FB7AC Extract Zip Spec      14 (20) '2.0'\n-5FB7AD Extract OS            00 (0) 'MS-DOS'\n-5FB7AE General Purpose Flag  0000 (0)\n-5FB7B0 Compression Method    0000 (0) 'Stored'\n-5FB7B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB7B6 CRC                   00000000 (0)\n-5FB7BA Compressed Size       00000000 (0)\n-5FB7BE Uncompressed Size     00000000 (0)\n-5FB7C2 Filename Length       005F (95)\n-5FB7C4 Extra Length          0009 (9)\n-5FB7C6 Comment Length        0000 (0)\n-5FB7C8 Disk Start            0000 (0)\n-5FB7CA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB7CC Ext File Attributes   00000000 (0)\n-5FB7D0 Local Header Offset   001073A0 (1078176)\n-5FB7D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB7D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB833 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB835   Length              0005 (5)\n-5FB837   Flags               01 (1) 'Modification'\n-5FB838   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB83C CENTRAL HEADER #421   02014B50 (33639248)\n-5FB840 Created Zip Spec      14 (20) '2.0'\n-5FB841 Created OS            00 (0) 'MS-DOS'\n-5FB842 Extract Zip Spec      14 (20) '2.0'\n-5FB843 Extract OS            00 (0) 'MS-DOS'\n-5FB844 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB846 Compression Method    0000 (0) 'Stored'\n-5FB848 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB84C CRC                   A19F99D4 (2711591380)\n-5FB850 Compressed Size       000011CB (4555)\n-5FB854 Uncompressed Size     000011CB (4555)\n-5FB858 Filename Length       0075 (117)\n-5FB85A Extra Length          0009 (9)\n-5FB85C Comment Length        0000 (0)\n-5FB85E Disk Start            0000 (0)\n-5FB860 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB862 Ext File Attributes   00000000 (0)\n-5FB866 Local Header Offset   00107426 (1078310)\n-5FB86A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB86A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB8DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB8E1   Length              0005 (5)\n-5FB8E3   Flags               01 (1) 'Modification'\n-5FB8E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB8E8 CENTRAL HEADER #422   02014B50 (33639248)\n-5FB8EC Created Zip Spec      14 (20) '2.0'\n-5FB8ED Created OS            00 (0) 'MS-DOS'\n-5FB8EE Extract Zip Spec      14 (20) '2.0'\n-5FB8EF Extract OS            00 (0) 'MS-DOS'\n-5FB8F0 General Purpose Flag  0000 (0)\n-5FB8F2 Compression Method    0000 (0) 'Stored'\n-5FB8F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB8F8 CRC                   00000000 (0)\n-5FB8FC Compressed Size       00000000 (0)\n-5FB900 Uncompressed Size     00000000 (0)\n-5FB904 Filename Length       005B (91)\n-5FB906 Extra Length          0009 (9)\n-5FB908 Comment Length        0000 (0)\n-5FB90A Disk Start            0000 (0)\n-5FB90C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB90E Ext File Attributes   00000000 (0)\n-5FB912 Local Header Offset   0010869D (1083037)\n-5FB916 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB916: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FB971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FB973   Length              0005 (5)\n-5FB975   Flags               01 (1) 'Modification'\n-5FB976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FB97A CENTRAL HEADER #423   02014B50 (33639248)\n-5FB97E Created Zip Spec      14 (20) '2.0'\n-5FB97F Created OS            00 (0) 'MS-DOS'\n-5FB980 Extract Zip Spec      14 (20) '2.0'\n-5FB981 Extract OS            00 (0) 'MS-DOS'\n-5FB982 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FB984 Compression Method    0000 (0) 'Stored'\n-5FB986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FB98A CRC                   7573E84B (1970530379)\n-5FB98E Compressed Size       0000284F (10319)\n-5FB992 Uncompressed Size     0000284F (10319)\n-5FB996 Filename Length       0071 (113)\n-5FB998 Extra Length          0009 (9)\n-5FB99A Comment Length        0000 (0)\n-5FB99C Disk Start            0000 (0)\n-5FB99E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FB9A0 Ext File Attributes   00000000 (0)\n-5FB9A4 Local Header Offset   0010871F (1083167)\n-5FB9A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FB9A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBA19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBA1B   Length              0005 (5)\n-5FBA1D   Flags               01 (1) 'Modification'\n-5FBA1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBA22 CENTRAL HEADER #424   02014B50 (33639248)\n-5FBA26 Created Zip Spec      14 (20) '2.0'\n-5FBA27 Created OS            00 (0) 'MS-DOS'\n-5FBA28 Extract Zip Spec      14 (20) '2.0'\n-5FBA29 Extract OS            00 (0) 'MS-DOS'\n-5FBA2A General Purpose Flag  0000 (0)\n-5FBA2C Compression Method    0000 (0) 'Stored'\n-5FBA2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBA32 CRC                   00000000 (0)\n-5FBA36 Compressed Size       00000000 (0)\n-5FBA3A Uncompressed Size     00000000 (0)\n-5FBA3E Filename Length       005F (95)\n-5FBA40 Extra Length          0009 (9)\n-5FBA42 Comment Length        0000 (0)\n-5FBA44 Disk Start            0000 (0)\n-5FBA46 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBA48 Ext File Attributes   00000000 (0)\n-5FBA4C Local Header Offset   0010B016 (1093654)\n-5FBA50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBA50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBAAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBAB1   Length              0005 (5)\n-5FBAB3   Flags               01 (1) 'Modification'\n-5FBAB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBAB8 CENTRAL HEADER #425   02014B50 (33639248)\n-5FBABC Created Zip Spec      14 (20) '2.0'\n-5FBABD Created OS            00 (0) 'MS-DOS'\n-5FBABE Extract Zip Spec      14 (20) '2.0'\n-5FBABF Extract OS            00 (0) 'MS-DOS'\n-5FBAC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FBAC2 Compression Method    0000 (0) 'Stored'\n-5FBAC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBAC8 CRC                   131CB9D8 (320649688)\n-5FBACC Compressed Size       00002777 (10103)\n-5FBAD0 Uncompressed Size     00002777 (10103)\n-5FBAD4 Filename Length       0075 (117)\n-5FBAD6 Extra Length          0009 (9)\n-5FBAD8 Comment Length        0000 (0)\n-5FBADA Disk Start            0000 (0)\n-5FBADC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBADE Ext File Attributes   00000000 (0)\n-5FBAE2 Local Header Offset   0010B09C (1093788)\n-5FBAE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBAE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBB5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBB5D   Length              0005 (5)\n-5FBB5F   Flags               01 (1) 'Modification'\n-5FBB60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBB64 CENTRAL HEADER #426   02014B50 (33639248)\n-5FBB68 Created Zip Spec      14 (20) '2.0'\n-5FBB69 Created OS            00 (0) 'MS-DOS'\n-5FBB6A Extract Zip Spec      14 (20) '2.0'\n-5FBB6B Extract OS            00 (0) 'MS-DOS'\n-5FBB6C General Purpose Flag  0000 (0)\n-5FBB6E Compression Method    0000 (0) 'Stored'\n-5FBB70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBB74 CRC                   00000000 (0)\n-5FBB78 Compressed Size       00000000 (0)\n-5FBB7C Uncompressed Size     00000000 (0)\n-5FBB80 Filename Length       005E (94)\n-5FBB82 Extra Length          0009 (9)\n-5FBB84 Comment Length        0000 (0)\n-5FBB86 Disk Start            0000 (0)\n-5FBB88 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBB8A Ext File Attributes   00000000 (0)\n-5FBB8E Local Header Offset   0010D8BF (1104063)\n-5FBB92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBB92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBBF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBBF2   Length              0005 (5)\n-5FBBF4   Flags               01 (1) 'Modification'\n-5FBBF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBBF9 CENTRAL HEADER #427   02014B50 (33639248)\n-5FBBFD Created Zip Spec      14 (20) '2.0'\n-5FBBFE Created OS            00 (0) 'MS-DOS'\n-5FBBFF Extract Zip Spec      14 (20) '2.0'\n-5FBC00 Extract OS            00 (0) 'MS-DOS'\n-5FBC01 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FBC03 Compression Method    0000 (0) 'Stored'\n-5FBC05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBC09 CRC                   95FAB1DA (2516234714)\n-5FBC0D Compressed Size       0000110D (4365)\n-5FBC11 Uncompressed Size     0000110D (4365)\n-5FBC15 Filename Length       0074 (116)\n-5FBC17 Extra Length          0009 (9)\n-5FBC19 Comment Length        0000 (0)\n-5FBC1B Disk Start            0000 (0)\n-5FBC1D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBC1F Ext File Attributes   00000000 (0)\n-5FBC23 Local Header Offset   0010D944 (1104196)\n-5FBC27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBC27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBC9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBC9D   Length              0005 (5)\n-5FBC9F   Flags               01 (1) 'Modification'\n-5FBCA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBCA4 CENTRAL HEADER #428   02014B50 (33639248)\n-5FBCA8 Created Zip Spec      14 (20) '2.0'\n-5FBCA9 Created OS            00 (0) 'MS-DOS'\n-5FBCAA Extract Zip Spec      14 (20) '2.0'\n-5FBCAB Extract OS            00 (0) 'MS-DOS'\n-5FBCAC General Purpose Flag  0000 (0)\n-5FBCAE Compression Method    0000 (0) 'Stored'\n-5FBCB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBCB4 CRC                   00000000 (0)\n-5FBCB8 Compressed Size       00000000 (0)\n-5FBCBC Uncompressed Size     00000000 (0)\n-5FBCC0 Filename Length       0061 (97)\n-5FBCC2 Extra Length          0009 (9)\n-5FBCC4 Comment Length        0000 (0)\n-5FBCC6 Disk Start            0000 (0)\n-5FBCC8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBCCA Ext File Attributes   00000000 (0)\n-5FBCCE Local Header Offset   0010EAFC (1108732)\n-5FBCD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBCD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBD33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBD35   Length              0005 (5)\n-5FBD37   Flags               01 (1) 'Modification'\n-5FBD38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBD3C CENTRAL HEADER #429   02014B50 (33639248)\n-5FBD40 Created Zip Spec      14 (20) '2.0'\n-5FBD41 Created OS            00 (0) 'MS-DOS'\n-5FBD42 Extract Zip Spec      14 (20) '2.0'\n-5FBD43 Extract OS            00 (0) 'MS-DOS'\n-5FBD44 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FBD46 Compression Method    0000 (0) 'Stored'\n-5FBD48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBD4C CRC                   B1E82858 (2984781912)\n-5FBD50 Compressed Size       000019D6 (6614)\n-5FBD54 Uncompressed Size     000019D6 (6614)\n-5FBD58 Filename Length       0077 (119)\n-5FBD5A Extra Length          0009 (9)\n-5FBD5C Comment Length        0000 (0)\n-5FBD5E Disk Start            0000 (0)\n-5FBD60 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBD62 Ext File Attributes   00000000 (0)\n-5FBD66 Local Header Offset   0010EB84 (1108868)\n-5FBD6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBD6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBDE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBDE3   Length              0005 (5)\n-5FBDE5   Flags               01 (1) 'Modification'\n-5FBDE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBDEA CENTRAL HEADER #430   02014B50 (33639248)\n-5FBDEE Created Zip Spec      14 (20) '2.0'\n-5FBDEF Created OS            00 (0) 'MS-DOS'\n-5FBDF0 Extract Zip Spec      14 (20) '2.0'\n-5FBDF1 Extract OS            00 (0) 'MS-DOS'\n-5FBDF2 General Purpose Flag  0000 (0)\n-5FBDF4 Compression Method    0000 (0) 'Stored'\n-5FBDF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBDFA CRC                   00000000 (0)\n-5FBDFE Compressed Size       00000000 (0)\n-5FBE02 Uncompressed Size     00000000 (0)\n-5FBE06 Filename Length       005E (94)\n-5FBE08 Extra Length          0009 (9)\n-5FBE0A Comment Length        0000 (0)\n-5FBE0C Disk Start            0000 (0)\n-5FBE0E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBE10 Ext File Attributes   00000000 (0)\n-5FBE14 Local Header Offset   00110608 (1115656)\n-5FBE18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBE18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBE76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBE78   Length              0005 (5)\n-5FBE7A   Flags               01 (1) 'Modification'\n-5FBE7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBE7F CENTRAL HEADER #431   02014B50 (33639248)\n-5FBE83 Created Zip Spec      14 (20) '2.0'\n-5FBE84 Created OS            00 (0) 'MS-DOS'\n-5FBE85 Extract Zip Spec      14 (20) '2.0'\n-5FBE86 Extract OS            00 (0) 'MS-DOS'\n-5FBE87 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FBE89 Compression Method    0000 (0) 'Stored'\n-5FBE8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBE8F CRC                   EA13965E (3927152222)\n-5FBE93 Compressed Size       00000F7E (3966)\n-5FBE97 Uncompressed Size     00000F7E (3966)\n-5FBE9B Filename Length       0074 (116)\n-5FBE9D Extra Length          0009 (9)\n-5FBE9F Comment Length        0000 (0)\n-5FBEA1 Disk Start            0000 (0)\n-5FBEA3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBEA5 Ext File Attributes   00000000 (0)\n-5FBEA9 Local Header Offset   0011068D (1115789)\n-5FBEAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBEAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBF21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBF23   Length              0005 (5)\n-5FBF25   Flags               01 (1) 'Modification'\n-5FBF26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBF2A CENTRAL HEADER #432   02014B50 (33639248)\n-5FBF2E Created Zip Spec      14 (20) '2.0'\n-5FBF2F Created OS            00 (0) 'MS-DOS'\n-5FBF30 Extract Zip Spec      14 (20) '2.0'\n-5FBF31 Extract OS            00 (0) 'MS-DOS'\n-5FBF32 General Purpose Flag  0000 (0)\n-5FBF34 Compression Method    0000 (0) 'Stored'\n-5FBF36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBF3A CRC                   00000000 (0)\n-5FBF3E Compressed Size       00000000 (0)\n-5FBF42 Uncompressed Size     00000000 (0)\n-5FBF46 Filename Length       0057 (87)\n-5FBF48 Extra Length          0009 (9)\n-5FBF4A Comment Length        0000 (0)\n-5FBF4C Disk Start            0000 (0)\n-5FBF4E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBF50 Ext File Attributes   00000000 (0)\n-5FBF54 Local Header Offset   001116B6 (1119926)\n-5FBF58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBF58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FBFAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FBFB1   Length              0005 (5)\n-5FBFB3   Flags               01 (1) 'Modification'\n-5FBFB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FBFB8 CENTRAL HEADER #433   02014B50 (33639248)\n-5FBFBC Created Zip Spec      14 (20) '2.0'\n-5FBFBD Created OS            00 (0) 'MS-DOS'\n-5FBFBE Extract Zip Spec      14 (20) '2.0'\n-5FBFBF Extract OS            00 (0) 'MS-DOS'\n-5FBFC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FBFC2 Compression Method    0000 (0) 'Stored'\n-5FBFC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FBFC8 CRC                   C8903588 (3364894088)\n-5FBFCC Compressed Size       00002CD6 (11478)\n-5FBFD0 Uncompressed Size     00002CD6 (11478)\n-5FBFD4 Filename Length       006D (109)\n-5FBFD6 Extra Length          0009 (9)\n-5FBFD8 Comment Length        0000 (0)\n-5FBFDA Disk Start            0000 (0)\n-5FBFDC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FBFDE Ext File Attributes   00000000 (0)\n-5FBFE2 Local Header Offset   00111734 (1120052)\n-5FBFE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBFE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC055   Length              0005 (5)\n-5FC057   Flags               01 (1) 'Modification'\n-5FC058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC05C CENTRAL HEADER #434   02014B50 (33639248)\n-5FC060 Created Zip Spec      14 (20) '2.0'\n-5FC061 Created OS            00 (0) 'MS-DOS'\n-5FC062 Extract Zip Spec      14 (20) '2.0'\n-5FC063 Extract OS            00 (0) 'MS-DOS'\n-5FC064 General Purpose Flag  0000 (0)\n-5FC066 Compression Method    0000 (0) 'Stored'\n-5FC068 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC06C CRC                   00000000 (0)\n-5FC070 Compressed Size       00000000 (0)\n-5FC074 Uncompressed Size     00000000 (0)\n-5FC078 Filename Length       0068 (104)\n-5FC07A Extra Length          0009 (9)\n-5FC07C Comment Length        0000 (0)\n-5FC07E Disk Start            0000 (0)\n-5FC080 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC082 Ext File Attributes   00000000 (0)\n-5FC086 Local Header Offset   001144AE (1131694)\n-5FC08A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC08A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC0F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC0F4   Length              0005 (5)\n-5FC0F6   Flags               01 (1) 'Modification'\n-5FC0F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC0FB CENTRAL HEADER #435   02014B50 (33639248)\n-5FC0FF Created Zip Spec      14 (20) '2.0'\n-5FC100 Created OS            00 (0) 'MS-DOS'\n-5FC101 Extract Zip Spec      14 (20) '2.0'\n-5FC102 Extract OS            00 (0) 'MS-DOS'\n-5FC103 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FC105 Compression Method    0000 (0) 'Stored'\n-5FC107 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC10B CRC                   D19560D0 (3516227792)\n-5FC10F Compressed Size       00000A2F (2607)\n-5FC113 Uncompressed Size     00000A2F (2607)\n-5FC117 Filename Length       007E (126)\n-5FC119 Extra Length          0009 (9)\n-5FC11B Comment Length        0000 (0)\n-5FC11D Disk Start            0000 (0)\n-5FC11F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC121 Ext File Attributes   00000000 (0)\n-5FC125 Local Header Offset   0011453D (1131837)\n-5FC129 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC129: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC1A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC1A9   Length              0005 (5)\n-5FC1AB   Flags               01 (1) 'Modification'\n-5FC1AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC1B0 CENTRAL HEADER #436   02014B50 (33639248)\n-5FC1B4 Created Zip Spec      14 (20) '2.0'\n-5FC1B5 Created OS            00 (0) 'MS-DOS'\n-5FC1B6 Extract Zip Spec      14 (20) '2.0'\n-5FC1B7 Extract OS            00 (0) 'MS-DOS'\n-5FC1B8 General Purpose Flag  0000 (0)\n-5FC1BA Compression Method    0000 (0) 'Stored'\n-5FC1BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC1C0 CRC                   00000000 (0)\n-5FC1C4 Compressed Size       00000000 (0)\n-5FC1C8 Uncompressed Size     00000000 (0)\n-5FC1CC Filename Length       0032 (50)\n-5FC1CE Extra Length          0009 (9)\n-5FC1D0 Comment Length        0000 (0)\n-5FC1D2 Disk Start            0000 (0)\n-5FC1D4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC1D6 Ext File Attributes   00000000 (0)\n-5FC1DA Local Header Offset   00115021 (1134625)\n-5FC1DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC1DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC210 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC212   Length              0005 (5)\n-5FC214   Flags               01 (1) 'Modification'\n-5FC215   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC219 CENTRAL HEADER #437   02014B50 (33639248)\n-5FC21D Created Zip Spec      14 (20) '2.0'\n-5FC21E Created OS            00 (0) 'MS-DOS'\n-5FC21F Extract Zip Spec      14 (20) '2.0'\n-5FC220 Extract OS            00 (0) 'MS-DOS'\n-5FC221 General Purpose Flag  0000 (0)\n-5FC223 Compression Method    0000 (0) 'Stored'\n-5FC225 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC229 CRC                   00000000 (0)\n-5FC22D Compressed Size       00000000 (0)\n-5FC231 Uncompressed Size     00000000 (0)\n-5FC235 Filename Length       0039 (57)\n-5FC237 Extra Length          0009 (9)\n-5FC239 Comment Length        0000 (0)\n-5FC23B Disk Start            0000 (0)\n-5FC23D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC23F Ext File Attributes   00000000 (0)\n-5FC243 Local Header Offset   0011507A (1134714)\n-5FC247 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC247: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC282   Length              0005 (5)\n-5FC284   Flags               01 (1) 'Modification'\n-5FC285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC289 CENTRAL HEADER #438   02014B50 (33639248)\n-5FC28D Created Zip Spec      14 (20) '2.0'\n-5FC28E Created OS            00 (0) 'MS-DOS'\n-5FC28F Extract Zip Spec      14 (20) '2.0'\n-5FC290 Extract OS            00 (0) 'MS-DOS'\n-5FC291 General Purpose Flag  0000 (0)\n-5FC293 Compression Method    0000 (0) 'Stored'\n-5FC295 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC299 CRC                   00000000 (0)\n-5FC29D Compressed Size       00000000 (0)\n-5FC2A1 Uncompressed Size     00000000 (0)\n-5FC2A5 Filename Length       006F (111)\n-5FC2A7 Extra Length          0009 (9)\n-5FC2A9 Comment Length        0000 (0)\n-5FC2AB Disk Start            0000 (0)\n-5FC2AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC2AF Ext File Attributes   00000000 (0)\n-5FC2B3 Local Header Offset   001150DA (1134810)\n-5FC2B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC2B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC328   Length              0005 (5)\n-5FC32A   Flags               01 (1) 'Modification'\n-5FC32B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC32F CENTRAL HEADER #439   02014B50 (33639248)\n-5FC333 Created Zip Spec      14 (20) '2.0'\n-5FC334 Created OS            00 (0) 'MS-DOS'\n-5FC335 Extract Zip Spec      14 (20) '2.0'\n-5FC336 Extract OS            00 (0) 'MS-DOS'\n-5FC337 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FC339 Compression Method    0000 (0) 'Stored'\n-5FC33B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC33F CRC                   A1414F13 (2705411859)\n-5FC343 Compressed Size       0000521D (21021)\n-5FC347 Uncompressed Size     0000521D (21021)\n-5FC34B Filename Length       0085 (133)\n-5FC34D Extra Length          0009 (9)\n-5FC34F Comment Length        0000 (0)\n-5FC351 Disk Start            0000 (0)\n-5FC353 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC355 Ext File Attributes   00000000 (0)\n-5FC359 Local Header Offset   00115170 (1134960)\n-5FC35D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5FB3C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB3C5   Length              0005 (5)\n+5FB3C7   Flags               01 (1) 'Modification'\n+5FB3C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB3CC CENTRAL HEADER #328   02014B50 (33639248)\n+5FB3D0 Created Zip Spec      14 (20) '2.0'\n+5FB3D1 Created OS            00 (0) 'MS-DOS'\n+5FB3D2 Extract Zip Spec      14 (20) '2.0'\n+5FB3D3 Extract OS            00 (0) 'MS-DOS'\n+5FB3D4 General Purpose Flag  0000 (0)\n+5FB3D6 Compression Method    0000 (0) 'Stored'\n+5FB3D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB3DC CRC                   00000000 (0)\n+5FB3E0 Compressed Size       00000000 (0)\n+5FB3E4 Uncompressed Size     00000000 (0)\n+5FB3E8 Filename Length       0024 (36)\n+5FB3EA Extra Length          0009 (9)\n+5FB3EC Comment Length        0000 (0)\n+5FB3EE Disk Start            0000 (0)\n+5FB3F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB3F2 Ext File Attributes   00000000 (0)\n+5FB3F6 Local Header Offset   000CF93C (850236)\n+5FB3FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB3FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB41E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB420   Length              0005 (5)\n+5FB422   Flags               01 (1) 'Modification'\n+5FB423   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB427 CENTRAL HEADER #329   02014B50 (33639248)\n+5FB42B Created Zip Spec      14 (20) '2.0'\n+5FB42C Created OS            00 (0) 'MS-DOS'\n+5FB42D Extract Zip Spec      14 (20) '2.0'\n+5FB42E Extract OS            00 (0) 'MS-DOS'\n+5FB42F General Purpose Flag  0000 (0)\n+5FB431 Compression Method    0000 (0) 'Stored'\n+5FB433 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB437 CRC                   00000000 (0)\n+5FB43B Compressed Size       00000000 (0)\n+5FB43F Uncompressed Size     00000000 (0)\n+5FB443 Filename Length       002B (43)\n+5FB445 Extra Length          0009 (9)\n+5FB447 Comment Length        0000 (0)\n+5FB449 Disk Start            0000 (0)\n+5FB44B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB44D Ext File Attributes   00000000 (0)\n+5FB451 Local Header Offset   000CF987 (850311)\n+5FB455 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB455: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB480 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB482   Length              0005 (5)\n+5FB484   Flags               01 (1) 'Modification'\n+5FB485   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB489 CENTRAL HEADER #330   02014B50 (33639248)\n+5FB48D Created Zip Spec      14 (20) '2.0'\n+5FB48E Created OS            00 (0) 'MS-DOS'\n+5FB48F Extract Zip Spec      14 (20) '2.0'\n+5FB490 Extract OS            00 (0) 'MS-DOS'\n+5FB491 General Purpose Flag  0000 (0)\n+5FB493 Compression Method    0000 (0) 'Stored'\n+5FB495 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB499 CRC                   00000000 (0)\n+5FB49D Compressed Size       00000000 (0)\n+5FB4A1 Uncompressed Size     00000000 (0)\n+5FB4A5 Filename Length       0056 (86)\n+5FB4A7 Extra Length          0009 (9)\n+5FB4A9 Comment Length        0000 (0)\n+5FB4AB Disk Start            0000 (0)\n+5FB4AD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB4AF Ext File Attributes   00000000 (0)\n+5FB4B3 Local Header Offset   000CF9D9 (850393)\n+5FB4B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB4B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB50D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB50F   Length              0005 (5)\n+5FB511   Flags               01 (1) 'Modification'\n+5FB512   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB516 CENTRAL HEADER #331   02014B50 (33639248)\n+5FB51A Created Zip Spec      14 (20) '2.0'\n+5FB51B Created OS            00 (0) 'MS-DOS'\n+5FB51C Extract Zip Spec      14 (20) '2.0'\n+5FB51D Extract OS            00 (0) 'MS-DOS'\n+5FB51E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB520 Compression Method    0000 (0) 'Stored'\n+5FB522 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB526 CRC                   F32265E7 (4079117799)\n+5FB52A Compressed Size       00001595 (5525)\n+5FB52E Uncompressed Size     00001595 (5525)\n+5FB532 Filename Length       006C (108)\n+5FB534 Extra Length          0009 (9)\n+5FB536 Comment Length        0000 (0)\n+5FB538 Disk Start            0000 (0)\n+5FB53A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB53C Ext File Attributes   00000000 (0)\n+5FB540 Local Header Offset   000CFA56 (850518)\n+5FB544 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB544: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB5B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB5B2   Length              0005 (5)\n+5FB5B4   Flags               01 (1) 'Modification'\n+5FB5B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB5B9 CENTRAL HEADER #332   02014B50 (33639248)\n+5FB5BD Created Zip Spec      14 (20) '2.0'\n+5FB5BE Created OS            00 (0) 'MS-DOS'\n+5FB5BF Extract Zip Spec      14 (20) '2.0'\n+5FB5C0 Extract OS            00 (0) 'MS-DOS'\n+5FB5C1 General Purpose Flag  0000 (0)\n+5FB5C3 Compression Method    0000 (0) 'Stored'\n+5FB5C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB5C9 CRC                   00000000 (0)\n+5FB5CD Compressed Size       00000000 (0)\n+5FB5D1 Uncompressed Size     00000000 (0)\n+5FB5D5 Filename Length       0055 (85)\n+5FB5D7 Extra Length          0009 (9)\n+5FB5D9 Comment Length        0000 (0)\n+5FB5DB Disk Start            0000 (0)\n+5FB5DD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB5DF Ext File Attributes   00000000 (0)\n+5FB5E3 Local Header Offset   000D108E (856206)\n+5FB5E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB5E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB63C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB63E   Length              0005 (5)\n+5FB640   Flags               01 (1) 'Modification'\n+5FB641   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB645 CENTRAL HEADER #333   02014B50 (33639248)\n+5FB649 Created Zip Spec      14 (20) '2.0'\n+5FB64A Created OS            00 (0) 'MS-DOS'\n+5FB64B Extract Zip Spec      14 (20) '2.0'\n+5FB64C Extract OS            00 (0) 'MS-DOS'\n+5FB64D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB64F Compression Method    0000 (0) 'Stored'\n+5FB651 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB655 CRC                   62A57B9F (1655012255)\n+5FB659 Compressed Size       00000AFB (2811)\n+5FB65D Uncompressed Size     00000AFB (2811)\n+5FB661 Filename Length       006B (107)\n+5FB663 Extra Length          0009 (9)\n+5FB665 Comment Length        0000 (0)\n+5FB667 Disk Start            0000 (0)\n+5FB669 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB66B Ext File Attributes   00000000 (0)\n+5FB66F Local Header Offset   000D110A (856330)\n+5FB673 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB673: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB6DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB6E0   Length              0005 (5)\n+5FB6E2   Flags               01 (1) 'Modification'\n+5FB6E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB6E7 CENTRAL HEADER #334   02014B50 (33639248)\n+5FB6EB Created Zip Spec      14 (20) '2.0'\n+5FB6EC Created OS            00 (0) 'MS-DOS'\n+5FB6ED Extract Zip Spec      14 (20) '2.0'\n+5FB6EE Extract OS            00 (0) 'MS-DOS'\n+5FB6EF General Purpose Flag  0000 (0)\n+5FB6F1 Compression Method    0000 (0) 'Stored'\n+5FB6F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB6F7 CRC                   00000000 (0)\n+5FB6FB Compressed Size       00000000 (0)\n+5FB6FF Uncompressed Size     00000000 (0)\n+5FB703 Filename Length       0023 (35)\n+5FB705 Extra Length          0009 (9)\n+5FB707 Comment Length        0000 (0)\n+5FB709 Disk Start            0000 (0)\n+5FB70B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB70D Ext File Attributes   00000000 (0)\n+5FB711 Local Header Offset   000D1CA7 (859303)\n+5FB715 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB715: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB738 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB73A   Length              0005 (5)\n+5FB73C   Flags               01 (1) 'Modification'\n+5FB73D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB741 CENTRAL HEADER #335   02014B50 (33639248)\n+5FB745 Created Zip Spec      14 (20) '2.0'\n+5FB746 Created OS            00 (0) 'MS-DOS'\n+5FB747 Extract Zip Spec      14 (20) '2.0'\n+5FB748 Extract OS            00 (0) 'MS-DOS'\n+5FB749 General Purpose Flag  0000 (0)\n+5FB74B Compression Method    0000 (0) 'Stored'\n+5FB74D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB751 CRC                   00000000 (0)\n+5FB755 Compressed Size       00000000 (0)\n+5FB759 Uncompressed Size     00000000 (0)\n+5FB75D Filename Length       002A (42)\n+5FB75F Extra Length          0009 (9)\n+5FB761 Comment Length        0000 (0)\n+5FB763 Disk Start            0000 (0)\n+5FB765 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB767 Ext File Attributes   00000000 (0)\n+5FB76B Local Header Offset   000D1CF1 (859377)\n+5FB76F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB76F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB79B   Length              0005 (5)\n+5FB79D   Flags               01 (1) 'Modification'\n+5FB79E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB7A2 CENTRAL HEADER #336   02014B50 (33639248)\n+5FB7A6 Created Zip Spec      14 (20) '2.0'\n+5FB7A7 Created OS            00 (0) 'MS-DOS'\n+5FB7A8 Extract Zip Spec      14 (20) '2.0'\n+5FB7A9 Extract OS            00 (0) 'MS-DOS'\n+5FB7AA General Purpose Flag  0000 (0)\n+5FB7AC Compression Method    0000 (0) 'Stored'\n+5FB7AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB7B2 CRC                   00000000 (0)\n+5FB7B6 Compressed Size       00000000 (0)\n+5FB7BA Uncompressed Size     00000000 (0)\n+5FB7BE Filename Length       0052 (82)\n+5FB7C0 Extra Length          0009 (9)\n+5FB7C2 Comment Length        0000 (0)\n+5FB7C4 Disk Start            0000 (0)\n+5FB7C6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB7C8 Ext File Attributes   00000000 (0)\n+5FB7CC Local Header Offset   000D1D42 (859458)\n+5FB7D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB7D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB822 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB824   Length              0005 (5)\n+5FB826   Flags               01 (1) 'Modification'\n+5FB827   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB82B CENTRAL HEADER #337   02014B50 (33639248)\n+5FB82F Created Zip Spec      14 (20) '2.0'\n+5FB830 Created OS            00 (0) 'MS-DOS'\n+5FB831 Extract Zip Spec      14 (20) '2.0'\n+5FB832 Extract OS            00 (0) 'MS-DOS'\n+5FB833 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB835 Compression Method    0000 (0) 'Stored'\n+5FB837 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB83B CRC                   63C353AF (1673745327)\n+5FB83F Compressed Size       00000CF8 (3320)\n+5FB843 Uncompressed Size     00000CF8 (3320)\n+5FB847 Filename Length       0068 (104)\n+5FB849 Extra Length          0009 (9)\n+5FB84B Comment Length        0000 (0)\n+5FB84D Disk Start            0000 (0)\n+5FB84F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB851 Ext File Attributes   00000000 (0)\n+5FB855 Local Header Offset   000D1DBB (859579)\n+5FB859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB8C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB8C3   Length              0005 (5)\n+5FB8C5   Flags               01 (1) 'Modification'\n+5FB8C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB8CA CENTRAL HEADER #338   02014B50 (33639248)\n+5FB8CE Created Zip Spec      14 (20) '2.0'\n+5FB8CF Created OS            00 (0) 'MS-DOS'\n+5FB8D0 Extract Zip Spec      14 (20) '2.0'\n+5FB8D1 Extract OS            00 (0) 'MS-DOS'\n+5FB8D2 General Purpose Flag  0000 (0)\n+5FB8D4 Compression Method    0000 (0) 'Stored'\n+5FB8D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB8DA CRC                   00000000 (0)\n+5FB8DE Compressed Size       00000000 (0)\n+5FB8E2 Uncompressed Size     00000000 (0)\n+5FB8E6 Filename Length       0059 (89)\n+5FB8E8 Extra Length          0009 (9)\n+5FB8EA Comment Length        0000 (0)\n+5FB8EC Disk Start            0000 (0)\n+5FB8EE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB8F0 Ext File Attributes   00000000 (0)\n+5FB8F4 Local Header Offset   000D2B52 (863058)\n+5FB8F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB8F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB951 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB953   Length              0005 (5)\n+5FB955   Flags               01 (1) 'Modification'\n+5FB956   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FB95A CENTRAL HEADER #339   02014B50 (33639248)\n+5FB95E Created Zip Spec      14 (20) '2.0'\n+5FB95F Created OS            00 (0) 'MS-DOS'\n+5FB960 Extract Zip Spec      14 (20) '2.0'\n+5FB961 Extract OS            00 (0) 'MS-DOS'\n+5FB962 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FB964 Compression Method    0000 (0) 'Stored'\n+5FB966 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FB96A CRC                   C64481A5 (3326378405)\n+5FB96E Compressed Size       00000723 (1827)\n+5FB972 Uncompressed Size     00000723 (1827)\n+5FB976 Filename Length       006F (111)\n+5FB978 Extra Length          0009 (9)\n+5FB97A Comment Length        0000 (0)\n+5FB97C Disk Start            0000 (0)\n+5FB97E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FB980 Ext File Attributes   00000000 (0)\n+5FB984 Local Header Offset   000D2BD2 (863186)\n+5FB988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FB9F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FB9F9   Length              0005 (5)\n+5FB9FB   Flags               01 (1) 'Modification'\n+5FB9FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBA00 CENTRAL HEADER #340   02014B50 (33639248)\n+5FBA04 Created Zip Spec      14 (20) '2.0'\n+5FBA05 Created OS            00 (0) 'MS-DOS'\n+5FBA06 Extract Zip Spec      14 (20) '2.0'\n+5FBA07 Extract OS            00 (0) 'MS-DOS'\n+5FBA08 General Purpose Flag  0000 (0)\n+5FBA0A Compression Method    0000 (0) 'Stored'\n+5FBA0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBA10 CRC                   00000000 (0)\n+5FBA14 Compressed Size       00000000 (0)\n+5FBA18 Uncompressed Size     00000000 (0)\n+5FBA1C Filename Length       0057 (87)\n+5FBA1E Extra Length          0009 (9)\n+5FBA20 Comment Length        0000 (0)\n+5FBA22 Disk Start            0000 (0)\n+5FBA24 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBA26 Ext File Attributes   00000000 (0)\n+5FBA2A Local Header Offset   000D339B (865179)\n+5FBA2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBA2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBA85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBA87   Length              0005 (5)\n+5FBA89   Flags               01 (1) 'Modification'\n+5FBA8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBA8E CENTRAL HEADER #341   02014B50 (33639248)\n+5FBA92 Created Zip Spec      14 (20) '2.0'\n+5FBA93 Created OS            00 (0) 'MS-DOS'\n+5FBA94 Extract Zip Spec      14 (20) '2.0'\n+5FBA95 Extract OS            00 (0) 'MS-DOS'\n+5FBA96 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FBA98 Compression Method    0000 (0) 'Stored'\n+5FBA9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBA9E CRC                   39649106 (962892038)\n+5FBAA2 Compressed Size       000006E2 (1762)\n+5FBAA6 Uncompressed Size     000006E2 (1762)\n+5FBAAA Filename Length       006D (109)\n+5FBAAC Extra Length          0009 (9)\n+5FBAAE Comment Length        0000 (0)\n+5FBAB0 Disk Start            0000 (0)\n+5FBAB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBAB4 Ext File Attributes   00000000 (0)\n+5FBAB8 Local Header Offset   000D3419 (865305)\n+5FBABC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBABC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBB29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBB2B   Length              0005 (5)\n+5FBB2D   Flags               01 (1) 'Modification'\n+5FBB2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBB32 CENTRAL HEADER #342   02014B50 (33639248)\n+5FBB36 Created Zip Spec      14 (20) '2.0'\n+5FBB37 Created OS            00 (0) 'MS-DOS'\n+5FBB38 Extract Zip Spec      14 (20) '2.0'\n+5FBB39 Extract OS            00 (0) 'MS-DOS'\n+5FBB3A General Purpose Flag  0000 (0)\n+5FBB3C Compression Method    0000 (0) 'Stored'\n+5FBB3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBB42 CRC                   00000000 (0)\n+5FBB46 Compressed Size       00000000 (0)\n+5FBB4A Uncompressed Size     00000000 (0)\n+5FBB4E Filename Length       0052 (82)\n+5FBB50 Extra Length          0009 (9)\n+5FBB52 Comment Length        0000 (0)\n+5FBB54 Disk Start            0000 (0)\n+5FBB56 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBB58 Ext File Attributes   00000000 (0)\n+5FBB5C Local Header Offset   000D3B9F (867231)\n+5FBB60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBB60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBBB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBBB4   Length              0005 (5)\n+5FBBB6   Flags               01 (1) 'Modification'\n+5FBBB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBBBB CENTRAL HEADER #343   02014B50 (33639248)\n+5FBBBF Created Zip Spec      14 (20) '2.0'\n+5FBBC0 Created OS            00 (0) 'MS-DOS'\n+5FBBC1 Extract Zip Spec      14 (20) '2.0'\n+5FBBC2 Extract OS            00 (0) 'MS-DOS'\n+5FBBC3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FBBC5 Compression Method    0000 (0) 'Stored'\n+5FBBC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBBCB CRC                   8DC8B44C (2378740812)\n+5FBBCF Compressed Size       00000782 (1922)\n+5FBBD3 Uncompressed Size     00000782 (1922)\n+5FBBD7 Filename Length       0068 (104)\n+5FBBD9 Extra Length          0009 (9)\n+5FBBDB Comment Length        0000 (0)\n+5FBBDD Disk Start            0000 (0)\n+5FBBDF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBBE1 Ext File Attributes   00000000 (0)\n+5FBBE5 Local Header Offset   000D3C18 (867352)\n+5FBBE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBBE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBC51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBC53   Length              0005 (5)\n+5FBC55   Flags               01 (1) 'Modification'\n+5FBC56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBC5A CENTRAL HEADER #344   02014B50 (33639248)\n+5FBC5E Created Zip Spec      14 (20) '2.0'\n+5FBC5F Created OS            00 (0) 'MS-DOS'\n+5FBC60 Extract Zip Spec      14 (20) '2.0'\n+5FBC61 Extract OS            00 (0) 'MS-DOS'\n+5FBC62 General Purpose Flag  0000 (0)\n+5FBC64 Compression Method    0000 (0) 'Stored'\n+5FBC66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBC6A CRC                   00000000 (0)\n+5FBC6E Compressed Size       00000000 (0)\n+5FBC72 Uncompressed Size     00000000 (0)\n+5FBC76 Filename Length       0023 (35)\n+5FBC78 Extra Length          0009 (9)\n+5FBC7A Comment Length        0000 (0)\n+5FBC7C Disk Start            0000 (0)\n+5FBC7E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBC80 Ext File Attributes   00000000 (0)\n+5FBC84 Local Header Offset   000D4439 (869433)\n+5FBC88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBC88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBCAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBCAD   Length              0005 (5)\n+5FBCAF   Flags               01 (1) 'Modification'\n+5FBCB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBCB4 CENTRAL HEADER #345   02014B50 (33639248)\n+5FBCB8 Created Zip Spec      14 (20) '2.0'\n+5FBCB9 Created OS            00 (0) 'MS-DOS'\n+5FBCBA Extract Zip Spec      14 (20) '2.0'\n+5FBCBB Extract OS            00 (0) 'MS-DOS'\n+5FBCBC General Purpose Flag  0000 (0)\n+5FBCBE Compression Method    0000 (0) 'Stored'\n+5FBCC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBCC4 CRC                   00000000 (0)\n+5FBCC8 Compressed Size       00000000 (0)\n+5FBCCC Uncompressed Size     00000000 (0)\n+5FBCD0 Filename Length       002A (42)\n+5FBCD2 Extra Length          0009 (9)\n+5FBCD4 Comment Length        0000 (0)\n+5FBCD6 Disk Start            0000 (0)\n+5FBCD8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBCDA Ext File Attributes   00000000 (0)\n+5FBCDE Local Header Offset   000D4483 (869507)\n+5FBCE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBCE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBD0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBD0E   Length              0005 (5)\n+5FBD10   Flags               01 (1) 'Modification'\n+5FBD11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBD15 CENTRAL HEADER #346   02014B50 (33639248)\n+5FBD19 Created Zip Spec      14 (20) '2.0'\n+5FBD1A Created OS            00 (0) 'MS-DOS'\n+5FBD1B Extract Zip Spec      14 (20) '2.0'\n+5FBD1C Extract OS            00 (0) 'MS-DOS'\n+5FBD1D General Purpose Flag  0000 (0)\n+5FBD1F Compression Method    0000 (0) 'Stored'\n+5FBD21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBD25 CRC                   00000000 (0)\n+5FBD29 Compressed Size       00000000 (0)\n+5FBD2D Uncompressed Size     00000000 (0)\n+5FBD31 Filename Length       0052 (82)\n+5FBD33 Extra Length          0009 (9)\n+5FBD35 Comment Length        0000 (0)\n+5FBD37 Disk Start            0000 (0)\n+5FBD39 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBD3B Ext File Attributes   00000000 (0)\n+5FBD3F Local Header Offset   000D44D4 (869588)\n+5FBD43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBD43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBD95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBD97   Length              0005 (5)\n+5FBD99   Flags               01 (1) 'Modification'\n+5FBD9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBD9E CENTRAL HEADER #347   02014B50 (33639248)\n+5FBDA2 Created Zip Spec      14 (20) '2.0'\n+5FBDA3 Created OS            00 (0) 'MS-DOS'\n+5FBDA4 Extract Zip Spec      14 (20) '2.0'\n+5FBDA5 Extract OS            00 (0) 'MS-DOS'\n+5FBDA6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FBDA8 Compression Method    0000 (0) 'Stored'\n+5FBDAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBDAE CRC                   605D4301 (1616724737)\n+5FBDB2 Compressed Size       00000914 (2324)\n+5FBDB6 Uncompressed Size     00000914 (2324)\n+5FBDBA Filename Length       0068 (104)\n+5FBDBC Extra Length          0009 (9)\n+5FBDBE Comment Length        0000 (0)\n+5FBDC0 Disk Start            0000 (0)\n+5FBDC2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBDC4 Ext File Attributes   00000000 (0)\n+5FBDC8 Local Header Offset   000D454D (869709)\n+5FBDCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBDCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBE34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBE36   Length              0005 (5)\n+5FBE38   Flags               01 (1) 'Modification'\n+5FBE39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBE3D CENTRAL HEADER #348   02014B50 (33639248)\n+5FBE41 Created Zip Spec      14 (20) '2.0'\n+5FBE42 Created OS            00 (0) 'MS-DOS'\n+5FBE43 Extract Zip Spec      14 (20) '2.0'\n+5FBE44 Extract OS            00 (0) 'MS-DOS'\n+5FBE45 General Purpose Flag  0000 (0)\n+5FBE47 Compression Method    0000 (0) 'Stored'\n+5FBE49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBE4D CRC                   00000000 (0)\n+5FBE51 Compressed Size       00000000 (0)\n+5FBE55 Uncompressed Size     00000000 (0)\n+5FBE59 Filename Length       005F (95)\n+5FBE5B Extra Length          0009 (9)\n+5FBE5D Comment Length        0000 (0)\n+5FBE5F Disk Start            0000 (0)\n+5FBE61 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBE63 Ext File Attributes   00000000 (0)\n+5FBE67 Local Header Offset   000D4F00 (872192)\n+5FBE6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBE6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBECA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBECC   Length              0005 (5)\n+5FBECE   Flags               01 (1) 'Modification'\n+5FBECF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBED3 CENTRAL HEADER #349   02014B50 (33639248)\n+5FBED7 Created Zip Spec      14 (20) '2.0'\n+5FBED8 Created OS            00 (0) 'MS-DOS'\n+5FBED9 Extract Zip Spec      14 (20) '2.0'\n+5FBEDA Extract OS            00 (0) 'MS-DOS'\n+5FBEDB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FBEDD Compression Method    0000 (0) 'Stored'\n+5FBEDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBEE3 CRC                   A64E298E (2790140302)\n+5FBEE7 Compressed Size       000007A5 (1957)\n+5FBEEB Uncompressed Size     000007A5 (1957)\n+5FBEEF Filename Length       0075 (117)\n+5FBEF1 Extra Length          0009 (9)\n+5FBEF3 Comment Length        0000 (0)\n+5FBEF5 Disk Start            0000 (0)\n+5FBEF7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBEF9 Ext File Attributes   00000000 (0)\n+5FBEFD Local Header Offset   000D4F86 (872326)\n+5FBF01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBF01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FBF76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FBF78   Length              0005 (5)\n+5FBF7A   Flags               01 (1) 'Modification'\n+5FBF7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FBF7F CENTRAL HEADER #350   02014B50 (33639248)\n+5FBF83 Created Zip Spec      14 (20) '2.0'\n+5FBF84 Created OS            00 (0) 'MS-DOS'\n+5FBF85 Extract Zip Spec      14 (20) '2.0'\n+5FBF86 Extract OS            00 (0) 'MS-DOS'\n+5FBF87 General Purpose Flag  0000 (0)\n+5FBF89 Compression Method    0000 (0) 'Stored'\n+5FBF8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FBF8F CRC                   00000000 (0)\n+5FBF93 Compressed Size       00000000 (0)\n+5FBF97 Uncompressed Size     00000000 (0)\n+5FBF9B Filename Length       0058 (88)\n+5FBF9D Extra Length          0009 (9)\n+5FBF9F Comment Length        0000 (0)\n+5FBFA1 Disk Start            0000 (0)\n+5FBFA3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FBFA5 Ext File Attributes   00000000 (0)\n+5FBFA9 Local Header Offset   000D57D7 (874455)\n+5FBFAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FBFAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC005 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC007   Length              0005 (5)\n+5FC009   Flags               01 (1) 'Modification'\n+5FC00A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC00E CENTRAL HEADER #351   02014B50 (33639248)\n+5FC012 Created Zip Spec      14 (20) '2.0'\n+5FC013 Created OS            00 (0) 'MS-DOS'\n+5FC014 Extract Zip Spec      14 (20) '2.0'\n+5FC015 Extract OS            00 (0) 'MS-DOS'\n+5FC016 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC018 Compression Method    0000 (0) 'Stored'\n+5FC01A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC01E CRC                   937D5C9D (2474466461)\n+5FC022 Compressed Size       00000F43 (3907)\n+5FC026 Uncompressed Size     00000F43 (3907)\n+5FC02A Filename Length       006E (110)\n+5FC02C Extra Length          0009 (9)\n+5FC02E Comment Length        0000 (0)\n+5FC030 Disk Start            0000 (0)\n+5FC032 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC034 Ext File Attributes   00000000 (0)\n+5FC038 Local Header Offset   000D5856 (874582)\n+5FC03C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC03C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC0AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC0AC   Length              0005 (5)\n+5FC0AE   Flags               01 (1) 'Modification'\n+5FC0AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC0B3 CENTRAL HEADER #352   02014B50 (33639248)\n+5FC0B7 Created Zip Spec      14 (20) '2.0'\n+5FC0B8 Created OS            00 (0) 'MS-DOS'\n+5FC0B9 Extract Zip Spec      14 (20) '2.0'\n+5FC0BA Extract OS            00 (0) 'MS-DOS'\n+5FC0BB General Purpose Flag  0000 (0)\n+5FC0BD Compression Method    0000 (0) 'Stored'\n+5FC0BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC0C3 CRC                   00000000 (0)\n+5FC0C7 Compressed Size       00000000 (0)\n+5FC0CB Uncompressed Size     00000000 (0)\n+5FC0CF Filename Length       0025 (37)\n+5FC0D1 Extra Length          0009 (9)\n+5FC0D3 Comment Length        0000 (0)\n+5FC0D5 Disk Start            0000 (0)\n+5FC0D7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC0D9 Ext File Attributes   00000000 (0)\n+5FC0DD Local Header Offset   000D683E (878654)\n+5FC0E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC0E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC108   Length              0005 (5)\n+5FC10A   Flags               01 (1) 'Modification'\n+5FC10B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC10F CENTRAL HEADER #353   02014B50 (33639248)\n+5FC113 Created Zip Spec      14 (20) '2.0'\n+5FC114 Created OS            00 (0) 'MS-DOS'\n+5FC115 Extract Zip Spec      14 (20) '2.0'\n+5FC116 Extract OS            00 (0) 'MS-DOS'\n+5FC117 General Purpose Flag  0000 (0)\n+5FC119 Compression Method    0000 (0) 'Stored'\n+5FC11B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC11F CRC                   00000000 (0)\n+5FC123 Compressed Size       00000000 (0)\n+5FC127 Uncompressed Size     00000000 (0)\n+5FC12B Filename Length       002C (44)\n+5FC12D Extra Length          0009 (9)\n+5FC12F Comment Length        0000 (0)\n+5FC131 Disk Start            0000 (0)\n+5FC133 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC135 Ext File Attributes   00000000 (0)\n+5FC139 Local Header Offset   000D688A (878730)\n+5FC13D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC13D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC169 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC16B   Length              0005 (5)\n+5FC16D   Flags               01 (1) 'Modification'\n+5FC16E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC172 CENTRAL HEADER #354   02014B50 (33639248)\n+5FC176 Created Zip Spec      14 (20) '2.0'\n+5FC177 Created OS            00 (0) 'MS-DOS'\n+5FC178 Extract Zip Spec      14 (20) '2.0'\n+5FC179 Extract OS            00 (0) 'MS-DOS'\n+5FC17A General Purpose Flag  0000 (0)\n+5FC17C Compression Method    0000 (0) 'Stored'\n+5FC17E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC182 CRC                   00000000 (0)\n+5FC186 Compressed Size       00000000 (0)\n+5FC18A Uncompressed Size     00000000 (0)\n+5FC18E Filename Length       005C (92)\n+5FC190 Extra Length          0009 (9)\n+5FC192 Comment Length        0000 (0)\n+5FC194 Disk Start            0000 (0)\n+5FC196 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC198 Ext File Attributes   00000000 (0)\n+5FC19C Local Header Offset   000D68DD (878813)\n+5FC1A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC1A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC1FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC1FE   Length              0005 (5)\n+5FC200   Flags               01 (1) 'Modification'\n+5FC201   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC205 CENTRAL HEADER #355   02014B50 (33639248)\n+5FC209 Created Zip Spec      14 (20) '2.0'\n+5FC20A Created OS            00 (0) 'MS-DOS'\n+5FC20B Extract Zip Spec      14 (20) '2.0'\n+5FC20C Extract OS            00 (0) 'MS-DOS'\n+5FC20D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC20F Compression Method    0000 (0) 'Stored'\n+5FC211 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC215 CRC                   335CA1CD (861708749)\n+5FC219 Compressed Size       00000E9A (3738)\n+5FC21D Uncompressed Size     00000E9A (3738)\n+5FC221 Filename Length       0072 (114)\n+5FC223 Extra Length          0009 (9)\n+5FC225 Comment Length        0000 (0)\n+5FC227 Disk Start            0000 (0)\n+5FC229 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC22B Ext File Attributes   00000000 (0)\n+5FC22F Local Header Offset   000D6960 (878944)\n+5FC233 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC233: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC2A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC2A7   Length              0005 (5)\n+5FC2A9   Flags               01 (1) 'Modification'\n+5FC2AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC2AE CENTRAL HEADER #356   02014B50 (33639248)\n+5FC2B2 Created Zip Spec      14 (20) '2.0'\n+5FC2B3 Created OS            00 (0) 'MS-DOS'\n+5FC2B4 Extract Zip Spec      14 (20) '2.0'\n+5FC2B5 Extract OS            00 (0) 'MS-DOS'\n+5FC2B6 General Purpose Flag  0000 (0)\n+5FC2B8 Compression Method    0000 (0) 'Stored'\n+5FC2BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC2BE CRC                   00000000 (0)\n+5FC2C2 Compressed Size       00000000 (0)\n+5FC2C6 Uncompressed Size     00000000 (0)\n+5FC2CA Filename Length       0068 (104)\n+5FC2CC Extra Length          0009 (9)\n+5FC2CE Comment Length        0000 (0)\n+5FC2D0 Disk Start            0000 (0)\n+5FC2D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC2D4 Ext File Attributes   00000000 (0)\n+5FC2D8 Local Header Offset   000D78A3 (882851)\n+5FC2DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC2DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC344 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC346   Length              0005 (5)\n+5FC348   Flags               01 (1) 'Modification'\n+5FC349   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC34D CENTRAL HEADER #357   02014B50 (33639248)\n+5FC351 Created Zip Spec      14 (20) '2.0'\n+5FC352 Created OS            00 (0) 'MS-DOS'\n+5FC353 Extract Zip Spec      14 (20) '2.0'\n+5FC354 Extract OS            00 (0) 'MS-DOS'\n+5FC355 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC357 Compression Method    0000 (0) 'Stored'\n+5FC359 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC35D CRC                   3EE7FDDD (1055391197)\n+5FC361 Compressed Size       00001059 (4185)\n+5FC365 Uncompressed Size     00001059 (4185)\n+5FC369 Filename Length       007E (126)\n+5FC36B Extra Length          0009 (9)\n+5FC36D Comment Length        0000 (0)\n+5FC36F Disk Start            0000 (0)\n+5FC371 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC373 Ext File Attributes   00000000 (0)\n+5FC377 Local Header Offset   000D7932 (882994)\n+5FC37B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC37B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC3F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC3FB   Length              0005 (5)\n+5FC3FD   Flags               01 (1) 'Modification'\n+5FC3FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC402 CENTRAL HEADER #358   02014B50 (33639248)\n+5FC406 Created Zip Spec      14 (20) '2.0'\n+5FC407 Created OS            00 (0) 'MS-DOS'\n+5FC408 Extract Zip Spec      14 (20) '2.0'\n+5FC409 Extract OS            00 (0) 'MS-DOS'\n+5FC40A General Purpose Flag  0000 (0)\n+5FC40C Compression Method    0000 (0) 'Stored'\n+5FC40E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC412 CRC                   00000000 (0)\n+5FC416 Compressed Size       00000000 (0)\n+5FC41A Uncompressed Size     00000000 (0)\n+5FC41E Filename Length       0025 (37)\n+5FC420 Extra Length          0009 (9)\n+5FC422 Comment Length        0000 (0)\n+5FC424 Disk Start            0000 (0)\n+5FC426 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC428 Ext File Attributes   00000000 (0)\n+5FC42C Local Header Offset   000D8A40 (887360)\n+5FC430 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC430: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC455 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC457   Length              0005 (5)\n+5FC459   Flags               01 (1) 'Modification'\n+5FC45A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC45E CENTRAL HEADER #359   02014B50 (33639248)\n+5FC462 Created Zip Spec      14 (20) '2.0'\n+5FC463 Created OS            00 (0) 'MS-DOS'\n+5FC464 Extract Zip Spec      14 (20) '2.0'\n+5FC465 Extract OS            00 (0) 'MS-DOS'\n+5FC466 General Purpose Flag  0000 (0)\n+5FC468 Compression Method    0000 (0) 'Stored'\n+5FC46A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC46E CRC                   00000000 (0)\n+5FC472 Compressed Size       00000000 (0)\n+5FC476 Uncompressed Size     00000000 (0)\n+5FC47A Filename Length       002C (44)\n+5FC47C Extra Length          0009 (9)\n+5FC47E Comment Length        0000 (0)\n+5FC480 Disk Start            0000 (0)\n+5FC482 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC484 Ext File Attributes   00000000 (0)\n+5FC488 Local Header Offset   000D8A8C (887436)\n+5FC48C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC48C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC4B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC4BA   Length              0005 (5)\n+5FC4BC   Flags               01 (1) 'Modification'\n+5FC4BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC4C1 CENTRAL HEADER #360   02014B50 (33639248)\n+5FC4C5 Created Zip Spec      14 (20) '2.0'\n+5FC4C6 Created OS            00 (0) 'MS-DOS'\n+5FC4C7 Extract Zip Spec      14 (20) '2.0'\n+5FC4C8 Extract OS            00 (0) 'MS-DOS'\n+5FC4C9 General Purpose Flag  0000 (0)\n+5FC4CB Compression Method    0000 (0) 'Stored'\n+5FC4CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC4D1 CRC                   00000000 (0)\n+5FC4D5 Compressed Size       00000000 (0)\n+5FC4D9 Uncompressed Size     00000000 (0)\n+5FC4DD Filename Length       005A (90)\n+5FC4DF Extra Length          0009 (9)\n+5FC4E1 Comment Length        0000 (0)\n+5FC4E3 Disk Start            0000 (0)\n+5FC4E5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC4E7 Ext File Attributes   00000000 (0)\n+5FC4EB Local Header Offset   000D8ADF (887519)\n+5FC4EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC4EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC549 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC54B   Length              0005 (5)\n+5FC54D   Flags               01 (1) 'Modification'\n+5FC54E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC552 CENTRAL HEADER #361   02014B50 (33639248)\n+5FC556 Created Zip Spec      14 (20) '2.0'\n+5FC557 Created OS            00 (0) 'MS-DOS'\n+5FC558 Extract Zip Spec      14 (20) '2.0'\n+5FC559 Extract OS            00 (0) 'MS-DOS'\n+5FC55A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC55C Compression Method    0000 (0) 'Stored'\n+5FC55E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC562 CRC                   0944969F (155489951)\n+5FC566 Compressed Size       000017C7 (6087)\n+5FC56A Uncompressed Size     000017C7 (6087)\n+5FC56E Filename Length       0070 (112)\n+5FC570 Extra Length          0009 (9)\n+5FC572 Comment Length        0000 (0)\n+5FC574 Disk Start            0000 (0)\n+5FC576 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC578 Ext File Attributes   00000000 (0)\n+5FC57C Local Header Offset   000D8B60 (887648)\n+5FC580 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC580: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC5F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC5F2   Length              0005 (5)\n+5FC5F4   Flags               01 (1) 'Modification'\n+5FC5F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC5F9 CENTRAL HEADER #362   02014B50 (33639248)\n+5FC5FD Created Zip Spec      14 (20) '2.0'\n+5FC5FE Created OS            00 (0) 'MS-DOS'\n+5FC5FF Extract Zip Spec      14 (20) '2.0'\n+5FC600 Extract OS            00 (0) 'MS-DOS'\n+5FC601 General Purpose Flag  0000 (0)\n+5FC603 Compression Method    0000 (0) 'Stored'\n+5FC605 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC609 CRC                   00000000 (0)\n+5FC60D Compressed Size       00000000 (0)\n+5FC611 Uncompressed Size     00000000 (0)\n+5FC615 Filename Length       0027 (39)\n+5FC617 Extra Length          0009 (9)\n+5FC619 Comment Length        0000 (0)\n+5FC61B Disk Start            0000 (0)\n+5FC61D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC61F Ext File Attributes   00000000 (0)\n+5FC623 Local Header Offset   000DA3CE (893902)\n+5FC627 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC627: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC64E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC650   Length              0005 (5)\n+5FC652   Flags               01 (1) 'Modification'\n+5FC653   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC657 CENTRAL HEADER #363   02014B50 (33639248)\n+5FC65B Created Zip Spec      14 (20) '2.0'\n+5FC65C Created OS            00 (0) 'MS-DOS'\n+5FC65D Extract Zip Spec      14 (20) '2.0'\n+5FC65E Extract OS            00 (0) 'MS-DOS'\n+5FC65F General Purpose Flag  0000 (0)\n+5FC661 Compression Method    0000 (0) 'Stored'\n+5FC663 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC667 CRC                   00000000 (0)\n+5FC66B Compressed Size       00000000 (0)\n+5FC66F Uncompressed Size     00000000 (0)\n+5FC673 Filename Length       002E (46)\n+5FC675 Extra Length          0009 (9)\n+5FC677 Comment Length        0000 (0)\n+5FC679 Disk Start            0000 (0)\n+5FC67B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC67D Ext File Attributes   00000000 (0)\n+5FC681 Local Header Offset   000DA41C (893980)\n+5FC685 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC685: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC6B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC6B5   Length              0005 (5)\n+5FC6B7   Flags               01 (1) 'Modification'\n+5FC6B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC6BC CENTRAL HEADER #364   02014B50 (33639248)\n+5FC6C0 Created Zip Spec      14 (20) '2.0'\n+5FC6C1 Created OS            00 (0) 'MS-DOS'\n+5FC6C2 Extract Zip Spec      14 (20) '2.0'\n+5FC6C3 Extract OS            00 (0) 'MS-DOS'\n+5FC6C4 General Purpose Flag  0000 (0)\n+5FC6C6 Compression Method    0000 (0) 'Stored'\n+5FC6C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC6CC CRC                   00000000 (0)\n+5FC6D0 Compressed Size       00000000 (0)\n+5FC6D4 Uncompressed Size     00000000 (0)\n+5FC6D8 Filename Length       0067 (103)\n+5FC6DA Extra Length          0009 (9)\n+5FC6DC Comment Length        0000 (0)\n+5FC6DE Disk Start            0000 (0)\n+5FC6E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC6E2 Ext File Attributes   00000000 (0)\n+5FC6E6 Local Header Offset   000DA471 (894065)\n+5FC6EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC6EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC751 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC753   Length              0005 (5)\n+5FC755   Flags               01 (1) 'Modification'\n+5FC756   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC75A CENTRAL HEADER #365   02014B50 (33639248)\n+5FC75E Created Zip Spec      14 (20) '2.0'\n+5FC75F Created OS            00 (0) 'MS-DOS'\n+5FC760 Extract Zip Spec      14 (20) '2.0'\n+5FC761 Extract OS            00 (0) 'MS-DOS'\n+5FC762 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC764 Compression Method    0000 (0) 'Stored'\n+5FC766 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC76A CRC                   67FA3A91 (1744452241)\n+5FC76E Compressed Size       00000C5B (3163)\n+5FC772 Uncompressed Size     00000C5B (3163)\n+5FC776 Filename Length       007D (125)\n+5FC778 Extra Length          0009 (9)\n+5FC77A Comment Length        0000 (0)\n+5FC77C Disk Start            0000 (0)\n+5FC77E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC780 Ext File Attributes   00000000 (0)\n+5FC784 Local Header Offset   000DA4FF (894207)\n+5FC788 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC788: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC805 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC807   Length              0005 (5)\n+5FC809   Flags               01 (1) 'Modification'\n+5FC80A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC80E CENTRAL HEADER #366   02014B50 (33639248)\n+5FC812 Created Zip Spec      14 (20) '2.0'\n+5FC813 Created OS            00 (0) 'MS-DOS'\n+5FC814 Extract Zip Spec      14 (20) '2.0'\n+5FC815 Extract OS            00 (0) 'MS-DOS'\n+5FC816 General Purpose Flag  0000 (0)\n+5FC818 Compression Method    0000 (0) 'Stored'\n+5FC81A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC81E CRC                   00000000 (0)\n+5FC822 Compressed Size       00000000 (0)\n+5FC826 Uncompressed Size     00000000 (0)\n+5FC82A Filename Length       0067 (103)\n+5FC82C Extra Length          0009 (9)\n+5FC82E Comment Length        0000 (0)\n+5FC830 Disk Start            0000 (0)\n+5FC832 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC834 Ext File Attributes   00000000 (0)\n+5FC838 Local Header Offset   000DB20E (897550)\n+5FC83C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC83C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC8A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC8A5   Length              0005 (5)\n+5FC8A7   Flags               01 (1) 'Modification'\n+5FC8A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC8AC CENTRAL HEADER #367   02014B50 (33639248)\n+5FC8B0 Created Zip Spec      14 (20) '2.0'\n+5FC8B1 Created OS            00 (0) 'MS-DOS'\n+5FC8B2 Extract Zip Spec      14 (20) '2.0'\n+5FC8B3 Extract OS            00 (0) 'MS-DOS'\n+5FC8B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC8B6 Compression Method    0000 (0) 'Stored'\n+5FC8B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC8BC CRC                   63513D5C (1666268508)\n+5FC8C0 Compressed Size       000007C0 (1984)\n+5FC8C4 Uncompressed Size     000007C0 (1984)\n+5FC8C8 Filename Length       007D (125)\n+5FC8CA Extra Length          0009 (9)\n+5FC8CC Comment Length        0000 (0)\n+5FC8CE Disk Start            0000 (0)\n+5FC8D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC8D2 Ext File Attributes   00000000 (0)\n+5FC8D6 Local Header Offset   000DB29C (897692)\n+5FC8DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC8DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC959   Length              0005 (5)\n+5FC95B   Flags               01 (1) 'Modification'\n+5FC95C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC960 CENTRAL HEADER #368   02014B50 (33639248)\n+5FC964 Created Zip Spec      14 (20) '2.0'\n+5FC965 Created OS            00 (0) 'MS-DOS'\n+5FC966 Extract Zip Spec      14 (20) '2.0'\n+5FC967 Extract OS            00 (0) 'MS-DOS'\n+5FC968 General Purpose Flag  0000 (0)\n+5FC96A Compression Method    0000 (0) 'Stored'\n+5FC96C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FC970 CRC                   00000000 (0)\n+5FC974 Compressed Size       00000000 (0)\n+5FC978 Uncompressed Size     00000000 (0)\n+5FC97C Filename Length       005E (94)\n+5FC97E Extra Length          0009 (9)\n+5FC980 Comment Length        0000 (0)\n+5FC982 Disk Start            0000 (0)\n+5FC984 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FC986 Ext File Attributes   00000000 (0)\n+5FC98A Local Header Offset   000DBB10 (899856)\n+5FC98E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FC98E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FC9EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FC9EE   Length              0005 (5)\n+5FC9F0   Flags               01 (1) 'Modification'\n+5FC9F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FC9F5 CENTRAL HEADER #369   02014B50 (33639248)\n+5FC9F9 Created Zip Spec      14 (20) '2.0'\n+5FC9FA Created OS            00 (0) 'MS-DOS'\n+5FC9FB Extract Zip Spec      14 (20) '2.0'\n+5FC9FC Extract OS            00 (0) 'MS-DOS'\n+5FC9FD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FC9FF Compression Method    0000 (0) 'Stored'\n+5FCA01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCA05 CRC                   99929518 (2576520472)\n+5FCA09 Compressed Size       00000EDA (3802)\n+5FCA0D Uncompressed Size     00000EDA (3802)\n+5FCA11 Filename Length       0074 (116)\n+5FCA13 Extra Length          0009 (9)\n+5FCA15 Comment Length        0000 (0)\n+5FCA17 Disk Start            0000 (0)\n+5FCA19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCA1B Ext File Attributes   00000000 (0)\n+5FCA1F Local Header Offset   000DBB95 (899989)\n+5FCA23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCA23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCA97 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCA99   Length              0005 (5)\n+5FCA9B   Flags               01 (1) 'Modification'\n+5FCA9C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCAA0 CENTRAL HEADER #370   02014B50 (33639248)\n+5FCAA4 Created Zip Spec      14 (20) '2.0'\n+5FCAA5 Created OS            00 (0) 'MS-DOS'\n+5FCAA6 Extract Zip Spec      14 (20) '2.0'\n+5FCAA7 Extract OS            00 (0) 'MS-DOS'\n+5FCAA8 General Purpose Flag  0000 (0)\n+5FCAAA Compression Method    0000 (0) 'Stored'\n+5FCAAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCAB0 CRC                   00000000 (0)\n+5FCAB4 Compressed Size       00000000 (0)\n+5FCAB8 Uncompressed Size     00000000 (0)\n+5FCABC Filename Length       005C (92)\n+5FCABE Extra Length          0009 (9)\n+5FCAC0 Comment Length        0000 (0)\n+5FCAC2 Disk Start            0000 (0)\n+5FCAC4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCAC6 Ext File Attributes   00000000 (0)\n+5FCACA Local Header Offset   000DCB1A (903962)\n+5FCACE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCACE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCB2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCB2C   Length              0005 (5)\n+5FCB2E   Flags               01 (1) 'Modification'\n+5FCB2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCB33 CENTRAL HEADER #371   02014B50 (33639248)\n+5FCB37 Created Zip Spec      14 (20) '2.0'\n+5FCB38 Created OS            00 (0) 'MS-DOS'\n+5FCB39 Extract Zip Spec      14 (20) '2.0'\n+5FCB3A Extract OS            00 (0) 'MS-DOS'\n+5FCB3B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FCB3D Compression Method    0000 (0) 'Stored'\n+5FCB3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCB43 CRC                   E6BF62E0 (3871302368)\n+5FCB47 Compressed Size       000008F8 (2296)\n+5FCB4B Uncompressed Size     000008F8 (2296)\n+5FCB4F Filename Length       0072 (114)\n+5FCB51 Extra Length          0009 (9)\n+5FCB53 Comment Length        0000 (0)\n+5FCB55 Disk Start            0000 (0)\n+5FCB57 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCB59 Ext File Attributes   00000000 (0)\n+5FCB5D Local Header Offset   000DCB9D (904093)\n+5FCB61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCB61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCBD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCBD5   Length              0005 (5)\n+5FCBD7   Flags               01 (1) 'Modification'\n+5FCBD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCBDC CENTRAL HEADER #372   02014B50 (33639248)\n+5FCBE0 Created Zip Spec      14 (20) '2.0'\n+5FCBE1 Created OS            00 (0) 'MS-DOS'\n+5FCBE2 Extract Zip Spec      14 (20) '2.0'\n+5FCBE3 Extract OS            00 (0) 'MS-DOS'\n+5FCBE4 General Purpose Flag  0000 (0)\n+5FCBE6 Compression Method    0000 (0) 'Stored'\n+5FCBE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCBEC CRC                   00000000 (0)\n+5FCBF0 Compressed Size       00000000 (0)\n+5FCBF4 Uncompressed Size     00000000 (0)\n+5FCBF8 Filename Length       0061 (97)\n+5FCBFA Extra Length          0009 (9)\n+5FCBFC Comment Length        0000 (0)\n+5FCBFE Disk Start            0000 (0)\n+5FCC00 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCC02 Ext File Attributes   00000000 (0)\n+5FCC06 Local Header Offset   000DD53E (906558)\n+5FCC0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCC0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCC6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCC6D   Length              0005 (5)\n+5FCC6F   Flags               01 (1) 'Modification'\n+5FCC70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCC74 CENTRAL HEADER #373   02014B50 (33639248)\n+5FCC78 Created Zip Spec      14 (20) '2.0'\n+5FCC79 Created OS            00 (0) 'MS-DOS'\n+5FCC7A Extract Zip Spec      14 (20) '2.0'\n+5FCC7B Extract OS            00 (0) 'MS-DOS'\n+5FCC7C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FCC7E Compression Method    0000 (0) 'Stored'\n+5FCC80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCC84 CRC                   01130591 (18023825)\n+5FCC88 Compressed Size       00000594 (1428)\n+5FCC8C Uncompressed Size     00000594 (1428)\n+5FCC90 Filename Length       0077 (119)\n+5FCC92 Extra Length          0009 (9)\n+5FCC94 Comment Length        0000 (0)\n+5FCC96 Disk Start            0000 (0)\n+5FCC98 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCC9A Ext File Attributes   00000000 (0)\n+5FCC9E Local Header Offset   000DD5C6 (906694)\n+5FCCA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCCA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCD19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCD1B   Length              0005 (5)\n+5FCD1D   Flags               01 (1) 'Modification'\n+5FCD1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCD22 CENTRAL HEADER #374   02014B50 (33639248)\n+5FCD26 Created Zip Spec      14 (20) '2.0'\n+5FCD27 Created OS            00 (0) 'MS-DOS'\n+5FCD28 Extract Zip Spec      14 (20) '2.0'\n+5FCD29 Extract OS            00 (0) 'MS-DOS'\n+5FCD2A General Purpose Flag  0000 (0)\n+5FCD2C Compression Method    0000 (0) 'Stored'\n+5FCD2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCD32 CRC                   00000000 (0)\n+5FCD36 Compressed Size       00000000 (0)\n+5FCD3A Uncompressed Size     00000000 (0)\n+5FCD3E Filename Length       0063 (99)\n+5FCD40 Extra Length          0009 (9)\n+5FCD42 Comment Length        0000 (0)\n+5FCD44 Disk Start            0000 (0)\n+5FCD46 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCD48 Ext File Attributes   00000000 (0)\n+5FCD4C Local Header Offset   000DDC08 (908296)\n+5FCD50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCD50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCDB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCDB5   Length              0005 (5)\n+5FCDB7   Flags               01 (1) 'Modification'\n+5FCDB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCDBC CENTRAL HEADER #375   02014B50 (33639248)\n+5FCDC0 Created Zip Spec      14 (20) '2.0'\n+5FCDC1 Created OS            00 (0) 'MS-DOS'\n+5FCDC2 Extract Zip Spec      14 (20) '2.0'\n+5FCDC3 Extract OS            00 (0) 'MS-DOS'\n+5FCDC4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FCDC6 Compression Method    0000 (0) 'Stored'\n+5FCDC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCDCC CRC                   F05E2331 (4032701233)\n+5FCDD0 Compressed Size       00000831 (2097)\n+5FCDD4 Uncompressed Size     00000831 (2097)\n+5FCDD8 Filename Length       0079 (121)\n+5FCDDA Extra Length          0009 (9)\n+5FCDDC Comment Length        0000 (0)\n+5FCDDE Disk Start            0000 (0)\n+5FCDE0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCDE2 Ext File Attributes   00000000 (0)\n+5FCDE6 Local Header Offset   000DDC92 (908434)\n+5FCDEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCDEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCE63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCE65   Length              0005 (5)\n+5FCE67   Flags               01 (1) 'Modification'\n+5FCE68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCE6C CENTRAL HEADER #376   02014B50 (33639248)\n+5FCE70 Created Zip Spec      14 (20) '2.0'\n+5FCE71 Created OS            00 (0) 'MS-DOS'\n+5FCE72 Extract Zip Spec      14 (20) '2.0'\n+5FCE73 Extract OS            00 (0) 'MS-DOS'\n+5FCE74 General Purpose Flag  0000 (0)\n+5FCE76 Compression Method    0000 (0) 'Stored'\n+5FCE78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCE7C CRC                   00000000 (0)\n+5FCE80 Compressed Size       00000000 (0)\n+5FCE84 Uncompressed Size     00000000 (0)\n+5FCE88 Filename Length       0061 (97)\n+5FCE8A Extra Length          0009 (9)\n+5FCE8C Comment Length        0000 (0)\n+5FCE8E Disk Start            0000 (0)\n+5FCE90 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCE92 Ext File Attributes   00000000 (0)\n+5FCE96 Local Header Offset   000DE573 (910707)\n+5FCE9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCE9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCEFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCEFD   Length              0005 (5)\n+5FCEFF   Flags               01 (1) 'Modification'\n+5FCF00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCF04 CENTRAL HEADER #377   02014B50 (33639248)\n+5FCF08 Created Zip Spec      14 (20) '2.0'\n+5FCF09 Created OS            00 (0) 'MS-DOS'\n+5FCF0A Extract Zip Spec      14 (20) '2.0'\n+5FCF0B Extract OS            00 (0) 'MS-DOS'\n+5FCF0C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FCF0E Compression Method    0000 (0) 'Stored'\n+5FCF10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCF14 CRC                   80ED3BA4 (2163030948)\n+5FCF18 Compressed Size       000015D0 (5584)\n+5FCF1C Uncompressed Size     000015D0 (5584)\n+5FCF20 Filename Length       0077 (119)\n+5FCF22 Extra Length          0009 (9)\n+5FCF24 Comment Length        0000 (0)\n+5FCF26 Disk Start            0000 (0)\n+5FCF28 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCF2A Ext File Attributes   00000000 (0)\n+5FCF2E Local Header Offset   000DE5FB (910843)\n+5FCF32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCF32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FCFA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FCFAB   Length              0005 (5)\n+5FCFAD   Flags               01 (1) 'Modification'\n+5FCFAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FCFB2 CENTRAL HEADER #378   02014B50 (33639248)\n+5FCFB6 Created Zip Spec      14 (20) '2.0'\n+5FCFB7 Created OS            00 (0) 'MS-DOS'\n+5FCFB8 Extract Zip Spec      14 (20) '2.0'\n+5FCFB9 Extract OS            00 (0) 'MS-DOS'\n+5FCFBA General Purpose Flag  0000 (0)\n+5FCFBC Compression Method    0000 (0) 'Stored'\n+5FCFBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FCFC2 CRC                   00000000 (0)\n+5FCFC6 Compressed Size       00000000 (0)\n+5FCFCA Uncompressed Size     00000000 (0)\n+5FCFCE Filename Length       0067 (103)\n+5FCFD0 Extra Length          0009 (9)\n+5FCFD2 Comment Length        0000 (0)\n+5FCFD4 Disk Start            0000 (0)\n+5FCFD6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FCFD8 Ext File Attributes   00000000 (0)\n+5FCFDC Local Header Offset   000DFC79 (916601)\n+5FCFE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FCFE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD047 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD049   Length              0005 (5)\n+5FD04B   Flags               01 (1) 'Modification'\n+5FD04C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD050 CENTRAL HEADER #379   02014B50 (33639248)\n+5FD054 Created Zip Spec      14 (20) '2.0'\n+5FD055 Created OS            00 (0) 'MS-DOS'\n+5FD056 Extract Zip Spec      14 (20) '2.0'\n+5FD057 Extract OS            00 (0) 'MS-DOS'\n+5FD058 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD05A Compression Method    0000 (0) 'Stored'\n+5FD05C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD060 CRC                   BEB620A1 (3199606945)\n+5FD064 Compressed Size       00001FB2 (8114)\n+5FD068 Uncompressed Size     00001FB2 (8114)\n+5FD06C Filename Length       007D (125)\n+5FD06E Extra Length          0009 (9)\n+5FD070 Comment Length        0000 (0)\n+5FD072 Disk Start            0000 (0)\n+5FD074 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD076 Ext File Attributes   00000000 (0)\n+5FD07A Local Header Offset   000DFD07 (916743)\n+5FD07E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD07E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD0FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD0FD   Length              0005 (5)\n+5FD0FF   Flags               01 (1) 'Modification'\n+5FD100   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD104 CENTRAL HEADER #380   02014B50 (33639248)\n+5FD108 Created Zip Spec      14 (20) '2.0'\n+5FD109 Created OS            00 (0) 'MS-DOS'\n+5FD10A Extract Zip Spec      14 (20) '2.0'\n+5FD10B Extract OS            00 (0) 'MS-DOS'\n+5FD10C General Purpose Flag  0000 (0)\n+5FD10E Compression Method    0000 (0) 'Stored'\n+5FD110 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD114 CRC                   00000000 (0)\n+5FD118 Compressed Size       00000000 (0)\n+5FD11C Uncompressed Size     00000000 (0)\n+5FD120 Filename Length       005E (94)\n+5FD122 Extra Length          0009 (9)\n+5FD124 Comment Length        0000 (0)\n+5FD126 Disk Start            0000 (0)\n+5FD128 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD12A Ext File Attributes   00000000 (0)\n+5FD12E Local Header Offset   000E1D6D (925037)\n+5FD132 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD132: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD190 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD192   Length              0005 (5)\n+5FD194   Flags               01 (1) 'Modification'\n+5FD195   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD199 CENTRAL HEADER #381   02014B50 (33639248)\n+5FD19D Created Zip Spec      14 (20) '2.0'\n+5FD19E Created OS            00 (0) 'MS-DOS'\n+5FD19F Extract Zip Spec      14 (20) '2.0'\n+5FD1A0 Extract OS            00 (0) 'MS-DOS'\n+5FD1A1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD1A3 Compression Method    0000 (0) 'Stored'\n+5FD1A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD1A9 CRC                   61A0CE5A (1637928538)\n+5FD1AD Compressed Size       000012FA (4858)\n+5FD1B1 Uncompressed Size     000012FA (4858)\n+5FD1B5 Filename Length       0074 (116)\n+5FD1B7 Extra Length          0009 (9)\n+5FD1B9 Comment Length        0000 (0)\n+5FD1BB Disk Start            0000 (0)\n+5FD1BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD1BF Ext File Attributes   00000000 (0)\n+5FD1C3 Local Header Offset   000E1DF2 (925170)\n+5FD1C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD1C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD23B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD23D   Length              0005 (5)\n+5FD23F   Flags               01 (1) 'Modification'\n+5FD240   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD244 CENTRAL HEADER #382   02014B50 (33639248)\n+5FD248 Created Zip Spec      14 (20) '2.0'\n+5FD249 Created OS            00 (0) 'MS-DOS'\n+5FD24A Extract Zip Spec      14 (20) '2.0'\n+5FD24B Extract OS            00 (0) 'MS-DOS'\n+5FD24C General Purpose Flag  0000 (0)\n+5FD24E Compression Method    0000 (0) 'Stored'\n+5FD250 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD254 CRC                   00000000 (0)\n+5FD258 Compressed Size       00000000 (0)\n+5FD25C Uncompressed Size     00000000 (0)\n+5FD260 Filename Length       0061 (97)\n+5FD262 Extra Length          0009 (9)\n+5FD264 Comment Length        0000 (0)\n+5FD266 Disk Start            0000 (0)\n+5FD268 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD26A Ext File Attributes   00000000 (0)\n+5FD26E Local Header Offset   000E3197 (930199)\n+5FD272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD2D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD2D5   Length              0005 (5)\n+5FD2D7   Flags               01 (1) 'Modification'\n+5FD2D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD2DC CENTRAL HEADER #383   02014B50 (33639248)\n+5FD2E0 Created Zip Spec      14 (20) '2.0'\n+5FD2E1 Created OS            00 (0) 'MS-DOS'\n+5FD2E2 Extract Zip Spec      14 (20) '2.0'\n+5FD2E3 Extract OS            00 (0) 'MS-DOS'\n+5FD2E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD2E6 Compression Method    0000 (0) 'Stored'\n+5FD2E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD2EC CRC                   624BE63E (1649141310)\n+5FD2F0 Compressed Size       00001315 (4885)\n+5FD2F4 Uncompressed Size     00001315 (4885)\n+5FD2F8 Filename Length       0077 (119)\n+5FD2FA Extra Length          0009 (9)\n+5FD2FC Comment Length        0000 (0)\n+5FD2FE Disk Start            0000 (0)\n+5FD300 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD302 Ext File Attributes   00000000 (0)\n+5FD306 Local Header Offset   000E321F (930335)\n+5FD30A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD30A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD381 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD383   Length              0005 (5)\n+5FD385   Flags               01 (1) 'Modification'\n+5FD386   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD38A CENTRAL HEADER #384   02014B50 (33639248)\n+5FD38E Created Zip Spec      14 (20) '2.0'\n+5FD38F Created OS            00 (0) 'MS-DOS'\n+5FD390 Extract Zip Spec      14 (20) '2.0'\n+5FD391 Extract OS            00 (0) 'MS-DOS'\n+5FD392 General Purpose Flag  0000 (0)\n+5FD394 Compression Method    0000 (0) 'Stored'\n+5FD396 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD39A CRC                   00000000 (0)\n+5FD39E Compressed Size       00000000 (0)\n+5FD3A2 Uncompressed Size     00000000 (0)\n+5FD3A6 Filename Length       005D (93)\n+5FD3A8 Extra Length          0009 (9)\n+5FD3AA Comment Length        0000 (0)\n+5FD3AC Disk Start            0000 (0)\n+5FD3AE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD3B0 Ext File Attributes   00000000 (0)\n+5FD3B4 Local Header Offset   000E45E2 (935394)\n+5FD3B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD3B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD415 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD417   Length              0005 (5)\n+5FD419   Flags               01 (1) 'Modification'\n+5FD41A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD41E CENTRAL HEADER #385   02014B50 (33639248)\n+5FD422 Created Zip Spec      14 (20) '2.0'\n+5FD423 Created OS            00 (0) 'MS-DOS'\n+5FD424 Extract Zip Spec      14 (20) '2.0'\n+5FD425 Extract OS            00 (0) 'MS-DOS'\n+5FD426 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD428 Compression Method    0000 (0) 'Stored'\n+5FD42A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD42E CRC                   F4A07CA3 (4104158371)\n+5FD432 Compressed Size       000027E4 (10212)\n+5FD436 Uncompressed Size     000027E4 (10212)\n+5FD43A Filename Length       0073 (115)\n+5FD43C Extra Length          0009 (9)\n+5FD43E Comment Length        0000 (0)\n+5FD440 Disk Start            0000 (0)\n+5FD442 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD444 Ext File Attributes   00000000 (0)\n+5FD448 Local Header Offset   000E4666 (935526)\n+5FD44C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD44C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD4BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD4C1   Length              0005 (5)\n+5FD4C3   Flags               01 (1) 'Modification'\n+5FD4C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD4C8 CENTRAL HEADER #386   02014B50 (33639248)\n+5FD4CC Created Zip Spec      14 (20) '2.0'\n+5FD4CD Created OS            00 (0) 'MS-DOS'\n+5FD4CE Extract Zip Spec      14 (20) '2.0'\n+5FD4CF Extract OS            00 (0) 'MS-DOS'\n+5FD4D0 General Purpose Flag  0000 (0)\n+5FD4D2 Compression Method    0000 (0) 'Stored'\n+5FD4D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD4D8 CRC                   00000000 (0)\n+5FD4DC Compressed Size       00000000 (0)\n+5FD4E0 Uncompressed Size     00000000 (0)\n+5FD4E4 Filename Length       0065 (101)\n+5FD4E6 Extra Length          0009 (9)\n+5FD4E8 Comment Length        0000 (0)\n+5FD4EA Disk Start            0000 (0)\n+5FD4EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD4EE Ext File Attributes   00000000 (0)\n+5FD4F2 Local Header Offset   000E6EF4 (945908)\n+5FD4F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD4F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD55B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD55D   Length              0005 (5)\n+5FD55F   Flags               01 (1) 'Modification'\n+5FD560   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD564 CENTRAL HEADER #387   02014B50 (33639248)\n+5FD568 Created Zip Spec      14 (20) '2.0'\n+5FD569 Created OS            00 (0) 'MS-DOS'\n+5FD56A Extract Zip Spec      14 (20) '2.0'\n+5FD56B Extract OS            00 (0) 'MS-DOS'\n+5FD56C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD56E Compression Method    0000 (0) 'Stored'\n+5FD570 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD574 CRC                   6E031E40 (1845698112)\n+5FD578 Compressed Size       00001276 (4726)\n+5FD57C Uncompressed Size     00001276 (4726)\n+5FD580 Filename Length       007B (123)\n+5FD582 Extra Length          0009 (9)\n+5FD584 Comment Length        0000 (0)\n+5FD586 Disk Start            0000 (0)\n+5FD588 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD58A Ext File Attributes   00000000 (0)\n+5FD58E Local Header Offset   000E6F80 (946048)\n+5FD592 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD592: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD60D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD60F   Length              0005 (5)\n+5FD611   Flags               01 (1) 'Modification'\n+5FD612   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD616 CENTRAL HEADER #388   02014B50 (33639248)\n+5FD61A Created Zip Spec      14 (20) '2.0'\n+5FD61B Created OS            00 (0) 'MS-DOS'\n+5FD61C Extract Zip Spec      14 (20) '2.0'\n+5FD61D Extract OS            00 (0) 'MS-DOS'\n+5FD61E General Purpose Flag  0000 (0)\n+5FD620 Compression Method    0000 (0) 'Stored'\n+5FD622 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD626 CRC                   00000000 (0)\n+5FD62A Compressed Size       00000000 (0)\n+5FD62E Uncompressed Size     00000000 (0)\n+5FD632 Filename Length       0064 (100)\n+5FD634 Extra Length          0009 (9)\n+5FD636 Comment Length        0000 (0)\n+5FD638 Disk Start            0000 (0)\n+5FD63A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD63C Ext File Attributes   00000000 (0)\n+5FD640 Local Header Offset   000E82A8 (950952)\n+5FD644 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD644: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD6A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD6AA   Length              0005 (5)\n+5FD6AC   Flags               01 (1) 'Modification'\n+5FD6AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD6B1 CENTRAL HEADER #389   02014B50 (33639248)\n+5FD6B5 Created Zip Spec      14 (20) '2.0'\n+5FD6B6 Created OS            00 (0) 'MS-DOS'\n+5FD6B7 Extract Zip Spec      14 (20) '2.0'\n+5FD6B8 Extract OS            00 (0) 'MS-DOS'\n+5FD6B9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD6BB Compression Method    0000 (0) 'Stored'\n+5FD6BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD6C1 CRC                   5987930A (1502057226)\n+5FD6C5 Compressed Size       00000BDE (3038)\n+5FD6C9 Uncompressed Size     00000BDE (3038)\n+5FD6CD Filename Length       007A (122)\n+5FD6CF Extra Length          0009 (9)\n+5FD6D1 Comment Length        0000 (0)\n+5FD6D3 Disk Start            0000 (0)\n+5FD6D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD6D7 Ext File Attributes   00000000 (0)\n+5FD6DB Local Header Offset   000E8333 (951091)\n+5FD6DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD6DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD759 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD75B   Length              0005 (5)\n+5FD75D   Flags               01 (1) 'Modification'\n+5FD75E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD762 CENTRAL HEADER #390   02014B50 (33639248)\n+5FD766 Created Zip Spec      14 (20) '2.0'\n+5FD767 Created OS            00 (0) 'MS-DOS'\n+5FD768 Extract Zip Spec      14 (20) '2.0'\n+5FD769 Extract OS            00 (0) 'MS-DOS'\n+5FD76A General Purpose Flag  0000 (0)\n+5FD76C Compression Method    0000 (0) 'Stored'\n+5FD76E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD772 CRC                   00000000 (0)\n+5FD776 Compressed Size       00000000 (0)\n+5FD77A Uncompressed Size     00000000 (0)\n+5FD77E Filename Length       0065 (101)\n+5FD780 Extra Length          0009 (9)\n+5FD782 Comment Length        0000 (0)\n+5FD784 Disk Start            0000 (0)\n+5FD786 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD788 Ext File Attributes   00000000 (0)\n+5FD78C Local Header Offset   000E8FC2 (954306)\n+5FD790 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD790: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD7F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD7F7   Length              0005 (5)\n+5FD7F9   Flags               01 (1) 'Modification'\n+5FD7FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD7FE CENTRAL HEADER #391   02014B50 (33639248)\n+5FD802 Created Zip Spec      14 (20) '2.0'\n+5FD803 Created OS            00 (0) 'MS-DOS'\n+5FD804 Extract Zip Spec      14 (20) '2.0'\n+5FD805 Extract OS            00 (0) 'MS-DOS'\n+5FD806 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD808 Compression Method    0000 (0) 'Stored'\n+5FD80A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD80E CRC                   CA93F7B9 (3398694841)\n+5FD812 Compressed Size       000008CF (2255)\n+5FD816 Uncompressed Size     000008CF (2255)\n+5FD81A Filename Length       007B (123)\n+5FD81C Extra Length          0009 (9)\n+5FD81E Comment Length        0000 (0)\n+5FD820 Disk Start            0000 (0)\n+5FD822 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD824 Ext File Attributes   00000000 (0)\n+5FD828 Local Header Offset   000E904E (954446)\n+5FD82C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD82C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD8A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD8A9   Length              0005 (5)\n+5FD8AB   Flags               01 (1) 'Modification'\n+5FD8AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD8B0 CENTRAL HEADER #392   02014B50 (33639248)\n+5FD8B4 Created Zip Spec      14 (20) '2.0'\n+5FD8B5 Created OS            00 (0) 'MS-DOS'\n+5FD8B6 Extract Zip Spec      14 (20) '2.0'\n+5FD8B7 Extract OS            00 (0) 'MS-DOS'\n+5FD8B8 General Purpose Flag  0000 (0)\n+5FD8BA Compression Method    0000 (0) 'Stored'\n+5FD8BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD8C0 CRC                   00000000 (0)\n+5FD8C4 Compressed Size       00000000 (0)\n+5FD8C8 Uncompressed Size     00000000 (0)\n+5FD8CC Filename Length       0063 (99)\n+5FD8CE Extra Length          0009 (9)\n+5FD8D0 Comment Length        0000 (0)\n+5FD8D2 Disk Start            0000 (0)\n+5FD8D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD8D6 Ext File Attributes   00000000 (0)\n+5FD8DA Local Header Offset   000E99CF (956879)\n+5FD8DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD8DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD941 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD943   Length              0005 (5)\n+5FD945   Flags               01 (1) 'Modification'\n+5FD946   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD94A CENTRAL HEADER #393   02014B50 (33639248)\n+5FD94E Created Zip Spec      14 (20) '2.0'\n+5FD94F Created OS            00 (0) 'MS-DOS'\n+5FD950 Extract Zip Spec      14 (20) '2.0'\n+5FD951 Extract OS            00 (0) 'MS-DOS'\n+5FD952 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FD954 Compression Method    0000 (0) 'Stored'\n+5FD956 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FD95A CRC                   673E5975 (1732139381)\n+5FD95E Compressed Size       00000CA9 (3241)\n+5FD962 Uncompressed Size     00000CA9 (3241)\n+5FD966 Filename Length       0079 (121)\n+5FD968 Extra Length          0009 (9)\n+5FD96A Comment Length        0000 (0)\n+5FD96C Disk Start            0000 (0)\n+5FD96E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FD970 Ext File Attributes   00000000 (0)\n+5FD974 Local Header Offset   000E9A59 (957017)\n+5FD978 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FD978: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FD9F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FD9F3   Length              0005 (5)\n+5FD9F5   Flags               01 (1) 'Modification'\n+5FD9F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FD9FA CENTRAL HEADER #394   02014B50 (33639248)\n+5FD9FE Created Zip Spec      14 (20) '2.0'\n+5FD9FF Created OS            00 (0) 'MS-DOS'\n+5FDA00 Extract Zip Spec      14 (20) '2.0'\n+5FDA01 Extract OS            00 (0) 'MS-DOS'\n+5FDA02 General Purpose Flag  0000 (0)\n+5FDA04 Compression Method    0000 (0) 'Stored'\n+5FDA06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDA0A CRC                   00000000 (0)\n+5FDA0E Compressed Size       00000000 (0)\n+5FDA12 Uncompressed Size     00000000 (0)\n+5FDA16 Filename Length       0061 (97)\n+5FDA18 Extra Length          0009 (9)\n+5FDA1A Comment Length        0000 (0)\n+5FDA1C Disk Start            0000 (0)\n+5FDA1E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDA20 Ext File Attributes   00000000 (0)\n+5FDA24 Local Header Offset   000EA7B2 (960434)\n+5FDA28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDA28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDA89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDA8B   Length              0005 (5)\n+5FDA8D   Flags               01 (1) 'Modification'\n+5FDA8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDA92 CENTRAL HEADER #395   02014B50 (33639248)\n+5FDA96 Created Zip Spec      14 (20) '2.0'\n+5FDA97 Created OS            00 (0) 'MS-DOS'\n+5FDA98 Extract Zip Spec      14 (20) '2.0'\n+5FDA99 Extract OS            00 (0) 'MS-DOS'\n+5FDA9A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FDA9C Compression Method    0000 (0) 'Stored'\n+5FDA9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDAA2 CRC                   33033645 (855848517)\n+5FDAA6 Compressed Size       0000503C (20540)\n+5FDAAA Uncompressed Size     0000503C (20540)\n+5FDAAE Filename Length       0077 (119)\n+5FDAB0 Extra Length          0009 (9)\n+5FDAB2 Comment Length        0000 (0)\n+5FDAB4 Disk Start            0000 (0)\n+5FDAB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDAB8 Ext File Attributes   00000000 (0)\n+5FDABC Local Header Offset   000EA83A (960570)\n+5FDAC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDAC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDB37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDB39   Length              0005 (5)\n+5FDB3B   Flags               01 (1) 'Modification'\n+5FDB3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDB40 CENTRAL HEADER #396   02014B50 (33639248)\n+5FDB44 Created Zip Spec      14 (20) '2.0'\n+5FDB45 Created OS            00 (0) 'MS-DOS'\n+5FDB46 Extract Zip Spec      14 (20) '2.0'\n+5FDB47 Extract OS            00 (0) 'MS-DOS'\n+5FDB48 General Purpose Flag  0000 (0)\n+5FDB4A Compression Method    0000 (0) 'Stored'\n+5FDB4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDB50 CRC                   00000000 (0)\n+5FDB54 Compressed Size       00000000 (0)\n+5FDB58 Uncompressed Size     00000000 (0)\n+5FDB5C Filename Length       0064 (100)\n+5FDB5E Extra Length          0009 (9)\n+5FDB60 Comment Length        0000 (0)\n+5FDB62 Disk Start            0000 (0)\n+5FDB64 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDB66 Ext File Attributes   00000000 (0)\n+5FDB6A Local Header Offset   000EF924 (981284)\n+5FDB6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDB6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDBD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDBD4   Length              0005 (5)\n+5FDBD6   Flags               01 (1) 'Modification'\n+5FDBD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDBDB CENTRAL HEADER #397   02014B50 (33639248)\n+5FDBDF Created Zip Spec      14 (20) '2.0'\n+5FDBE0 Created OS            00 (0) 'MS-DOS'\n+5FDBE1 Extract Zip Spec      14 (20) '2.0'\n+5FDBE2 Extract OS            00 (0) 'MS-DOS'\n+5FDBE3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FDBE5 Compression Method    0000 (0) 'Stored'\n+5FDBE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDBEB CRC                   F5037A64 (4110645860)\n+5FDBEF Compressed Size       0000080E (2062)\n+5FDBF3 Uncompressed Size     0000080E (2062)\n+5FDBF7 Filename Length       007A (122)\n+5FDBF9 Extra Length          0009 (9)\n+5FDBFB Comment Length        0000 (0)\n+5FDBFD Disk Start            0000 (0)\n+5FDBFF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDC01 Ext File Attributes   00000000 (0)\n+5FDC05 Local Header Offset   000EF9AF (981423)\n+5FDC09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDC09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDC83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDC85   Length              0005 (5)\n+5FDC87   Flags               01 (1) 'Modification'\n+5FDC88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDC8C CENTRAL HEADER #398   02014B50 (33639248)\n+5FDC90 Created Zip Spec      14 (20) '2.0'\n+5FDC91 Created OS            00 (0) 'MS-DOS'\n+5FDC92 Extract Zip Spec      14 (20) '2.0'\n+5FDC93 Extract OS            00 (0) 'MS-DOS'\n+5FDC94 General Purpose Flag  0000 (0)\n+5FDC96 Compression Method    0000 (0) 'Stored'\n+5FDC98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDC9C CRC                   00000000 (0)\n+5FDCA0 Compressed Size       00000000 (0)\n+5FDCA4 Uncompressed Size     00000000 (0)\n+5FDCA8 Filename Length       005A (90)\n+5FDCAA Extra Length          0009 (9)\n+5FDCAC Comment Length        0000 (0)\n+5FDCAE Disk Start            0000 (0)\n+5FDCB0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDCB2 Ext File Attributes   00000000 (0)\n+5FDCB6 Local Header Offset   000F026E (983662)\n+5FDCBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDCBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDD14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDD16   Length              0005 (5)\n+5FDD18   Flags               01 (1) 'Modification'\n+5FDD19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDD1D CENTRAL HEADER #399   02014B50 (33639248)\n+5FDD21 Created Zip Spec      14 (20) '2.0'\n+5FDD22 Created OS            00 (0) 'MS-DOS'\n+5FDD23 Extract Zip Spec      14 (20) '2.0'\n+5FDD24 Extract OS            00 (0) 'MS-DOS'\n+5FDD25 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FDD27 Compression Method    0000 (0) 'Stored'\n+5FDD29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDD2D CRC                   DB187B38 (3675814712)\n+5FDD31 Compressed Size       00001A85 (6789)\n+5FDD35 Uncompressed Size     00001A85 (6789)\n+5FDD39 Filename Length       0070 (112)\n+5FDD3B Extra Length          0009 (9)\n+5FDD3D Comment Length        0000 (0)\n+5FDD3F Disk Start            0000 (0)\n+5FDD41 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDD43 Ext File Attributes   00000000 (0)\n+5FDD47 Local Header Offset   000F02EF (983791)\n+5FDD4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDD4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDDBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDDBD   Length              0005 (5)\n+5FDDBF   Flags               01 (1) 'Modification'\n+5FDDC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDDC4 CENTRAL HEADER #400   02014B50 (33639248)\n+5FDDC8 Created Zip Spec      14 (20) '2.0'\n+5FDDC9 Created OS            00 (0) 'MS-DOS'\n+5FDDCA Extract Zip Spec      14 (20) '2.0'\n+5FDDCB Extract OS            00 (0) 'MS-DOS'\n+5FDDCC General Purpose Flag  0000 (0)\n+5FDDCE Compression Method    0000 (0) 'Stored'\n+5FDDD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDDD4 CRC                   00000000 (0)\n+5FDDD8 Compressed Size       00000000 (0)\n+5FDDDC Uncompressed Size     00000000 (0)\n+5FDDE0 Filename Length       005B (91)\n+5FDDE2 Extra Length          0009 (9)\n+5FDDE4 Comment Length        0000 (0)\n+5FDDE6 Disk Start            0000 (0)\n+5FDDE8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDDEA Ext File Attributes   00000000 (0)\n+5FDDEE Local Header Offset   000F1E1B (990747)\n+5FDDF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDDF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDE4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDE4F   Length              0005 (5)\n+5FDE51   Flags               01 (1) 'Modification'\n+5FDE52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDE56 CENTRAL HEADER #401   02014B50 (33639248)\n+5FDE5A Created Zip Spec      14 (20) '2.0'\n+5FDE5B Created OS            00 (0) 'MS-DOS'\n+5FDE5C Extract Zip Spec      14 (20) '2.0'\n+5FDE5D Extract OS            00 (0) 'MS-DOS'\n+5FDE5E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FDE60 Compression Method    0000 (0) 'Stored'\n+5FDE62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDE66 CRC                   CD183667 (3440916071)\n+5FDE6A Compressed Size       00001A6E (6766)\n+5FDE6E Uncompressed Size     00001A6E (6766)\n+5FDE72 Filename Length       0071 (113)\n+5FDE74 Extra Length          0009 (9)\n+5FDE76 Comment Length        0000 (0)\n+5FDE78 Disk Start            0000 (0)\n+5FDE7A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDE7C Ext File Attributes   00000000 (0)\n+5FDE80 Local Header Offset   000F1E9D (990877)\n+5FDE84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDE84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDEF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDEF7   Length              0005 (5)\n+5FDEF9   Flags               01 (1) 'Modification'\n+5FDEFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDEFE CENTRAL HEADER #402   02014B50 (33639248)\n+5FDF02 Created Zip Spec      14 (20) '2.0'\n+5FDF03 Created OS            00 (0) 'MS-DOS'\n+5FDF04 Extract Zip Spec      14 (20) '2.0'\n+5FDF05 Extract OS            00 (0) 'MS-DOS'\n+5FDF06 General Purpose Flag  0000 (0)\n+5FDF08 Compression Method    0000 (0) 'Stored'\n+5FDF0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDF0E CRC                   00000000 (0)\n+5FDF12 Compressed Size       00000000 (0)\n+5FDF16 Uncompressed Size     00000000 (0)\n+5FDF1A Filename Length       005B (91)\n+5FDF1C Extra Length          0009 (9)\n+5FDF1E Comment Length        0000 (0)\n+5FDF20 Disk Start            0000 (0)\n+5FDF22 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDF24 Ext File Attributes   00000000 (0)\n+5FDF28 Local Header Offset   000F39B3 (997811)\n+5FDF2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDF2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FDF87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FDF89   Length              0005 (5)\n+5FDF8B   Flags               01 (1) 'Modification'\n+5FDF8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FDF90 CENTRAL HEADER #403   02014B50 (33639248)\n+5FDF94 Created Zip Spec      14 (20) '2.0'\n+5FDF95 Created OS            00 (0) 'MS-DOS'\n+5FDF96 Extract Zip Spec      14 (20) '2.0'\n+5FDF97 Extract OS            00 (0) 'MS-DOS'\n+5FDF98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FDF9A Compression Method    0000 (0) 'Stored'\n+5FDF9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FDFA0 CRC                   0C7DD276 (209572470)\n+5FDFA4 Compressed Size       00001A92 (6802)\n+5FDFA8 Uncompressed Size     00001A92 (6802)\n+5FDFAC Filename Length       0071 (113)\n+5FDFAE Extra Length          0009 (9)\n+5FDFB0 Comment Length        0000 (0)\n+5FDFB2 Disk Start            0000 (0)\n+5FDFB4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FDFB6 Ext File Attributes   00000000 (0)\n+5FDFBA Local Header Offset   000F3A35 (997941)\n+5FDFBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FDFBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE02F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE031   Length              0005 (5)\n+5FE033   Flags               01 (1) 'Modification'\n+5FE034   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE038 CENTRAL HEADER #404   02014B50 (33639248)\n+5FE03C Created Zip Spec      14 (20) '2.0'\n+5FE03D Created OS            00 (0) 'MS-DOS'\n+5FE03E Extract Zip Spec      14 (20) '2.0'\n+5FE03F Extract OS            00 (0) 'MS-DOS'\n+5FE040 General Purpose Flag  0000 (0)\n+5FE042 Compression Method    0000 (0) 'Stored'\n+5FE044 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE048 CRC                   00000000 (0)\n+5FE04C Compressed Size       00000000 (0)\n+5FE050 Uncompressed Size     00000000 (0)\n+5FE054 Filename Length       005C (92)\n+5FE056 Extra Length          0009 (9)\n+5FE058 Comment Length        0000 (0)\n+5FE05A Disk Start            0000 (0)\n+5FE05C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE05E Ext File Attributes   00000000 (0)\n+5FE062 Local Header Offset   000F556F (1004911)\n+5FE066 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE066: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE0C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE0C4   Length              0005 (5)\n+5FE0C6   Flags               01 (1) 'Modification'\n+5FE0C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE0CB CENTRAL HEADER #405   02014B50 (33639248)\n+5FE0CF Created Zip Spec      14 (20) '2.0'\n+5FE0D0 Created OS            00 (0) 'MS-DOS'\n+5FE0D1 Extract Zip Spec      14 (20) '2.0'\n+5FE0D2 Extract OS            00 (0) 'MS-DOS'\n+5FE0D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE0D5 Compression Method    0000 (0) 'Stored'\n+5FE0D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE0DB CRC                   60EA12C2 (1625952962)\n+5FE0DF Compressed Size       00001733 (5939)\n+5FE0E3 Uncompressed Size     00001733 (5939)\n+5FE0E7 Filename Length       0072 (114)\n+5FE0E9 Extra Length          0009 (9)\n+5FE0EB Comment Length        0000 (0)\n+5FE0ED Disk Start            0000 (0)\n+5FE0EF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE0F1 Ext File Attributes   00000000 (0)\n+5FE0F5 Local Header Offset   000F55F2 (1005042)\n+5FE0F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE0F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE16B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE16D   Length              0005 (5)\n+5FE16F   Flags               01 (1) 'Modification'\n+5FE170   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE174 CENTRAL HEADER #406   02014B50 (33639248)\n+5FE178 Created Zip Spec      14 (20) '2.0'\n+5FE179 Created OS            00 (0) 'MS-DOS'\n+5FE17A Extract Zip Spec      14 (20) '2.0'\n+5FE17B Extract OS            00 (0) 'MS-DOS'\n+5FE17C General Purpose Flag  0000 (0)\n+5FE17E Compression Method    0000 (0) 'Stored'\n+5FE180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE184 CRC                   00000000 (0)\n+5FE188 Compressed Size       00000000 (0)\n+5FE18C Uncompressed Size     00000000 (0)\n+5FE190 Filename Length       005F (95)\n+5FE192 Extra Length          0009 (9)\n+5FE194 Comment Length        0000 (0)\n+5FE196 Disk Start            0000 (0)\n+5FE198 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE19A Ext File Attributes   00000000 (0)\n+5FE19E Local Header Offset   000F6DCE (1011150)\n+5FE1A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE1A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE201 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE203   Length              0005 (5)\n+5FE205   Flags               01 (1) 'Modification'\n+5FE206   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE20A CENTRAL HEADER #407   02014B50 (33639248)\n+5FE20E Created Zip Spec      14 (20) '2.0'\n+5FE20F Created OS            00 (0) 'MS-DOS'\n+5FE210 Extract Zip Spec      14 (20) '2.0'\n+5FE211 Extract OS            00 (0) 'MS-DOS'\n+5FE212 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE214 Compression Method    0000 (0) 'Stored'\n+5FE216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE21A CRC                   4BB1EABD (1269951165)\n+5FE21E Compressed Size       0000167D (5757)\n+5FE222 Uncompressed Size     0000167D (5757)\n+5FE226 Filename Length       0075 (117)\n+5FE228 Extra Length          0009 (9)\n+5FE22A Comment Length        0000 (0)\n+5FE22C Disk Start            0000 (0)\n+5FE22E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE230 Ext File Attributes   00000000 (0)\n+5FE234 Local Header Offset   000F6E54 (1011284)\n+5FE238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE2AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE2AF   Length              0005 (5)\n+5FE2B1   Flags               01 (1) 'Modification'\n+5FE2B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE2B6 CENTRAL HEADER #408   02014B50 (33639248)\n+5FE2BA Created Zip Spec      14 (20) '2.0'\n+5FE2BB Created OS            00 (0) 'MS-DOS'\n+5FE2BC Extract Zip Spec      14 (20) '2.0'\n+5FE2BD Extract OS            00 (0) 'MS-DOS'\n+5FE2BE General Purpose Flag  0000 (0)\n+5FE2C0 Compression Method    0000 (0) 'Stored'\n+5FE2C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE2C6 CRC                   00000000 (0)\n+5FE2CA Compressed Size       00000000 (0)\n+5FE2CE Uncompressed Size     00000000 (0)\n+5FE2D2 Filename Length       005F (95)\n+5FE2D4 Extra Length          0009 (9)\n+5FE2D6 Comment Length        0000 (0)\n+5FE2D8 Disk Start            0000 (0)\n+5FE2DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE2DC Ext File Attributes   00000000 (0)\n+5FE2E0 Local Header Offset   000F857D (1017213)\n+5FE2E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE2E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE343 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE345   Length              0005 (5)\n+5FE347   Flags               01 (1) 'Modification'\n+5FE348   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE34C CENTRAL HEADER #409   02014B50 (33639248)\n+5FE350 Created Zip Spec      14 (20) '2.0'\n+5FE351 Created OS            00 (0) 'MS-DOS'\n+5FE352 Extract Zip Spec      14 (20) '2.0'\n+5FE353 Extract OS            00 (0) 'MS-DOS'\n+5FE354 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE356 Compression Method    0000 (0) 'Stored'\n+5FE358 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE35C CRC                   A18A8EB9 (2710212281)\n+5FE360 Compressed Size       0000328A (12938)\n+5FE364 Uncompressed Size     0000328A (12938)\n+5FE368 Filename Length       0075 (117)\n+5FE36A Extra Length          0009 (9)\n+5FE36C Comment Length        0000 (0)\n+5FE36E Disk Start            0000 (0)\n+5FE370 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE372 Ext File Attributes   00000000 (0)\n+5FE376 Local Header Offset   000F8603 (1017347)\n+5FE37A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE37A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE3EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE3F1   Length              0005 (5)\n+5FE3F3   Flags               01 (1) 'Modification'\n+5FE3F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE3F8 CENTRAL HEADER #410   02014B50 (33639248)\n+5FE3FC Created Zip Spec      14 (20) '2.0'\n+5FE3FD Created OS            00 (0) 'MS-DOS'\n+5FE3FE Extract Zip Spec      14 (20) '2.0'\n+5FE3FF Extract OS            00 (0) 'MS-DOS'\n+5FE400 General Purpose Flag  0000 (0)\n+5FE402 Compression Method    0000 (0) 'Stored'\n+5FE404 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE408 CRC                   00000000 (0)\n+5FE40C Compressed Size       00000000 (0)\n+5FE410 Uncompressed Size     00000000 (0)\n+5FE414 Filename Length       005E (94)\n+5FE416 Extra Length          0009 (9)\n+5FE418 Comment Length        0000 (0)\n+5FE41A Disk Start            0000 (0)\n+5FE41C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE41E Ext File Attributes   00000000 (0)\n+5FE422 Local Header Offset   000FB939 (1030457)\n+5FE426 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE426: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE484 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE486   Length              0005 (5)\n+5FE488   Flags               01 (1) 'Modification'\n+5FE489   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE48D CENTRAL HEADER #411   02014B50 (33639248)\n+5FE491 Created Zip Spec      14 (20) '2.0'\n+5FE492 Created OS            00 (0) 'MS-DOS'\n+5FE493 Extract Zip Spec      14 (20) '2.0'\n+5FE494 Extract OS            00 (0) 'MS-DOS'\n+5FE495 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE497 Compression Method    0000 (0) 'Stored'\n+5FE499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE49D CRC                   B7B762D6 (3082248918)\n+5FE4A1 Compressed Size       00003879 (14457)\n+5FE4A5 Uncompressed Size     00003879 (14457)\n+5FE4A9 Filename Length       0074 (116)\n+5FE4AB Extra Length          0009 (9)\n+5FE4AD Comment Length        0000 (0)\n+5FE4AF Disk Start            0000 (0)\n+5FE4B1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE4B3 Ext File Attributes   00000000 (0)\n+5FE4B7 Local Header Offset   000FB9BE (1030590)\n+5FE4BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE4BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE52F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE531   Length              0005 (5)\n+5FE533   Flags               01 (1) 'Modification'\n+5FE534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE538 CENTRAL HEADER #412   02014B50 (33639248)\n+5FE53C Created Zip Spec      14 (20) '2.0'\n+5FE53D Created OS            00 (0) 'MS-DOS'\n+5FE53E Extract Zip Spec      14 (20) '2.0'\n+5FE53F Extract OS            00 (0) 'MS-DOS'\n+5FE540 General Purpose Flag  0000 (0)\n+5FE542 Compression Method    0000 (0) 'Stored'\n+5FE544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE548 CRC                   00000000 (0)\n+5FE54C Compressed Size       00000000 (0)\n+5FE550 Uncompressed Size     00000000 (0)\n+5FE554 Filename Length       0062 (98)\n+5FE556 Extra Length          0009 (9)\n+5FE558 Comment Length        0000 (0)\n+5FE55A Disk Start            0000 (0)\n+5FE55C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE55E Ext File Attributes   00000000 (0)\n+5FE562 Local Header Offset   000FF2E2 (1045218)\n+5FE566 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE566: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE5C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE5CA   Length              0005 (5)\n+5FE5CC   Flags               01 (1) 'Modification'\n+5FE5CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE5D1 CENTRAL HEADER #413   02014B50 (33639248)\n+5FE5D5 Created Zip Spec      14 (20) '2.0'\n+5FE5D6 Created OS            00 (0) 'MS-DOS'\n+5FE5D7 Extract Zip Spec      14 (20) '2.0'\n+5FE5D8 Extract OS            00 (0) 'MS-DOS'\n+5FE5D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE5DB Compression Method    0000 (0) 'Stored'\n+5FE5DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE5E1 CRC                   A2B9D29A (2730087066)\n+5FE5E5 Compressed Size       00002150 (8528)\n+5FE5E9 Uncompressed Size     00002150 (8528)\n+5FE5ED Filename Length       0078 (120)\n+5FE5EF Extra Length          0009 (9)\n+5FE5F1 Comment Length        0000 (0)\n+5FE5F3 Disk Start            0000 (0)\n+5FE5F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE5F7 Ext File Attributes   00000000 (0)\n+5FE5FB Local Header Offset   000FF36B (1045355)\n+5FE5FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE5FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE677 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE679   Length              0005 (5)\n+5FE67B   Flags               01 (1) 'Modification'\n+5FE67C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE680 CENTRAL HEADER #414   02014B50 (33639248)\n+5FE684 Created Zip Spec      14 (20) '2.0'\n+5FE685 Created OS            00 (0) 'MS-DOS'\n+5FE686 Extract Zip Spec      14 (20) '2.0'\n+5FE687 Extract OS            00 (0) 'MS-DOS'\n+5FE688 General Purpose Flag  0000 (0)\n+5FE68A Compression Method    0000 (0) 'Stored'\n+5FE68C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE690 CRC                   00000000 (0)\n+5FE694 Compressed Size       00000000 (0)\n+5FE698 Uncompressed Size     00000000 (0)\n+5FE69C Filename Length       005B (91)\n+5FE69E Extra Length          0009 (9)\n+5FE6A0 Comment Length        0000 (0)\n+5FE6A2 Disk Start            0000 (0)\n+5FE6A4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE6A6 Ext File Attributes   00000000 (0)\n+5FE6AA Local Header Offset   0010156A (1054058)\n+5FE6AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE6AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE709 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE70B   Length              0005 (5)\n+5FE70D   Flags               01 (1) 'Modification'\n+5FE70E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE712 CENTRAL HEADER #415   02014B50 (33639248)\n+5FE716 Created Zip Spec      14 (20) '2.0'\n+5FE717 Created OS            00 (0) 'MS-DOS'\n+5FE718 Extract Zip Spec      14 (20) '2.0'\n+5FE719 Extract OS            00 (0) 'MS-DOS'\n+5FE71A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE71C Compression Method    0000 (0) 'Stored'\n+5FE71E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE722 CRC                   C4FC7EA2 (3304881826)\n+5FE726 Compressed Size       000011DC (4572)\n+5FE72A Uncompressed Size     000011DC (4572)\n+5FE72E Filename Length       0071 (113)\n+5FE730 Extra Length          0009 (9)\n+5FE732 Comment Length        0000 (0)\n+5FE734 Disk Start            0000 (0)\n+5FE736 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE738 Ext File Attributes   00000000 (0)\n+5FE73C Local Header Offset   001015EC (1054188)\n+5FE740 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE740: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE7B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE7B3   Length              0005 (5)\n+5FE7B5   Flags               01 (1) 'Modification'\n+5FE7B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE7BA CENTRAL HEADER #416   02014B50 (33639248)\n+5FE7BE Created Zip Spec      14 (20) '2.0'\n+5FE7BF Created OS            00 (0) 'MS-DOS'\n+5FE7C0 Extract Zip Spec      14 (20) '2.0'\n+5FE7C1 Extract OS            00 (0) 'MS-DOS'\n+5FE7C2 General Purpose Flag  0000 (0)\n+5FE7C4 Compression Method    0000 (0) 'Stored'\n+5FE7C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE7CA CRC                   00000000 (0)\n+5FE7CE Compressed Size       00000000 (0)\n+5FE7D2 Uncompressed Size     00000000 (0)\n+5FE7D6 Filename Length       005E (94)\n+5FE7D8 Extra Length          0009 (9)\n+5FE7DA Comment Length        0000 (0)\n+5FE7DC Disk Start            0000 (0)\n+5FE7DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE7E0 Ext File Attributes   00000000 (0)\n+5FE7E4 Local Header Offset   00102870 (1058928)\n+5FE7E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE7E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE846 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE848   Length              0005 (5)\n+5FE84A   Flags               01 (1) 'Modification'\n+5FE84B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE84F CENTRAL HEADER #417   02014B50 (33639248)\n+5FE853 Created Zip Spec      14 (20) '2.0'\n+5FE854 Created OS            00 (0) 'MS-DOS'\n+5FE855 Extract Zip Spec      14 (20) '2.0'\n+5FE856 Extract OS            00 (0) 'MS-DOS'\n+5FE857 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE859 Compression Method    0000 (0) 'Stored'\n+5FE85B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE85F CRC                   EE30A8D8 (3996166360)\n+5FE863 Compressed Size       000072FB (29435)\n+5FE867 Uncompressed Size     000072FB (29435)\n+5FE86B Filename Length       0074 (116)\n+5FE86D Extra Length          0009 (9)\n+5FE86F Comment Length        0000 (0)\n+5FE871 Disk Start            0000 (0)\n+5FE873 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE875 Ext File Attributes   00000000 (0)\n+5FE879 Local Header Offset   001028F5 (1059061)\n+5FE87D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE87D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE8F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE8F3   Length              0005 (5)\n+5FE8F5   Flags               01 (1) 'Modification'\n+5FE8F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE8FA CENTRAL HEADER #418   02014B50 (33639248)\n+5FE8FE Created Zip Spec      14 (20) '2.0'\n+5FE8FF Created OS            00 (0) 'MS-DOS'\n+5FE900 Extract Zip Spec      14 (20) '2.0'\n+5FE901 Extract OS            00 (0) 'MS-DOS'\n+5FE902 General Purpose Flag  0000 (0)\n+5FE904 Compression Method    0000 (0) 'Stored'\n+5FE906 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE90A CRC                   00000000 (0)\n+5FE90E Compressed Size       00000000 (0)\n+5FE912 Uncompressed Size     00000000 (0)\n+5FE916 Filename Length       0063 (99)\n+5FE918 Extra Length          0009 (9)\n+5FE91A Comment Length        0000 (0)\n+5FE91C Disk Start            0000 (0)\n+5FE91E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE920 Ext File Attributes   00000000 (0)\n+5FE924 Local Header Offset   00109C9B (1088667)\n+5FE928 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE928: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FE98B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FE98D   Length              0005 (5)\n+5FE98F   Flags               01 (1) 'Modification'\n+5FE990   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FE994 CENTRAL HEADER #419   02014B50 (33639248)\n+5FE998 Created Zip Spec      14 (20) '2.0'\n+5FE999 Created OS            00 (0) 'MS-DOS'\n+5FE99A Extract Zip Spec      14 (20) '2.0'\n+5FE99B Extract OS            00 (0) 'MS-DOS'\n+5FE99C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FE99E Compression Method    0000 (0) 'Stored'\n+5FE9A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FE9A4 CRC                   CA474DE0 (3393670624)\n+5FE9A8 Compressed Size       000007B6 (1974)\n+5FE9AC Uncompressed Size     000007B6 (1974)\n+5FE9B0 Filename Length       0079 (121)\n+5FE9B2 Extra Length          0009 (9)\n+5FE9B4 Comment Length        0000 (0)\n+5FE9B6 Disk Start            0000 (0)\n+5FE9B8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FE9BA Ext File Attributes   00000000 (0)\n+5FE9BE Local Header Offset   00109D25 (1088805)\n+5FE9C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FE9C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEA3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEA3D   Length              0005 (5)\n+5FEA3F   Flags               01 (1) 'Modification'\n+5FEA40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEA44 CENTRAL HEADER #420   02014B50 (33639248)\n+5FEA48 Created Zip Spec      14 (20) '2.0'\n+5FEA49 Created OS            00 (0) 'MS-DOS'\n+5FEA4A Extract Zip Spec      14 (20) '2.0'\n+5FEA4B Extract OS            00 (0) 'MS-DOS'\n+5FEA4C General Purpose Flag  0000 (0)\n+5FEA4E Compression Method    0000 (0) 'Stored'\n+5FEA50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEA54 CRC                   00000000 (0)\n+5FEA58 Compressed Size       00000000 (0)\n+5FEA5C Uncompressed Size     00000000 (0)\n+5FEA60 Filename Length       005F (95)\n+5FEA62 Extra Length          0009 (9)\n+5FEA64 Comment Length        0000 (0)\n+5FEA66 Disk Start            0000 (0)\n+5FEA68 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEA6A Ext File Attributes   00000000 (0)\n+5FEA6E Local Header Offset   0010A58B (1090955)\n+5FEA72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEA72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEAD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEAD3   Length              0005 (5)\n+5FEAD5   Flags               01 (1) 'Modification'\n+5FEAD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEADA CENTRAL HEADER #421   02014B50 (33639248)\n+5FEADE Created Zip Spec      14 (20) '2.0'\n+5FEADF Created OS            00 (0) 'MS-DOS'\n+5FEAE0 Extract Zip Spec      14 (20) '2.0'\n+5FEAE1 Extract OS            00 (0) 'MS-DOS'\n+5FEAE2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FEAE4 Compression Method    0000 (0) 'Stored'\n+5FEAE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEAEA CRC                   A19F99D4 (2711591380)\n+5FEAEE Compressed Size       000011CB (4555)\n+5FEAF2 Uncompressed Size     000011CB (4555)\n+5FEAF6 Filename Length       0075 (117)\n+5FEAF8 Extra Length          0009 (9)\n+5FEAFA Comment Length        0000 (0)\n+5FEAFC Disk Start            0000 (0)\n+5FEAFE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEB00 Ext File Attributes   00000000 (0)\n+5FEB04 Local Header Offset   0010A611 (1091089)\n+5FEB08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEB08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEB7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEB7F   Length              0005 (5)\n+5FEB81   Flags               01 (1) 'Modification'\n+5FEB82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEB86 CENTRAL HEADER #422   02014B50 (33639248)\n+5FEB8A Created Zip Spec      14 (20) '2.0'\n+5FEB8B Created OS            00 (0) 'MS-DOS'\n+5FEB8C Extract Zip Spec      14 (20) '2.0'\n+5FEB8D Extract OS            00 (0) 'MS-DOS'\n+5FEB8E General Purpose Flag  0000 (0)\n+5FEB90 Compression Method    0000 (0) 'Stored'\n+5FEB92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEB96 CRC                   00000000 (0)\n+5FEB9A Compressed Size       00000000 (0)\n+5FEB9E Uncompressed Size     00000000 (0)\n+5FEBA2 Filename Length       005B (91)\n+5FEBA4 Extra Length          0009 (9)\n+5FEBA6 Comment Length        0000 (0)\n+5FEBA8 Disk Start            0000 (0)\n+5FEBAA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEBAC Ext File Attributes   00000000 (0)\n+5FEBB0 Local Header Offset   0010B888 (1095816)\n+5FEBB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEBB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEC0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEC11   Length              0005 (5)\n+5FEC13   Flags               01 (1) 'Modification'\n+5FEC14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEC18 CENTRAL HEADER #423   02014B50 (33639248)\n+5FEC1C Created Zip Spec      14 (20) '2.0'\n+5FEC1D Created OS            00 (0) 'MS-DOS'\n+5FEC1E Extract Zip Spec      14 (20) '2.0'\n+5FEC1F Extract OS            00 (0) 'MS-DOS'\n+5FEC20 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FEC22 Compression Method    0000 (0) 'Stored'\n+5FEC24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEC28 CRC                   7573E84B (1970530379)\n+5FEC2C Compressed Size       0000284F (10319)\n+5FEC30 Uncompressed Size     0000284F (10319)\n+5FEC34 Filename Length       0071 (113)\n+5FEC36 Extra Length          0009 (9)\n+5FEC38 Comment Length        0000 (0)\n+5FEC3A Disk Start            0000 (0)\n+5FEC3C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEC3E Ext File Attributes   00000000 (0)\n+5FEC42 Local Header Offset   0010B90A (1095946)\n+5FEC46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEC46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FECB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FECB9   Length              0005 (5)\n+5FECBB   Flags               01 (1) 'Modification'\n+5FECBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FECC0 CENTRAL HEADER #424   02014B50 (33639248)\n+5FECC4 Created Zip Spec      14 (20) '2.0'\n+5FECC5 Created OS            00 (0) 'MS-DOS'\n+5FECC6 Extract Zip Spec      14 (20) '2.0'\n+5FECC7 Extract OS            00 (0) 'MS-DOS'\n+5FECC8 General Purpose Flag  0000 (0)\n+5FECCA Compression Method    0000 (0) 'Stored'\n+5FECCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FECD0 CRC                   00000000 (0)\n+5FECD4 Compressed Size       00000000 (0)\n+5FECD8 Uncompressed Size     00000000 (0)\n+5FECDC Filename Length       005F (95)\n+5FECDE Extra Length          0009 (9)\n+5FECE0 Comment Length        0000 (0)\n+5FECE2 Disk Start            0000 (0)\n+5FECE4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FECE6 Ext File Attributes   00000000 (0)\n+5FECEA Local Header Offset   0010E201 (1106433)\n+5FECEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FECEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FED4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FED4F   Length              0005 (5)\n+5FED51   Flags               01 (1) 'Modification'\n+5FED52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FED56 CENTRAL HEADER #425   02014B50 (33639248)\n+5FED5A Created Zip Spec      14 (20) '2.0'\n+5FED5B Created OS            00 (0) 'MS-DOS'\n+5FED5C Extract Zip Spec      14 (20) '2.0'\n+5FED5D Extract OS            00 (0) 'MS-DOS'\n+5FED5E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FED60 Compression Method    0000 (0) 'Stored'\n+5FED62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FED66 CRC                   131CB9D8 (320649688)\n+5FED6A Compressed Size       00002777 (10103)\n+5FED6E Uncompressed Size     00002777 (10103)\n+5FED72 Filename Length       0075 (117)\n+5FED74 Extra Length          0009 (9)\n+5FED76 Comment Length        0000 (0)\n+5FED78 Disk Start            0000 (0)\n+5FED7A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FED7C Ext File Attributes   00000000 (0)\n+5FED80 Local Header Offset   0010E287 (1106567)\n+5FED84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FED84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEDF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEDFB   Length              0005 (5)\n+5FEDFD   Flags               01 (1) 'Modification'\n+5FEDFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEE02 CENTRAL HEADER #426   02014B50 (33639248)\n+5FEE06 Created Zip Spec      14 (20) '2.0'\n+5FEE07 Created OS            00 (0) 'MS-DOS'\n+5FEE08 Extract Zip Spec      14 (20) '2.0'\n+5FEE09 Extract OS            00 (0) 'MS-DOS'\n+5FEE0A General Purpose Flag  0000 (0)\n+5FEE0C Compression Method    0000 (0) 'Stored'\n+5FEE0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEE12 CRC                   00000000 (0)\n+5FEE16 Compressed Size       00000000 (0)\n+5FEE1A Uncompressed Size     00000000 (0)\n+5FEE1E Filename Length       005E (94)\n+5FEE20 Extra Length          0009 (9)\n+5FEE22 Comment Length        0000 (0)\n+5FEE24 Disk Start            0000 (0)\n+5FEE26 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEE28 Ext File Attributes   00000000 (0)\n+5FEE2C Local Header Offset   00110AAA (1116842)\n+5FEE30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEE30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEE8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEE90   Length              0005 (5)\n+5FEE92   Flags               01 (1) 'Modification'\n+5FEE93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEE97 CENTRAL HEADER #427   02014B50 (33639248)\n+5FEE9B Created Zip Spec      14 (20) '2.0'\n+5FEE9C Created OS            00 (0) 'MS-DOS'\n+5FEE9D Extract Zip Spec      14 (20) '2.0'\n+5FEE9E Extract OS            00 (0) 'MS-DOS'\n+5FEE9F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FEEA1 Compression Method    0000 (0) 'Stored'\n+5FEEA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEEA7 CRC                   95FAB1DA (2516234714)\n+5FEEAB Compressed Size       0000110D (4365)\n+5FEEAF Uncompressed Size     0000110D (4365)\n+5FEEB3 Filename Length       0074 (116)\n+5FEEB5 Extra Length          0009 (9)\n+5FEEB7 Comment Length        0000 (0)\n+5FEEB9 Disk Start            0000 (0)\n+5FEEBB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEEBD Ext File Attributes   00000000 (0)\n+5FEEC1 Local Header Offset   00110B2F (1116975)\n+5FEEC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEEC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEF39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEF3B   Length              0005 (5)\n+5FEF3D   Flags               01 (1) 'Modification'\n+5FEF3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEF42 CENTRAL HEADER #428   02014B50 (33639248)\n+5FEF46 Created Zip Spec      14 (20) '2.0'\n+5FEF47 Created OS            00 (0) 'MS-DOS'\n+5FEF48 Extract Zip Spec      14 (20) '2.0'\n+5FEF49 Extract OS            00 (0) 'MS-DOS'\n+5FEF4A General Purpose Flag  0000 (0)\n+5FEF4C Compression Method    0000 (0) 'Stored'\n+5FEF4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEF52 CRC                   00000000 (0)\n+5FEF56 Compressed Size       00000000 (0)\n+5FEF5A Uncompressed Size     00000000 (0)\n+5FEF5E Filename Length       0061 (97)\n+5FEF60 Extra Length          0009 (9)\n+5FEF62 Comment Length        0000 (0)\n+5FEF64 Disk Start            0000 (0)\n+5FEF66 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FEF68 Ext File Attributes   00000000 (0)\n+5FEF6C Local Header Offset   00111CE7 (1121511)\n+5FEF70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEF70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FEFD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FEFD3   Length              0005 (5)\n+5FEFD5   Flags               01 (1) 'Modification'\n+5FEFD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FEFDA CENTRAL HEADER #429   02014B50 (33639248)\n+5FEFDE Created Zip Spec      14 (20) '2.0'\n+5FEFDF Created OS            00 (0) 'MS-DOS'\n+5FEFE0 Extract Zip Spec      14 (20) '2.0'\n+5FEFE1 Extract OS            00 (0) 'MS-DOS'\n+5FEFE2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FEFE4 Compression Method    0000 (0) 'Stored'\n+5FEFE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FEFEA CRC                   B1E82858 (2984781912)\n+5FEFEE Compressed Size       000019D6 (6614)\n+5FEFF2 Uncompressed Size     000019D6 (6614)\n+5FEFF6 Filename Length       0077 (119)\n+5FEFF8 Extra Length          0009 (9)\n+5FEFFA Comment Length        0000 (0)\n+5FEFFC Disk Start            0000 (0)\n+5FEFFE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF000 Ext File Attributes   00000000 (0)\n+5FF004 Local Header Offset   00111D6F (1121647)\n+5FF008 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF008: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF07F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF081   Length              0005 (5)\n+5FF083   Flags               01 (1) 'Modification'\n+5FF084   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF088 CENTRAL HEADER #430   02014B50 (33639248)\n+5FF08C Created Zip Spec      14 (20) '2.0'\n+5FF08D Created OS            00 (0) 'MS-DOS'\n+5FF08E Extract Zip Spec      14 (20) '2.0'\n+5FF08F Extract OS            00 (0) 'MS-DOS'\n+5FF090 General Purpose Flag  0000 (0)\n+5FF092 Compression Method    0000 (0) 'Stored'\n+5FF094 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF098 CRC                   00000000 (0)\n+5FF09C Compressed Size       00000000 (0)\n+5FF0A0 Uncompressed Size     00000000 (0)\n+5FF0A4 Filename Length       005E (94)\n+5FF0A6 Extra Length          0009 (9)\n+5FF0A8 Comment Length        0000 (0)\n+5FF0AA Disk Start            0000 (0)\n+5FF0AC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF0AE Ext File Attributes   00000000 (0)\n+5FF0B2 Local Header Offset   001137F3 (1128435)\n+5FF0B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF0B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF114 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF116   Length              0005 (5)\n+5FF118   Flags               01 (1) 'Modification'\n+5FF119   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF11D CENTRAL HEADER #431   02014B50 (33639248)\n+5FF121 Created Zip Spec      14 (20) '2.0'\n+5FF122 Created OS            00 (0) 'MS-DOS'\n+5FF123 Extract Zip Spec      14 (20) '2.0'\n+5FF124 Extract OS            00 (0) 'MS-DOS'\n+5FF125 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FF127 Compression Method    0000 (0) 'Stored'\n+5FF129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF12D CRC                   EA13965E (3927152222)\n+5FF131 Compressed Size       00000F7E (3966)\n+5FF135 Uncompressed Size     00000F7E (3966)\n+5FF139 Filename Length       0074 (116)\n+5FF13B Extra Length          0009 (9)\n+5FF13D Comment Length        0000 (0)\n+5FF13F Disk Start            0000 (0)\n+5FF141 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF143 Ext File Attributes   00000000 (0)\n+5FF147 Local Header Offset   00113878 (1128568)\n+5FF14B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF14B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF1BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF1C1   Length              0005 (5)\n+5FF1C3   Flags               01 (1) 'Modification'\n+5FF1C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF1C8 CENTRAL HEADER #432   02014B50 (33639248)\n+5FF1CC Created Zip Spec      14 (20) '2.0'\n+5FF1CD Created OS            00 (0) 'MS-DOS'\n+5FF1CE Extract Zip Spec      14 (20) '2.0'\n+5FF1CF Extract OS            00 (0) 'MS-DOS'\n+5FF1D0 General Purpose Flag  0000 (0)\n+5FF1D2 Compression Method    0000 (0) 'Stored'\n+5FF1D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF1D8 CRC                   00000000 (0)\n+5FF1DC Compressed Size       00000000 (0)\n+5FF1E0 Uncompressed Size     00000000 (0)\n+5FF1E4 Filename Length       0057 (87)\n+5FF1E6 Extra Length          0009 (9)\n+5FF1E8 Comment Length        0000 (0)\n+5FF1EA Disk Start            0000 (0)\n+5FF1EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF1EE Ext File Attributes   00000000 (0)\n+5FF1F2 Local Header Offset   001148A1 (1132705)\n+5FF1F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF1F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF24D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF24F   Length              0005 (5)\n+5FF251   Flags               01 (1) 'Modification'\n+5FF252   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF256 CENTRAL HEADER #433   02014B50 (33639248)\n+5FF25A Created Zip Spec      14 (20) '2.0'\n+5FF25B Created OS            00 (0) 'MS-DOS'\n+5FF25C Extract Zip Spec      14 (20) '2.0'\n+5FF25D Extract OS            00 (0) 'MS-DOS'\n+5FF25E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FF260 Compression Method    0000 (0) 'Stored'\n+5FF262 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF266 CRC                   C8903588 (3364894088)\n+5FF26A Compressed Size       00002CD6 (11478)\n+5FF26E Uncompressed Size     00002CD6 (11478)\n+5FF272 Filename Length       006D (109)\n+5FF274 Extra Length          0009 (9)\n+5FF276 Comment Length        0000 (0)\n+5FF278 Disk Start            0000 (0)\n+5FF27A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF27C Ext File Attributes   00000000 (0)\n+5FF280 Local Header Offset   0011491F (1132831)\n+5FF284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF2F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF2F3   Length              0005 (5)\n+5FF2F5   Flags               01 (1) 'Modification'\n+5FF2F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF2FA CENTRAL HEADER #434   02014B50 (33639248)\n+5FF2FE Created Zip Spec      14 (20) '2.0'\n+5FF2FF Created OS            00 (0) 'MS-DOS'\n+5FF300 Extract Zip Spec      14 (20) '2.0'\n+5FF301 Extract OS            00 (0) 'MS-DOS'\n+5FF302 General Purpose Flag  0000 (0)\n+5FF304 Compression Method    0000 (0) 'Stored'\n+5FF306 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF30A CRC                   00000000 (0)\n+5FF30E Compressed Size       00000000 (0)\n+5FF312 Uncompressed Size     00000000 (0)\n+5FF316 Filename Length       0068 (104)\n+5FF318 Extra Length          0009 (9)\n+5FF31A Comment Length        0000 (0)\n+5FF31C Disk Start            0000 (0)\n+5FF31E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF320 Ext File Attributes   00000000 (0)\n+5FF324 Local Header Offset   00117699 (1144473)\n+5FF328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF392   Length              0005 (5)\n+5FF394   Flags               01 (1) 'Modification'\n+5FF395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF399 CENTRAL HEADER #435   02014B50 (33639248)\n+5FF39D Created Zip Spec      14 (20) '2.0'\n+5FF39E Created OS            00 (0) 'MS-DOS'\n+5FF39F Extract Zip Spec      14 (20) '2.0'\n+5FF3A0 Extract OS            00 (0) 'MS-DOS'\n+5FF3A1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FF3A3 Compression Method    0000 (0) 'Stored'\n+5FF3A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF3A9 CRC                   D19560D0 (3516227792)\n+5FF3AD Compressed Size       00000A2F (2607)\n+5FF3B1 Uncompressed Size     00000A2F (2607)\n+5FF3B5 Filename Length       007E (126)\n+5FF3B7 Extra Length          0009 (9)\n+5FF3B9 Comment Length        0000 (0)\n+5FF3BB Disk Start            0000 (0)\n+5FF3BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF3BF Ext File Attributes   00000000 (0)\n+5FF3C3 Local Header Offset   00117728 (1144616)\n+5FF3C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF3C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF445 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF447   Length              0005 (5)\n+5FF449   Flags               01 (1) 'Modification'\n+5FF44A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF44E CENTRAL HEADER #436   02014B50 (33639248)\n+5FF452 Created Zip Spec      14 (20) '2.0'\n+5FF453 Created OS            00 (0) 'MS-DOS'\n+5FF454 Extract Zip Spec      14 (20) '2.0'\n+5FF455 Extract OS            00 (0) 'MS-DOS'\n+5FF456 General Purpose Flag  0000 (0)\n+5FF458 Compression Method    0000 (0) 'Stored'\n+5FF45A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF45E CRC                   00000000 (0)\n+5FF462 Compressed Size       00000000 (0)\n+5FF466 Uncompressed Size     00000000 (0)\n+5FF46A Filename Length       0032 (50)\n+5FF46C Extra Length          0009 (9)\n+5FF46E Comment Length        0000 (0)\n+5FF470 Disk Start            0000 (0)\n+5FF472 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF474 Ext File Attributes   00000000 (0)\n+5FF478 Local Header Offset   0011820C (1147404)\n+5FF47C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF47C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF4AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF4B0   Length              0005 (5)\n+5FF4B2   Flags               01 (1) 'Modification'\n+5FF4B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF4B7 CENTRAL HEADER #437   02014B50 (33639248)\n+5FF4BB Created Zip Spec      14 (20) '2.0'\n+5FF4BC Created OS            00 (0) 'MS-DOS'\n+5FF4BD Extract Zip Spec      14 (20) '2.0'\n+5FF4BE Extract OS            00 (0) 'MS-DOS'\n+5FF4BF General Purpose Flag  0000 (0)\n+5FF4C1 Compression Method    0000 (0) 'Stored'\n+5FF4C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF4C7 CRC                   00000000 (0)\n+5FF4CB Compressed Size       00000000 (0)\n+5FF4CF Uncompressed Size     00000000 (0)\n+5FF4D3 Filename Length       0039 (57)\n+5FF4D5 Extra Length          0009 (9)\n+5FF4D7 Comment Length        0000 (0)\n+5FF4D9 Disk Start            0000 (0)\n+5FF4DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF4DD Ext File Attributes   00000000 (0)\n+5FF4E1 Local Header Offset   00118265 (1147493)\n+5FF4E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF4E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF51E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF520   Length              0005 (5)\n+5FF522   Flags               01 (1) 'Modification'\n+5FF523   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF527 CENTRAL HEADER #438   02014B50 (33639248)\n+5FF52B Created Zip Spec      14 (20) '2.0'\n+5FF52C Created OS            00 (0) 'MS-DOS'\n+5FF52D Extract Zip Spec      14 (20) '2.0'\n+5FF52E Extract OS            00 (0) 'MS-DOS'\n+5FF52F General Purpose Flag  0000 (0)\n+5FF531 Compression Method    0000 (0) 'Stored'\n+5FF533 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF537 CRC                   00000000 (0)\n+5FF53B Compressed Size       00000000 (0)\n+5FF53F Uncompressed Size     00000000 (0)\n+5FF543 Filename Length       006F (111)\n+5FF545 Extra Length          0009 (9)\n+5FF547 Comment Length        0000 (0)\n+5FF549 Disk Start            0000 (0)\n+5FF54B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF54D Ext File Attributes   00000000 (0)\n+5FF551 Local Header Offset   001182C5 (1147589)\n+5FF555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF5C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF5C6   Length              0005 (5)\n+5FF5C8   Flags               01 (1) 'Modification'\n+5FF5C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF5CD CENTRAL HEADER #439   02014B50 (33639248)\n+5FF5D1 Created Zip Spec      14 (20) '2.0'\n+5FF5D2 Created OS            00 (0) 'MS-DOS'\n+5FF5D3 Extract Zip Spec      14 (20) '2.0'\n+5FF5D4 Extract OS            00 (0) 'MS-DOS'\n+5FF5D5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FF5D7 Compression Method    0000 (0) 'Stored'\n+5FF5D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF5DD CRC                   A1414F13 (2705411859)\n+5FF5E1 Compressed Size       0000521D (21021)\n+5FF5E5 Uncompressed Size     0000521D (21021)\n+5FF5E9 Filename Length       0085 (133)\n+5FF5EB Extra Length          0009 (9)\n+5FF5ED Comment Length        0000 (0)\n+5FF5EF Disk Start            0000 (0)\n+5FF5F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF5F3 Ext File Attributes   00000000 (0)\n+5FF5F7 Local Header Offset   0011835B (1147739)\n+5FF5FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              X'\n #\n-# WARNING: Offset 0x5FC35D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FF5FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5FC3E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC3E4   Length              0005 (5)\n-5FC3E6   Flags               01 (1) 'Modification'\n-5FC3E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC3EB CENTRAL HEADER #440   02014B50 (33639248)\n-5FC3EF Created Zip Spec      14 (20) '2.0'\n-5FC3F0 Created OS            00 (0) 'MS-DOS'\n-5FC3F1 Extract Zip Spec      14 (20) '2.0'\n-5FC3F2 Extract OS            00 (0) 'MS-DOS'\n-5FC3F3 General Purpose Flag  0000 (0)\n-5FC3F5 Compression Method    0000 (0) 'Stored'\n-5FC3F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC3FB CRC                   00000000 (0)\n-5FC3FF Compressed Size       00000000 (0)\n-5FC403 Uncompressed Size     00000000 (0)\n-5FC407 Filename Length       002F (47)\n-5FC409 Extra Length          0009 (9)\n-5FC40B Comment Length        0000 (0)\n-5FC40D Disk Start            0000 (0)\n-5FC40F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC411 Ext File Attributes   00000000 (0)\n-5FC415 Local Header Offset   0011A449 (1156169)\n-5FC419 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC419: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC448 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC44A   Length              0005 (5)\n-5FC44C   Flags               01 (1) 'Modification'\n-5FC44D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC451 CENTRAL HEADER #441   02014B50 (33639248)\n-5FC455 Created Zip Spec      14 (20) '2.0'\n-5FC456 Created OS            00 (0) 'MS-DOS'\n-5FC457 Extract Zip Spec      14 (20) '2.0'\n-5FC458 Extract OS            00 (0) 'MS-DOS'\n-5FC459 General Purpose Flag  0000 (0)\n-5FC45B Compression Method    0000 (0) 'Stored'\n-5FC45D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC461 CRC                   00000000 (0)\n-5FC465 Compressed Size       00000000 (0)\n-5FC469 Uncompressed Size     00000000 (0)\n-5FC46D Filename Length       0036 (54)\n-5FC46F Extra Length          0009 (9)\n-5FC471 Comment Length        0000 (0)\n-5FC473 Disk Start            0000 (0)\n-5FC475 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC477 Ext File Attributes   00000000 (0)\n-5FC47B Local Header Offset   0011A49F (1156255)\n-5FC47F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC47F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC4B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC4B7   Length              0005 (5)\n-5FC4B9   Flags               01 (1) 'Modification'\n-5FC4BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC4BE CENTRAL HEADER #442   02014B50 (33639248)\n-5FC4C2 Created Zip Spec      14 (20) '2.0'\n-5FC4C3 Created OS            00 (0) 'MS-DOS'\n-5FC4C4 Extract Zip Spec      14 (20) '2.0'\n-5FC4C5 Extract OS            00 (0) 'MS-DOS'\n-5FC4C6 General Purpose Flag  0000 (0)\n-5FC4C8 Compression Method    0000 (0) 'Stored'\n-5FC4CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC4CE CRC                   00000000 (0)\n-5FC4D2 Compressed Size       00000000 (0)\n-5FC4D6 Uncompressed Size     00000000 (0)\n-5FC4DA Filename Length       006C (108)\n-5FC4DC Extra Length          0009 (9)\n-5FC4DE Comment Length        0000 (0)\n-5FC4E0 Disk Start            0000 (0)\n-5FC4E2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC4E4 Ext File Attributes   00000000 (0)\n-5FC4E8 Local Header Offset   0011A4FC (1156348)\n-5FC4EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC4EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC558 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC55A   Length              0005 (5)\n-5FC55C   Flags               01 (1) 'Modification'\n-5FC55D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC561 CENTRAL HEADER #443   02014B50 (33639248)\n-5FC565 Created Zip Spec      14 (20) '2.0'\n-5FC566 Created OS            00 (0) 'MS-DOS'\n-5FC567 Extract Zip Spec      14 (20) '2.0'\n-5FC568 Extract OS            00 (0) 'MS-DOS'\n-5FC569 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FC56B Compression Method    0000 (0) 'Stored'\n-5FC56D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC571 CRC                   CB05D09B (3406155931)\n-5FC575 Compressed Size       00005230 (21040)\n-5FC579 Uncompressed Size     00005230 (21040)\n-5FC57D Filename Length       0082 (130)\n-5FC57F Extra Length          0009 (9)\n-5FC581 Comment Length        0000 (0)\n-5FC583 Disk Start            0000 (0)\n-5FC585 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC587 Ext File Attributes   00000000 (0)\n-5FC58B Local Header Offset   0011A58F (1156495)\n-5FC58F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC58F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC611 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC613   Length              0005 (5)\n-5FC615   Flags               01 (1) 'Modification'\n-5FC616   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC61A CENTRAL HEADER #444   02014B50 (33639248)\n-5FC61E Created Zip Spec      14 (20) '2.0'\n-5FC61F Created OS            00 (0) 'MS-DOS'\n-5FC620 Extract Zip Spec      14 (20) '2.0'\n-5FC621 Extract OS            00 (0) 'MS-DOS'\n-5FC622 General Purpose Flag  0000 (0)\n-5FC624 Compression Method    0000 (0) 'Stored'\n-5FC626 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC62A CRC                   00000000 (0)\n-5FC62E Compressed Size       00000000 (0)\n-5FC632 Uncompressed Size     00000000 (0)\n-5FC636 Filename Length       0033 (51)\n-5FC638 Extra Length          0009 (9)\n-5FC63A Comment Length        0000 (0)\n-5FC63C Disk Start            0000 (0)\n-5FC63E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC640 Ext File Attributes   00000000 (0)\n-5FC644 Local Header Offset   0011F878 (1177720)\n-5FC648 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC648: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC67B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC67D   Length              0005 (5)\n-5FC67F   Flags               01 (1) 'Modification'\n-5FC680   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC684 CENTRAL HEADER #445   02014B50 (33639248)\n-5FC688 Created Zip Spec      14 (20) '2.0'\n-5FC689 Created OS            00 (0) 'MS-DOS'\n-5FC68A Extract Zip Spec      14 (20) '2.0'\n-5FC68B Extract OS            00 (0) 'MS-DOS'\n-5FC68C General Purpose Flag  0000 (0)\n-5FC68E Compression Method    0000 (0) 'Stored'\n-5FC690 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC694 CRC                   00000000 (0)\n-5FC698 Compressed Size       00000000 (0)\n-5FC69C Uncompressed Size     00000000 (0)\n-5FC6A0 Filename Length       003A (58)\n-5FC6A2 Extra Length          0009 (9)\n-5FC6A4 Comment Length        0000 (0)\n-5FC6A6 Disk Start            0000 (0)\n-5FC6A8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC6AA Ext File Attributes   00000000 (0)\n-5FC6AE Local Header Offset   0011F8D2 (1177810)\n-5FC6B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC6B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC6EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC6EE   Length              0005 (5)\n-5FC6F0   Flags               01 (1) 'Modification'\n-5FC6F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC6F5 CENTRAL HEADER #446   02014B50 (33639248)\n-5FC6F9 Created Zip Spec      14 (20) '2.0'\n-5FC6FA Created OS            00 (0) 'MS-DOS'\n-5FC6FB Extract Zip Spec      14 (20) '2.0'\n-5FC6FC Extract OS            00 (0) 'MS-DOS'\n-5FC6FD General Purpose Flag  0000 (0)\n-5FC6FF Compression Method    0000 (0) 'Stored'\n-5FC701 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC705 CRC                   00000000 (0)\n-5FC709 Compressed Size       00000000 (0)\n-5FC70D Uncompressed Size     00000000 (0)\n-5FC711 Filename Length       0070 (112)\n-5FC713 Extra Length          0009 (9)\n-5FC715 Comment Length        0000 (0)\n-5FC717 Disk Start            0000 (0)\n-5FC719 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC71B Ext File Attributes   00000000 (0)\n-5FC71F Local Header Offset   0011F933 (1177907)\n-5FC723 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC723: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC793 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC795   Length              0005 (5)\n-5FC797   Flags               01 (1) 'Modification'\n-5FC798   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC79C CENTRAL HEADER #447   02014B50 (33639248)\n-5FC7A0 Created Zip Spec      14 (20) '2.0'\n-5FC7A1 Created OS            00 (0) 'MS-DOS'\n-5FC7A2 Extract Zip Spec      14 (20) '2.0'\n-5FC7A3 Extract OS            00 (0) 'MS-DOS'\n-5FC7A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FC7A6 Compression Method    0000 (0) 'Stored'\n-5FC7A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC7AC CRC                   17E2323C (400699964)\n-5FC7B0 Compressed Size       00000904 (2308)\n-5FC7B4 Uncompressed Size     00000904 (2308)\n-5FC7B8 Filename Length       0086 (134)\n-5FC7BA Extra Length          0009 (9)\n-5FC7BC Comment Length        0000 (0)\n-5FC7BE Disk Start            0000 (0)\n-5FC7C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC7C2 Ext File Attributes   00000000 (0)\n-5FC7C6 Local Header Offset   0011F9CA (1178058)\n-5FC7CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5FF680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF682   Length              0005 (5)\n+5FF684   Flags               01 (1) 'Modification'\n+5FF685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF689 CENTRAL HEADER #440   02014B50 (33639248)\n+5FF68D Created Zip Spec      14 (20) '2.0'\n+5FF68E Created OS            00 (0) 'MS-DOS'\n+5FF68F Extract Zip Spec      14 (20) '2.0'\n+5FF690 Extract OS            00 (0) 'MS-DOS'\n+5FF691 General Purpose Flag  0000 (0)\n+5FF693 Compression Method    0000 (0) 'Stored'\n+5FF695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF699 CRC                   00000000 (0)\n+5FF69D Compressed Size       00000000 (0)\n+5FF6A1 Uncompressed Size     00000000 (0)\n+5FF6A5 Filename Length       002F (47)\n+5FF6A7 Extra Length          0009 (9)\n+5FF6A9 Comment Length        0000 (0)\n+5FF6AB Disk Start            0000 (0)\n+5FF6AD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF6AF Ext File Attributes   00000000 (0)\n+5FF6B3 Local Header Offset   0011D634 (1168948)\n+5FF6B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF6B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF6E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF6E8   Length              0005 (5)\n+5FF6EA   Flags               01 (1) 'Modification'\n+5FF6EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF6EF CENTRAL HEADER #441   02014B50 (33639248)\n+5FF6F3 Created Zip Spec      14 (20) '2.0'\n+5FF6F4 Created OS            00 (0) 'MS-DOS'\n+5FF6F5 Extract Zip Spec      14 (20) '2.0'\n+5FF6F6 Extract OS            00 (0) 'MS-DOS'\n+5FF6F7 General Purpose Flag  0000 (0)\n+5FF6F9 Compression Method    0000 (0) 'Stored'\n+5FF6FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF6FF CRC                   00000000 (0)\n+5FF703 Compressed Size       00000000 (0)\n+5FF707 Uncompressed Size     00000000 (0)\n+5FF70B Filename Length       0036 (54)\n+5FF70D Extra Length          0009 (9)\n+5FF70F Comment Length        0000 (0)\n+5FF711 Disk Start            0000 (0)\n+5FF713 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF715 Ext File Attributes   00000000 (0)\n+5FF719 Local Header Offset   0011D68A (1169034)\n+5FF71D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF71D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF753 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF755   Length              0005 (5)\n+5FF757   Flags               01 (1) 'Modification'\n+5FF758   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF75C CENTRAL HEADER #442   02014B50 (33639248)\n+5FF760 Created Zip Spec      14 (20) '2.0'\n+5FF761 Created OS            00 (0) 'MS-DOS'\n+5FF762 Extract Zip Spec      14 (20) '2.0'\n+5FF763 Extract OS            00 (0) 'MS-DOS'\n+5FF764 General Purpose Flag  0000 (0)\n+5FF766 Compression Method    0000 (0) 'Stored'\n+5FF768 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF76C CRC                   00000000 (0)\n+5FF770 Compressed Size       00000000 (0)\n+5FF774 Uncompressed Size     00000000 (0)\n+5FF778 Filename Length       006C (108)\n+5FF77A Extra Length          0009 (9)\n+5FF77C Comment Length        0000 (0)\n+5FF77E Disk Start            0000 (0)\n+5FF780 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF782 Ext File Attributes   00000000 (0)\n+5FF786 Local Header Offset   0011D6E7 (1169127)\n+5FF78A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF78A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF7F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF7F8   Length              0005 (5)\n+5FF7FA   Flags               01 (1) 'Modification'\n+5FF7FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF7FF CENTRAL HEADER #443   02014B50 (33639248)\n+5FF803 Created Zip Spec      14 (20) '2.0'\n+5FF804 Created OS            00 (0) 'MS-DOS'\n+5FF805 Extract Zip Spec      14 (20) '2.0'\n+5FF806 Extract OS            00 (0) 'MS-DOS'\n+5FF807 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FF809 Compression Method    0000 (0) 'Stored'\n+5FF80B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF80F CRC                   CB05D09B (3406155931)\n+5FF813 Compressed Size       00005230 (21040)\n+5FF817 Uncompressed Size     00005230 (21040)\n+5FF81B Filename Length       0082 (130)\n+5FF81D Extra Length          0009 (9)\n+5FF81F Comment Length        0000 (0)\n+5FF821 Disk Start            0000 (0)\n+5FF823 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF825 Ext File Attributes   00000000 (0)\n+5FF829 Local Header Offset   0011D77A (1169274)\n+5FF82D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF82D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF8AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF8B1   Length              0005 (5)\n+5FF8B3   Flags               01 (1) 'Modification'\n+5FF8B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF8B8 CENTRAL HEADER #444   02014B50 (33639248)\n+5FF8BC Created Zip Spec      14 (20) '2.0'\n+5FF8BD Created OS            00 (0) 'MS-DOS'\n+5FF8BE Extract Zip Spec      14 (20) '2.0'\n+5FF8BF Extract OS            00 (0) 'MS-DOS'\n+5FF8C0 General Purpose Flag  0000 (0)\n+5FF8C2 Compression Method    0000 (0) 'Stored'\n+5FF8C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF8C8 CRC                   00000000 (0)\n+5FF8CC Compressed Size       00000000 (0)\n+5FF8D0 Uncompressed Size     00000000 (0)\n+5FF8D4 Filename Length       0033 (51)\n+5FF8D6 Extra Length          0009 (9)\n+5FF8D8 Comment Length        0000 (0)\n+5FF8DA Disk Start            0000 (0)\n+5FF8DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF8DE Ext File Attributes   00000000 (0)\n+5FF8E2 Local Header Offset   00122A63 (1190499)\n+5FF8E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF8E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF919 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF91B   Length              0005 (5)\n+5FF91D   Flags               01 (1) 'Modification'\n+5FF91E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF922 CENTRAL HEADER #445   02014B50 (33639248)\n+5FF926 Created Zip Spec      14 (20) '2.0'\n+5FF927 Created OS            00 (0) 'MS-DOS'\n+5FF928 Extract Zip Spec      14 (20) '2.0'\n+5FF929 Extract OS            00 (0) 'MS-DOS'\n+5FF92A General Purpose Flag  0000 (0)\n+5FF92C Compression Method    0000 (0) 'Stored'\n+5FF92E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF932 CRC                   00000000 (0)\n+5FF936 Compressed Size       00000000 (0)\n+5FF93A Uncompressed Size     00000000 (0)\n+5FF93E Filename Length       003A (58)\n+5FF940 Extra Length          0009 (9)\n+5FF942 Comment Length        0000 (0)\n+5FF944 Disk Start            0000 (0)\n+5FF946 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF948 Ext File Attributes   00000000 (0)\n+5FF94C Local Header Offset   00122ABD (1190589)\n+5FF950 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF950: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FF98A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FF98C   Length              0005 (5)\n+5FF98E   Flags               01 (1) 'Modification'\n+5FF98F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FF993 CENTRAL HEADER #446   02014B50 (33639248)\n+5FF997 Created Zip Spec      14 (20) '2.0'\n+5FF998 Created OS            00 (0) 'MS-DOS'\n+5FF999 Extract Zip Spec      14 (20) '2.0'\n+5FF99A Extract OS            00 (0) 'MS-DOS'\n+5FF99B General Purpose Flag  0000 (0)\n+5FF99D Compression Method    0000 (0) 'Stored'\n+5FF99F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FF9A3 CRC                   00000000 (0)\n+5FF9A7 Compressed Size       00000000 (0)\n+5FF9AB Uncompressed Size     00000000 (0)\n+5FF9AF Filename Length       0070 (112)\n+5FF9B1 Extra Length          0009 (9)\n+5FF9B3 Comment Length        0000 (0)\n+5FF9B5 Disk Start            0000 (0)\n+5FF9B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FF9B9 Ext File Attributes   00000000 (0)\n+5FF9BD Local Header Offset   00122B1E (1190686)\n+5FF9C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF9C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFA31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFA33   Length              0005 (5)\n+5FFA35   Flags               01 (1) 'Modification'\n+5FFA36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFA3A CENTRAL HEADER #447   02014B50 (33639248)\n+5FFA3E Created Zip Spec      14 (20) '2.0'\n+5FFA3F Created OS            00 (0) 'MS-DOS'\n+5FFA40 Extract Zip Spec      14 (20) '2.0'\n+5FFA41 Extract OS            00 (0) 'MS-DOS'\n+5FFA42 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FFA44 Compression Method    0000 (0) 'Stored'\n+5FFA46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFA4A CRC                   17E2323C (400699964)\n+5FFA4E Compressed Size       00000904 (2308)\n+5FFA52 Uncompressed Size     00000904 (2308)\n+5FFA56 Filename Length       0086 (134)\n+5FFA58 Extra Length          0009 (9)\n+5FFA5A Comment Length        0000 (0)\n+5FFA5C Disk Start            0000 (0)\n+5FFA5E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFA60 Ext File Attributes   00000000 (0)\n+5FFA64 Local Header Offset   00122BB5 (1190837)\n+5FFA68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x5FC7CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FFA68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5FC850 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC852   Length              0005 (5)\n-5FC854   Flags               01 (1) 'Modification'\n-5FC855   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC859 CENTRAL HEADER #448   02014B50 (33639248)\n-5FC85D Created Zip Spec      14 (20) '2.0'\n-5FC85E Created OS            00 (0) 'MS-DOS'\n-5FC85F Extract Zip Spec      14 (20) '2.0'\n-5FC860 Extract OS            00 (0) 'MS-DOS'\n-5FC861 General Purpose Flag  0000 (0)\n-5FC863 Compression Method    0000 (0) 'Stored'\n-5FC865 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC869 CRC                   00000000 (0)\n-5FC86D Compressed Size       00000000 (0)\n-5FC871 Uncompressed Size     00000000 (0)\n-5FC875 Filename Length       0030 (48)\n-5FC877 Extra Length          0009 (9)\n-5FC879 Comment Length        0000 (0)\n-5FC87B Disk Start            0000 (0)\n-5FC87D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC87F Ext File Attributes   00000000 (0)\n-5FC883 Local Header Offset   0012038B (1180555)\n-5FC887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC8B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC8B9   Length              0005 (5)\n-5FC8BB   Flags               01 (1) 'Modification'\n-5FC8BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC8C0 CENTRAL HEADER #449   02014B50 (33639248)\n-5FC8C4 Created Zip Spec      14 (20) '2.0'\n-5FC8C5 Created OS            00 (0) 'MS-DOS'\n-5FC8C6 Extract Zip Spec      14 (20) '2.0'\n-5FC8C7 Extract OS            00 (0) 'MS-DOS'\n-5FC8C8 General Purpose Flag  0000 (0)\n-5FC8CA Compression Method    0000 (0) 'Stored'\n-5FC8CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC8D0 CRC                   00000000 (0)\n-5FC8D4 Compressed Size       00000000 (0)\n-5FC8D8 Uncompressed Size     00000000 (0)\n-5FC8DC Filename Length       0037 (55)\n-5FC8DE Extra Length          0009 (9)\n-5FC8E0 Comment Length        0000 (0)\n-5FC8E2 Disk Start            0000 (0)\n-5FC8E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC8E6 Ext File Attributes   00000000 (0)\n-5FC8EA Local Header Offset   001203E2 (1180642)\n-5FC8EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC8EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC925 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC927   Length              0005 (5)\n-5FC929   Flags               01 (1) 'Modification'\n-5FC92A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC92E CENTRAL HEADER #450   02014B50 (33639248)\n-5FC932 Created Zip Spec      14 (20) '2.0'\n-5FC933 Created OS            00 (0) 'MS-DOS'\n-5FC934 Extract Zip Spec      14 (20) '2.0'\n-5FC935 Extract OS            00 (0) 'MS-DOS'\n-5FC936 General Purpose Flag  0000 (0)\n-5FC938 Compression Method    0000 (0) 'Stored'\n-5FC93A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC93E CRC                   00000000 (0)\n-5FC942 Compressed Size       00000000 (0)\n-5FC946 Uncompressed Size     00000000 (0)\n-5FC94A Filename Length       007B (123)\n-5FC94C Extra Length          0009 (9)\n-5FC94E Comment Length        0000 (0)\n-5FC950 Disk Start            0000 (0)\n-5FC952 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FC954 Ext File Attributes   00000000 (0)\n-5FC958 Local Header Offset   00120440 (1180736)\n-5FC95C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC95C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FC9D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FC9D9   Length              0005 (5)\n-5FC9DB   Flags               01 (1) 'Modification'\n-5FC9DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FC9E0 CENTRAL HEADER #451   02014B50 (33639248)\n-5FC9E4 Created Zip Spec      14 (20) '2.0'\n-5FC9E5 Created OS            00 (0) 'MS-DOS'\n-5FC9E6 Extract Zip Spec      14 (20) '2.0'\n-5FC9E7 Extract OS            00 (0) 'MS-DOS'\n-5FC9E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FC9EA Compression Method    0000 (0) 'Stored'\n-5FC9EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FC9F0 CRC                   CC28EBBC (3425233852)\n-5FC9F4 Compressed Size       00001036 (4150)\n-5FC9F8 Uncompressed Size     00001036 (4150)\n-5FC9FC Filename Length       0091 (145)\n-5FC9FE Extra Length          0009 (9)\n-5FCA00 Comment Length        0000 (0)\n-5FCA02 Disk Start            0000 (0)\n-5FCA04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCA06 Ext File Attributes   00000000 (0)\n-5FCA0A Local Header Offset   001204E2 (1180898)\n-5FCA0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5FFAEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFAF0   Length              0005 (5)\n+5FFAF2   Flags               01 (1) 'Modification'\n+5FFAF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFAF7 CENTRAL HEADER #448   02014B50 (33639248)\n+5FFAFB Created Zip Spec      14 (20) '2.0'\n+5FFAFC Created OS            00 (0) 'MS-DOS'\n+5FFAFD Extract Zip Spec      14 (20) '2.0'\n+5FFAFE Extract OS            00 (0) 'MS-DOS'\n+5FFAFF General Purpose Flag  0000 (0)\n+5FFB01 Compression Method    0000 (0) 'Stored'\n+5FFB03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFB07 CRC                   00000000 (0)\n+5FFB0B Compressed Size       00000000 (0)\n+5FFB0F Uncompressed Size     00000000 (0)\n+5FFB13 Filename Length       0030 (48)\n+5FFB15 Extra Length          0009 (9)\n+5FFB17 Comment Length        0000 (0)\n+5FFB19 Disk Start            0000 (0)\n+5FFB1B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFB1D Ext File Attributes   00000000 (0)\n+5FFB21 Local Header Offset   00123576 (1193334)\n+5FFB25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFB25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFB55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFB57   Length              0005 (5)\n+5FFB59   Flags               01 (1) 'Modification'\n+5FFB5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFB5E CENTRAL HEADER #449   02014B50 (33639248)\n+5FFB62 Created Zip Spec      14 (20) '2.0'\n+5FFB63 Created OS            00 (0) 'MS-DOS'\n+5FFB64 Extract Zip Spec      14 (20) '2.0'\n+5FFB65 Extract OS            00 (0) 'MS-DOS'\n+5FFB66 General Purpose Flag  0000 (0)\n+5FFB68 Compression Method    0000 (0) 'Stored'\n+5FFB6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFB6E CRC                   00000000 (0)\n+5FFB72 Compressed Size       00000000 (0)\n+5FFB76 Uncompressed Size     00000000 (0)\n+5FFB7A Filename Length       0037 (55)\n+5FFB7C Extra Length          0009 (9)\n+5FFB7E Comment Length        0000 (0)\n+5FFB80 Disk Start            0000 (0)\n+5FFB82 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFB84 Ext File Attributes   00000000 (0)\n+5FFB88 Local Header Offset   001235CD (1193421)\n+5FFB8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFB8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFBC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFBC5   Length              0005 (5)\n+5FFBC7   Flags               01 (1) 'Modification'\n+5FFBC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFBCC CENTRAL HEADER #450   02014B50 (33639248)\n+5FFBD0 Created Zip Spec      14 (20) '2.0'\n+5FFBD1 Created OS            00 (0) 'MS-DOS'\n+5FFBD2 Extract Zip Spec      14 (20) '2.0'\n+5FFBD3 Extract OS            00 (0) 'MS-DOS'\n+5FFBD4 General Purpose Flag  0000 (0)\n+5FFBD6 Compression Method    0000 (0) 'Stored'\n+5FFBD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFBDC CRC                   00000000 (0)\n+5FFBE0 Compressed Size       00000000 (0)\n+5FFBE4 Uncompressed Size     00000000 (0)\n+5FFBE8 Filename Length       007B (123)\n+5FFBEA Extra Length          0009 (9)\n+5FFBEC Comment Length        0000 (0)\n+5FFBEE Disk Start            0000 (0)\n+5FFBF0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFBF2 Ext File Attributes   00000000 (0)\n+5FFBF6 Local Header Offset   0012362B (1193515)\n+5FFBFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFBFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFC75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFC77   Length              0005 (5)\n+5FFC79   Flags               01 (1) 'Modification'\n+5FFC7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFC7E CENTRAL HEADER #451   02014B50 (33639248)\n+5FFC82 Created Zip Spec      14 (20) '2.0'\n+5FFC83 Created OS            00 (0) 'MS-DOS'\n+5FFC84 Extract Zip Spec      14 (20) '2.0'\n+5FFC85 Extract OS            00 (0) 'MS-DOS'\n+5FFC86 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FFC88 Compression Method    0000 (0) 'Stored'\n+5FFC8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFC8E CRC                   CC28EBBC (3425233852)\n+5FFC92 Compressed Size       00001036 (4150)\n+5FFC96 Uncompressed Size     00001036 (4150)\n+5FFC9A Filename Length       0091 (145)\n+5FFC9C Extra Length          0009 (9)\n+5FFC9E Comment Length        0000 (0)\n+5FFCA0 Disk Start            0000 (0)\n+5FFCA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFCA4 Ext File Attributes   00000000 (0)\n+5FFCA8 Local Header Offset   001236CD (1193677)\n+5FFCAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5FCA0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FFCAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5FCA9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCAA1   Length              0005 (5)\n-5FCAA3   Flags               01 (1) 'Modification'\n-5FCAA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCAA8 CENTRAL HEADER #452   02014B50 (33639248)\n-5FCAAC Created Zip Spec      14 (20) '2.0'\n-5FCAAD Created OS            00 (0) 'MS-DOS'\n-5FCAAE Extract Zip Spec      14 (20) '2.0'\n-5FCAAF Extract OS            00 (0) 'MS-DOS'\n-5FCAB0 General Purpose Flag  0000 (0)\n-5FCAB2 Compression Method    0000 (0) 'Stored'\n-5FCAB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCAB8 CRC                   00000000 (0)\n-5FCABC Compressed Size       00000000 (0)\n-5FCAC0 Uncompressed Size     00000000 (0)\n-5FCAC4 Filename Length       0031 (49)\n-5FCAC6 Extra Length          0009 (9)\n-5FCAC8 Comment Length        0000 (0)\n-5FCACA Disk Start            0000 (0)\n-5FCACC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCACE Ext File Attributes   00000000 (0)\n-5FCAD2 Local Header Offset   001215E0 (1185248)\n-5FCAD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCAD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCB07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCB09   Length              0005 (5)\n-5FCB0B   Flags               01 (1) 'Modification'\n-5FCB0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCB10 CENTRAL HEADER #453   02014B50 (33639248)\n-5FCB14 Created Zip Spec      14 (20) '2.0'\n-5FCB15 Created OS            00 (0) 'MS-DOS'\n-5FCB16 Extract Zip Spec      14 (20) '2.0'\n-5FCB17 Extract OS            00 (0) 'MS-DOS'\n-5FCB18 General Purpose Flag  0000 (0)\n-5FCB1A Compression Method    0000 (0) 'Stored'\n-5FCB1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCB20 CRC                   00000000 (0)\n-5FCB24 Compressed Size       00000000 (0)\n-5FCB28 Uncompressed Size     00000000 (0)\n-5FCB2C Filename Length       0038 (56)\n-5FCB2E Extra Length          0009 (9)\n-5FCB30 Comment Length        0000 (0)\n-5FCB32 Disk Start            0000 (0)\n-5FCB34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCB36 Ext File Attributes   00000000 (0)\n-5FCB3A Local Header Offset   00121638 (1185336)\n-5FCB3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCB3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCB76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCB78   Length              0005 (5)\n-5FCB7A   Flags               01 (1) 'Modification'\n-5FCB7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCB7F CENTRAL HEADER #454   02014B50 (33639248)\n-5FCB83 Created Zip Spec      14 (20) '2.0'\n-5FCB84 Created OS            00 (0) 'MS-DOS'\n-5FCB85 Extract Zip Spec      14 (20) '2.0'\n-5FCB86 Extract OS            00 (0) 'MS-DOS'\n-5FCB87 General Purpose Flag  0000 (0)\n-5FCB89 Compression Method    0000 (0) 'Stored'\n-5FCB8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCB8F CRC                   00000000 (0)\n-5FCB93 Compressed Size       00000000 (0)\n-5FCB97 Uncompressed Size     00000000 (0)\n-5FCB9B Filename Length       006C (108)\n-5FCB9D Extra Length          0009 (9)\n-5FCB9F Comment Length        0000 (0)\n-5FCBA1 Disk Start            0000 (0)\n-5FCBA3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCBA5 Ext File Attributes   00000000 (0)\n-5FCBA9 Local Header Offset   00121697 (1185431)\n-5FCBAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCBAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCC19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCC1B   Length              0005 (5)\n-5FCC1D   Flags               01 (1) 'Modification'\n-5FCC1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCC22 CENTRAL HEADER #455   02014B50 (33639248)\n-5FCC26 Created Zip Spec      14 (20) '2.0'\n-5FCC27 Created OS            00 (0) 'MS-DOS'\n-5FCC28 Extract Zip Spec      14 (20) '2.0'\n-5FCC29 Extract OS            00 (0) 'MS-DOS'\n-5FCC2A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FCC2C Compression Method    0000 (0) 'Stored'\n-5FCC2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCC32 CRC                   3FC95820 (1070159904)\n-5FCC36 Compressed Size       00000AD4 (2772)\n-5FCC3A Uncompressed Size     00000AD4 (2772)\n-5FCC3E Filename Length       0082 (130)\n-5FCC40 Extra Length          0009 (9)\n-5FCC42 Comment Length        0000 (0)\n-5FCC44 Disk Start            0000 (0)\n-5FCC46 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCC48 Ext File Attributes   00000000 (0)\n-5FCC4C Local Header Offset   0012172A (1185578)\n-5FCC50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCC50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCCD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCCD4   Length              0005 (5)\n-5FCCD6   Flags               01 (1) 'Modification'\n-5FCCD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCCDB CENTRAL HEADER #456   02014B50 (33639248)\n-5FCCDF Created Zip Spec      14 (20) '2.0'\n-5FCCE0 Created OS            00 (0) 'MS-DOS'\n-5FCCE1 Extract Zip Spec      14 (20) '2.0'\n-5FCCE2 Extract OS            00 (0) 'MS-DOS'\n-5FCCE3 General Purpose Flag  0000 (0)\n-5FCCE5 Compression Method    0000 (0) 'Stored'\n-5FCCE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCCEB CRC                   00000000 (0)\n-5FCCEF Compressed Size       00000000 (0)\n-5FCCF3 Uncompressed Size     00000000 (0)\n-5FCCF7 Filename Length       0026 (38)\n-5FCCF9 Extra Length          0009 (9)\n-5FCCFB Comment Length        0000 (0)\n-5FCCFD Disk Start            0000 (0)\n-5FCCFF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCD01 Ext File Attributes   00000000 (0)\n-5FCD05 Local Header Offset   001222B7 (1188535)\n-5FCD09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCD09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCD2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCD31   Length              0005 (5)\n-5FCD33   Flags               01 (1) 'Modification'\n-5FCD34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCD38 CENTRAL HEADER #457   02014B50 (33639248)\n-5FCD3C Created Zip Spec      14 (20) '2.0'\n-5FCD3D Created OS            00 (0) 'MS-DOS'\n-5FCD3E Extract Zip Spec      14 (20) '2.0'\n-5FCD3F Extract OS            00 (0) 'MS-DOS'\n-5FCD40 General Purpose Flag  0000 (0)\n-5FCD42 Compression Method    0000 (0) 'Stored'\n-5FCD44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCD48 CRC                   00000000 (0)\n-5FCD4C Compressed Size       00000000 (0)\n-5FCD50 Uncompressed Size     00000000 (0)\n-5FCD54 Filename Length       002D (45)\n-5FCD56 Extra Length          0009 (9)\n-5FCD58 Comment Length        0000 (0)\n-5FCD5A Disk Start            0000 (0)\n-5FCD5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCD5E Ext File Attributes   00000000 (0)\n-5FCD62 Local Header Offset   00122304 (1188612)\n-5FCD66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCD66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCD93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCD95   Length              0005 (5)\n-5FCD97   Flags               01 (1) 'Modification'\n-5FCD98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCD9C CENTRAL HEADER #458   02014B50 (33639248)\n-5FCDA0 Created Zip Spec      14 (20) '2.0'\n-5FCDA1 Created OS            00 (0) 'MS-DOS'\n-5FCDA2 Extract Zip Spec      14 (20) '2.0'\n-5FCDA3 Extract OS            00 (0) 'MS-DOS'\n-5FCDA4 General Purpose Flag  0000 (0)\n-5FCDA6 Compression Method    0000 (0) 'Stored'\n-5FCDA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCDAC CRC                   00000000 (0)\n-5FCDB0 Compressed Size       00000000 (0)\n-5FCDB4 Uncompressed Size     00000000 (0)\n-5FCDB8 Filename Length       005B (91)\n-5FCDBA Extra Length          0009 (9)\n-5FCDBC Comment Length        0000 (0)\n-5FCDBE Disk Start            0000 (0)\n-5FCDC0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCDC2 Ext File Attributes   00000000 (0)\n-5FCDC6 Local Header Offset   00122358 (1188696)\n-5FCDCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCDCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCE25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCE27   Length              0005 (5)\n-5FCE29   Flags               01 (1) 'Modification'\n-5FCE2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCE2E CENTRAL HEADER #459   02014B50 (33639248)\n-5FCE32 Created Zip Spec      14 (20) '2.0'\n-5FCE33 Created OS            00 (0) 'MS-DOS'\n-5FCE34 Extract Zip Spec      14 (20) '2.0'\n-5FCE35 Extract OS            00 (0) 'MS-DOS'\n-5FCE36 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FCE38 Compression Method    0000 (0) 'Stored'\n-5FCE3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCE3E CRC                   41CBDE11 (1103879697)\n-5FCE42 Compressed Size       00000D2F (3375)\n-5FCE46 Uncompressed Size     00000D2F (3375)\n-5FCE4A Filename Length       0071 (113)\n-5FCE4C Extra Length          0009 (9)\n-5FCE4E Comment Length        0000 (0)\n-5FCE50 Disk Start            0000 (0)\n-5FCE52 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCE54 Ext File Attributes   00000000 (0)\n-5FCE58 Local Header Offset   001223DA (1188826)\n-5FCE5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCE5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCECD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCECF   Length              0005 (5)\n-5FCED1   Flags               01 (1) 'Modification'\n-5FCED2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCED6 CENTRAL HEADER #460   02014B50 (33639248)\n-5FCEDA Created Zip Spec      14 (20) '2.0'\n-5FCEDB Created OS            00 (0) 'MS-DOS'\n-5FCEDC Extract Zip Spec      14 (20) '2.0'\n-5FCEDD Extract OS            00 (0) 'MS-DOS'\n-5FCEDE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5FCEE0 Compression Method    0000 (0) 'Stored'\n-5FCEE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5FCEE6 CRC                   E80138A0 (3892394144)\n-5FCEEA Compressed Size       004C915C (5017948)\n-5FCEEE Uncompressed Size     004C915C (5017948)\n-5FCEF2 Filename Length       001A (26)\n-5FCEF4 Extra Length          0009 (9)\n-5FCEF6 Comment Length        0000 (0)\n-5FCEF8 Disk Start            0000 (0)\n-5FCEFA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5FCEFC Ext File Attributes   00000000 (0)\n-5FCF00 Local Header Offset   001231B1 (1192369)\n-5FCF04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FCF04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5FCF1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5FCF20   Length              0005 (5)\n-5FCF22   Flags               01 (1) 'Modification'\n-5FCF23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5FCF27 END CENTRAL HEADER    06054B50 (101010256)\n-5FCF2B Number of this disk   0000 (0)\n-5FCF2D Central Dir Disk no   0000 (0)\n-5FCF2F Entries in this disk  01CC (460)\n-5FCF31 Total Entries         01CC (460)\n-5FCF33 Size of Central Dir   00010BC9 (68553)\n-5FCF37 Offset to Central Dir 005EC35E (6210398)\n-5FCF3B Comment Length        0000 (0)\n+5FFD3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFD3F   Length              0005 (5)\n+5FFD41   Flags               01 (1) 'Modification'\n+5FFD42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFD46 CENTRAL HEADER #452   02014B50 (33639248)\n+5FFD4A Created Zip Spec      14 (20) '2.0'\n+5FFD4B Created OS            00 (0) 'MS-DOS'\n+5FFD4C Extract Zip Spec      14 (20) '2.0'\n+5FFD4D Extract OS            00 (0) 'MS-DOS'\n+5FFD4E General Purpose Flag  0000 (0)\n+5FFD50 Compression Method    0000 (0) 'Stored'\n+5FFD52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFD56 CRC                   00000000 (0)\n+5FFD5A Compressed Size       00000000 (0)\n+5FFD5E Uncompressed Size     00000000 (0)\n+5FFD62 Filename Length       0031 (49)\n+5FFD64 Extra Length          0009 (9)\n+5FFD66 Comment Length        0000 (0)\n+5FFD68 Disk Start            0000 (0)\n+5FFD6A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFD6C Ext File Attributes   00000000 (0)\n+5FFD70 Local Header Offset   001247CB (1198027)\n+5FFD74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFD74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFDA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFDA7   Length              0005 (5)\n+5FFDA9   Flags               01 (1) 'Modification'\n+5FFDAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFDAE CENTRAL HEADER #453   02014B50 (33639248)\n+5FFDB2 Created Zip Spec      14 (20) '2.0'\n+5FFDB3 Created OS            00 (0) 'MS-DOS'\n+5FFDB4 Extract Zip Spec      14 (20) '2.0'\n+5FFDB5 Extract OS            00 (0) 'MS-DOS'\n+5FFDB6 General Purpose Flag  0000 (0)\n+5FFDB8 Compression Method    0000 (0) 'Stored'\n+5FFDBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFDBE CRC                   00000000 (0)\n+5FFDC2 Compressed Size       00000000 (0)\n+5FFDC6 Uncompressed Size     00000000 (0)\n+5FFDCA Filename Length       0038 (56)\n+5FFDCC Extra Length          0009 (9)\n+5FFDCE Comment Length        0000 (0)\n+5FFDD0 Disk Start            0000 (0)\n+5FFDD2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFDD4 Ext File Attributes   00000000 (0)\n+5FFDD8 Local Header Offset   00124823 (1198115)\n+5FFDDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFDDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFE14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFE16   Length              0005 (5)\n+5FFE18   Flags               01 (1) 'Modification'\n+5FFE19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFE1D CENTRAL HEADER #454   02014B50 (33639248)\n+5FFE21 Created Zip Spec      14 (20) '2.0'\n+5FFE22 Created OS            00 (0) 'MS-DOS'\n+5FFE23 Extract Zip Spec      14 (20) '2.0'\n+5FFE24 Extract OS            00 (0) 'MS-DOS'\n+5FFE25 General Purpose Flag  0000 (0)\n+5FFE27 Compression Method    0000 (0) 'Stored'\n+5FFE29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFE2D CRC                   00000000 (0)\n+5FFE31 Compressed Size       00000000 (0)\n+5FFE35 Uncompressed Size     00000000 (0)\n+5FFE39 Filename Length       006C (108)\n+5FFE3B Extra Length          0009 (9)\n+5FFE3D Comment Length        0000 (0)\n+5FFE3F Disk Start            0000 (0)\n+5FFE41 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFE43 Ext File Attributes   00000000 (0)\n+5FFE47 Local Header Offset   00124882 (1198210)\n+5FFE4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFE4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFEB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFEB9   Length              0005 (5)\n+5FFEBB   Flags               01 (1) 'Modification'\n+5FFEBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFEC0 CENTRAL HEADER #455   02014B50 (33639248)\n+5FFEC4 Created Zip Spec      14 (20) '2.0'\n+5FFEC5 Created OS            00 (0) 'MS-DOS'\n+5FFEC6 Extract Zip Spec      14 (20) '2.0'\n+5FFEC7 Extract OS            00 (0) 'MS-DOS'\n+5FFEC8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5FFECA Compression Method    0000 (0) 'Stored'\n+5FFECC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFED0 CRC                   3FC95820 (1070159904)\n+5FFED4 Compressed Size       00000AD4 (2772)\n+5FFED8 Uncompressed Size     00000AD4 (2772)\n+5FFEDC Filename Length       0082 (130)\n+5FFEDE Extra Length          0009 (9)\n+5FFEE0 Comment Length        0000 (0)\n+5FFEE2 Disk Start            0000 (0)\n+5FFEE4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFEE6 Ext File Attributes   00000000 (0)\n+5FFEEA Local Header Offset   00124915 (1198357)\n+5FFEEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFEEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFF70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFF72   Length              0005 (5)\n+5FFF74   Flags               01 (1) 'Modification'\n+5FFF75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFF79 CENTRAL HEADER #456   02014B50 (33639248)\n+5FFF7D Created Zip Spec      14 (20) '2.0'\n+5FFF7E Created OS            00 (0) 'MS-DOS'\n+5FFF7F Extract Zip Spec      14 (20) '2.0'\n+5FFF80 Extract OS            00 (0) 'MS-DOS'\n+5FFF81 General Purpose Flag  0000 (0)\n+5FFF83 Compression Method    0000 (0) 'Stored'\n+5FFF85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFF89 CRC                   00000000 (0)\n+5FFF8D Compressed Size       00000000 (0)\n+5FFF91 Uncompressed Size     00000000 (0)\n+5FFF95 Filename Length       0026 (38)\n+5FFF97 Extra Length          0009 (9)\n+5FFF99 Comment Length        0000 (0)\n+5FFF9B Disk Start            0000 (0)\n+5FFF9D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFF9F Ext File Attributes   00000000 (0)\n+5FFFA3 Local Header Offset   001254A2 (1201314)\n+5FFFA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FFFA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5FFFCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5FFFCF   Length              0005 (5)\n+5FFFD1   Flags               01 (1) 'Modification'\n+5FFFD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5FFFD6 CENTRAL HEADER #457   02014B50 (33639248)\n+5FFFDA Created Zip Spec      14 (20) '2.0'\n+5FFFDB Created OS            00 (0) 'MS-DOS'\n+5FFFDC Extract Zip Spec      14 (20) '2.0'\n+5FFFDD Extract OS            00 (0) 'MS-DOS'\n+5FFFDE General Purpose Flag  0000 (0)\n+5FFFE0 Compression Method    0000 (0) 'Stored'\n+5FFFE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5FFFE6 CRC                   00000000 (0)\n+5FFFEA Compressed Size       00000000 (0)\n+5FFFEE Uncompressed Size     00000000 (0)\n+5FFFF2 Filename Length       002D (45)\n+5FFFF4 Extra Length          0009 (9)\n+5FFFF6 Comment Length        0000 (0)\n+5FFFF8 Disk Start            0000 (0)\n+5FFFFA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5FFFFC Ext File Attributes   00000000 (0)\n+600000 Local Header Offset   001254EF (1201391)\n+600004 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x600004: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+600031 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+600033   Length              0005 (5)\n+600035   Flags               01 (1) 'Modification'\n+600036   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+60003A CENTRAL HEADER #458   02014B50 (33639248)\n+60003E Created Zip Spec      14 (20) '2.0'\n+60003F Created OS            00 (0) 'MS-DOS'\n+600040 Extract Zip Spec      14 (20) '2.0'\n+600041 Extract OS            00 (0) 'MS-DOS'\n+600042 General Purpose Flag  0000 (0)\n+600044 Compression Method    0000 (0) 'Stored'\n+600046 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+60004A CRC                   00000000 (0)\n+60004E Compressed Size       00000000 (0)\n+600052 Uncompressed Size     00000000 (0)\n+600056 Filename Length       005B (91)\n+600058 Extra Length          0009 (9)\n+60005A Comment Length        0000 (0)\n+60005C Disk Start            0000 (0)\n+60005E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+600060 Ext File Attributes   00000000 (0)\n+600064 Local Header Offset   00125543 (1201475)\n+600068 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x600068: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6000C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6000C5   Length              0005 (5)\n+6000C7   Flags               01 (1) 'Modification'\n+6000C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6000CC CENTRAL HEADER #459   02014B50 (33639248)\n+6000D0 Created Zip Spec      14 (20) '2.0'\n+6000D1 Created OS            00 (0) 'MS-DOS'\n+6000D2 Extract Zip Spec      14 (20) '2.0'\n+6000D3 Extract OS            00 (0) 'MS-DOS'\n+6000D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+6000D6 Compression Method    0000 (0) 'Stored'\n+6000D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6000DC CRC                   41CBDE11 (1103879697)\n+6000E0 Compressed Size       00000D2F (3375)\n+6000E4 Uncompressed Size     00000D2F (3375)\n+6000E8 Filename Length       0071 (113)\n+6000EA Extra Length          0009 (9)\n+6000EC Comment Length        0000 (0)\n+6000EE Disk Start            0000 (0)\n+6000F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+6000F2 Ext File Attributes   00000000 (0)\n+6000F6 Local Header Offset   001255C5 (1201605)\n+6000FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6000FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+60016B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+60016D   Length              0005 (5)\n+60016F   Flags               01 (1) 'Modification'\n+600170   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+600174 CENTRAL HEADER #460   02014B50 (33639248)\n+600178 Created Zip Spec      14 (20) '2.0'\n+600179 Created OS            00 (0) 'MS-DOS'\n+60017A Extract Zip Spec      14 (20) '2.0'\n+60017B Extract OS            00 (0) 'MS-DOS'\n+60017C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+60017E Compression Method    0000 (0) 'Stored'\n+600180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+600184 CRC                   A5B847E1 (2780317665)\n+600188 Compressed Size       004C920F (5018127)\n+60018C Uncompressed Size     004C920F (5018127)\n+600190 Filename Length       001A (26)\n+600192 Extra Length          0009 (9)\n+600194 Comment Length        0000 (0)\n+600196 Disk Start            0000 (0)\n+600198 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+60019A Ext File Attributes   00000000 (0)\n+60019E Local Header Offset   0012639C (1205148)\n+6001A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6001A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6001BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6001BE   Length              0005 (5)\n+6001C0   Flags               01 (1) 'Modification'\n+6001C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6001C5 END CENTRAL HEADER    06054B50 (101010256)\n+6001C9 Number of this disk   0000 (0)\n+6001CB Central Dir Disk no   0000 (0)\n+6001CD Entries in this disk  01CC (460)\n+6001CF Total Entries         01CC (460)\n+6001D1 Size of Central Dir   00010BC9 (68553)\n+6001D5 Offset to Central Dir 005EF5FC (6223356)\n+6001D9 Comment Length        0000 (0)\n #\n # Warning Count: 920\n #\n # Done\n"}, {"source1": "META-INF/DEPENDENCIES", "source2": "META-INF/DEPENDENCIES", "unified_diff": "@@ -41,14 +41,16 @@\n     License: MIT License \n   - okhttp (https://square.github.io/okhttp/) com.squareup.okhttp3:okhttp:jar:4.11.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - okio (https://github.com/square/okio/) com.squareup.okio:okio:jar:3.2.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - okio (https://github.com/square/okio/) com.squareup.okio:okio-jvm:jar:3.2.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - dnsjava (http://www.dnsjava.org) dnsjava:dnsjava:jar:2.1.7\n+    License: BSD 2-Clause license  (http://opensource.org/licenses/BSD-2-Clause)\n   - io.grpc:grpc-alts (https://github.com/grpc/grpc-java) io.grpc:grpc-alts:jar:1.54.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n   - io.grpc:grpc-api (https://github.com/grpc/grpc-java) io.grpc:grpc-api:jar:1.54.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n   - io.grpc:grpc-auth (https://github.com/grpc/grpc-java) io.grpc:grpc-auth:jar:1.54.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n   - io.grpc:grpc-context (https://github.com/grpc/grpc-java) io.grpc:grpc-context:jar:1.54.0\n@@ -75,28 +77,36 @@\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - OpenCensus (https://github.com/census-instrumentation/opencensus-java) io.opencensus:opencensus-contrib-http-util:jar:0.31.1\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - OpenCensus (https://github.com/census-instrumentation/opencensus-proto) io.opencensus:opencensus-proto:jar:0.2.0\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - perfmark:perfmark-api (https://github.com/perfmark/perfmark) io.perfmark:perfmark-api:jar:0.26.0\n     License: Apache 2.0  (https://opensource.org/licenses/Apache-2.0)\n+  - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp) javax.activation:activation:jar:1.1\n+    License: Common Development and Distribution License (CDDL) v1.0  (https://glassfish.dev.java.net/public/CDDLv1.0.html)\n+  - jsp-api  javax.servlet.jsp:jsp-api:jar:2.1\n+\n+  - Streaming API for XML  javax.xml.stream:stax-api:jar:1.0-2\n+    License: GNU General Public Library  (http://www.gnu.org/licenses/gpl.txt)    License: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0  (http://www.sun.com/cddl/cddl.html)\n   - Java Native Access (https://github.com/java-native-access/jna) net.java.dev.jna:jna:jar:5.13.0\n     License: LGPL-2.1-or-later  (https://www.gnu.org/licenses/old-licenses/lgpl-2.1)    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Java Native Access Platform (https://github.com/java-native-access/jna) net.java.dev.jna:jna-platform:jar:5.6.0\n     License: LGPL, version 2.1  (http://www.gnu.org/licenses/licenses.html)    License: Apache License v2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - AspectJ weaver (https://www.eclipse.org/aspectj/) org.aspectj:aspectjweaver:jar:1.9.6\n     License: Eclipse Public License - v 1.0  (http://www.eclipse.org/legal/epl-v10.html)\n   - Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (https://www.bouncycastle.org/java.html) org.bouncycastle:bcpkix-jdk18on:jar:1.71\n     License: Bouncy Castle Licence  (https://www.bouncycastle.org/licence.html)\n   - Bouncy Castle Provider (https://www.bouncycastle.org/java.html) org.bouncycastle:bcprov-jdk18on:jar:1.71\n     License: Bouncy Castle Licence  (https://www.bouncycastle.org/licence.html)\n   - Bouncy Castle ASN.1 Extension and Utility APIs (https://www.bouncycastle.org/java.html) org.bouncycastle:bcutil-jdk18on:jar:1.71\n     License: Bouncy Castle Licence  (https://www.bouncycastle.org/licence.html)\n   - Checker Qual (https://checkerframework.org/) org.checkerframework:checker-qual:jar:3.33.0\n     License: The MIT License  (http://opensource.org/licenses/MIT)\n+  - Jettison  org.codehaus.jettison:jettison:bundle:1.1\n+\n   - org.conscrypt:conscrypt-openjdk-uber (https://conscrypt.org/) org.conscrypt:conscrypt-openjdk-uber:jar:2.5.2\n     License: Apache 2  (https://www.apache.org/licenses/LICENSE-2.0)\n   - IntelliJ IDEA Annotations (http://www.jetbrains.org) org.jetbrains:annotations:jar:13.0\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Kotlin Stdlib (https://kotlinlang.org/) org.jetbrains.kotlin:kotlin-stdlib:jar:1.8.20\n     License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Kotlin Stdlib Common (https://kotlinlang.org/) org.jetbrains.kotlin:kotlin-stdlib-common:jar:1.8.20\n@@ -383,14 +393,18 @@\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-property-utils (https://nifi.apache.org/nifi-commons/nifi-property-utils) org.apache.nifi:nifi-property-utils:jar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-provenance-repository-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-provenance-repository-bundle/nifi-provenance-repository-nar) org.apache.nifi:nifi-provenance-repository-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-proxy-configuration-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-services/nifi-proxy-configuration-bundle/nifi-proxy-configuration-nar) org.apache.nifi:nifi-proxy-configuration-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n+  - nifi-ranger-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-nar) org.apache.nifi:nifi-ranger-nar:nar:1.22.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n+  - nifi-ranger-resources (https://nifi.apache.org/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-resources) org.apache.nifi:nifi-ranger-resources:jar:1.22.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-record-serialization-services-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services-nar) org.apache.nifi:nifi-record-serialization-services-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-record-sink-service-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service-nar) org.apache.nifi:nifi-record-sink-service-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-redis-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-nar) org.apache.nifi:nifi-redis-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-redis-service-api-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-service-api-nar) org.apache.nifi:nifi-redis-service-api-nar:nar:1.22.0\n@@ -480,14 +494,24 @@\n   - nifi-workday-processors-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-workday-bundle/nifi-workday-processors-nar) org.apache.nifi:nifi-workday-processors-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-xml-processing (https://nifi.apache.org/nifi-commons/nifi-xml-processing) org.apache.nifi:nifi-xml-processing:jar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - nifi-zendesk-nar (https://nifi.apache.org/nifi-nar-bundles/nifi-zendesk-bundle/nifi-zendesk-nar) org.apache.nifi:nifi-zendesk-nar:nar:1.22.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n+From: 'Apache Software Foundation' (https://www.apache.org)\n+  - Apache Hadoop Annotations  org.apache.hadoop:hadoop-annotations:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Hadoop Auth  org.apache.hadoop:hadoop-auth:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Hadoop Common  org.apache.hadoop:hadoop-common:jar:3.3.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Hadoop shaded Protobuf 3.7 (https://www.apache.org/hadoop-thirdparty/hadoop-shaded-protobuf_3_7/) org.apache.hadoop.thirdparty:hadoop-shaded-protobuf_3_7:jar:1.0.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+\n From: 'Chemouni Uriel' (https://urielch.github.io/)\n   - ASM based accessors helper used by json-smart (https://urielch.github.io/) net.minidev:accessors-smart:bundle:2.4.11\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - JSON Small and Fast Parser (https://urielch.github.io/) net.minidev:json-smart:bundle:2.4.11\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n From: 'Connect2id Ltd.' (https://connect2id.com)\n@@ -512,24 +536,40 @@\n   - Jakarta XML Binding API (https://github.com/eclipse-ee4j/jaxb-api/jakarta.xml.bind-api) jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3\n     License: Eclipse Distribution License - v 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n   - JAXB Runtime (https://eclipse-ee4j.github.io/jaxb-ri/) org.glassfish.jaxb:jaxb-runtime:jar:2.3.5\n     License: Eclipse Distribution License - v 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n   - TXW2 Runtime (https://eclipse-ee4j.github.io/jaxb-ri/) org.glassfish.jaxb:txw2:jar:2.3.5\n     License: Eclipse Distribution License - v 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n \n+From: 'FasterXML' (http://fasterxml.com)\n+  - Woodstox (https://github.com/FasterXML/woodstox) com.fasterxml.woodstox:woodstox-core:bundle:5.0.3\n+    License: The Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-core-asl:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - JAX-RS provider for JSON content type (http://jackson.codehaus.org) org.codehaus.jackson:jackson-jaxrs:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)    License: GNU Lesser General Public License (LGPL), Version 2.1  (http://www.fsf.org/licensing/licenses/lgpl.txt)\n+  - Data Mapper for Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-mapper-asl:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org) org.codehaus.jackson:jackson-xc:jar:1.9.2\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)    License: GNU Lesser General Public License (LGPL), Version 2.1  (http://www.fsf.org/licensing/licenses/lgpl.txt)\n+\n From: 'FasterXML' (http://fasterxml.com/)\n   - Jackson-annotations (https://github.com/FasterXML/jackson) com.fasterxml.jackson.core:jackson-annotations:jar:2.15.2\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Jackson-core (https://github.com/FasterXML/jackson-core) com.fasterxml.jackson.core:jackson-core:jar:2.15.2\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - jackson-databind (https://github.com/FasterXML/jackson) com.fasterxml.jackson.core:jackson-databind:jar:2.15.2\n     License: The Apache Software License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Jackson datatype: JSR310 (https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) com.fasterxml.jackson.datatype:jackson-datatype-jsr310:bundle:2.15.2\n     License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n+From: 'fasterxml.com' (http://fasterxml.com)\n+  - Stax2 API (http://wiki.fasterxml.com/WoodstoxStax2) org.codehaus.woodstox:stax2-api:bundle:3.1.4\n+    License: The BSD License  (http://www.opensource.org/licenses/bsd-license.php)\n+\n From: 'GlassFish Community' (https://javaee.github.io/glassfish)\n   - javax.annotation API (http://jcp.org/en/jsr/detail?id=250) javax.annotation:javax.annotation-api:jar:1.3.2\n     License: CDDL + GPLv2 with classpath exception  (https://github.com/javaee/javax.annotation/blob/master/LICENSE)\n \n From: 'Google' (http://www.google.com/)\n   - Google Auth Library for Java - Credentials (https://github.com/googleapis/google-auth-library-java/google-auth-library-credentials) com.google.auth:google-auth-library-credentials:jar:1.16.0\n     License: BSD New license  (http://opensource.org/licenses/BSD-3-Clause)\n@@ -566,14 +606,18 @@\n   - proto-google-common-protos (https://github.com/googleapis/gapic-generator-java) com.google.api.grpc:proto-google-common-protos:jar:2.18.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - proto-google-iam-v1 (https://github.com/googleapis/gapic-generator-java) com.google.api.grpc:proto-google-iam-v1:jar:1.13.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Google Cloud KMS (https://github.com/googleapis/google-cloud-java) com.google.cloud:google-cloud-kms:jar:2.20.0\n     License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n+From: 'JCraft,Inc.' (http://www.jcraft.com/)\n+  - JSch (http://www.jcraft.com/jsch/) com.jcraft:jsch:jar:0.1.55\n+    License: Revised BSD  (http://www.jcraft.com/jsch/LICENSE.txt)\n+\n From: 'Microsoft Corporation' (http://microsoft.com)\n   - Microsoft Azure Java Core Library (https://github.com/Azure/azure-sdk-for-java) com.azure:azure-core:jar:1.39.0\n     License: The MIT License (MIT)  (http://opensource.org/licenses/MIT)\n   - Microsoft Azure OkHttp HTTP Client Library (https://github.com/Azure/azure-sdk-for-java) com.azure:azure-core-http-okhttp:jar:1.11.9\n     License: The MIT License (MIT)  (http://opensource.org/licenses/MIT)\n   - Microsoft Azure client library for Identity (https://github.com/Azure/azure-sdk-for-java) com.azure:azure-identity:jar:1.9.0\n     License: The MIT License (MIT)  (http://opensource.org/licenses/MIT)\n@@ -589,14 +633,30 @@\n     License: MIT license  (https://spdx.org/licenses/MIT.txt)\n \n From: 'Oracle' (http://www.oracle.com)\n   - Jakarta Mail API (http://eclipse-ee4j.github.io/mail/jakarta.mail) com.sun.mail:jakarta.mail:jar:1.6.7\n     License: EPL 2.0  (http://www.eclipse.org/legal/epl-2.0)    License: GPL2 w/ CPE  (https://www.gnu.org/software/classpath/license.html)    License: EDL 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n   - Jakarta Mail API jar (http://eclipse-ee4j.github.io/mail/jakarta.mail-api) jakarta.mail:jakarta.mail-api:jar:1.6.7\n     License: EPL 2.0  (http://www.eclipse.org/legal/epl-2.0)    License: GPL2 w/ CPE  (https://www.gnu.org/software/classpath/license.html)    License: EDL 1.0  (http://www.eclipse.org/org/documents/edl-v10.php)\n+  - JavaBeans Activation Framework API jar (http://java.net/all/javax.activation-api/) javax.activation:javax.activation-api:jar:1.2.0\n+    License: CDDL/GPLv2+CE  (https://github.com/javaee/activation/blob/master/LICENSE.txt)\n+\n+From: 'Oracle Corporation' (http://www.oracle.com/)\n+  - jersey-core (https://jersey.java.net/jersey-core/) com.sun.jersey:jersey-core:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+  - jersey-json (https://jersey.java.net/jersey-json/) com.sun.jersey:jersey-json:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+  - jersey-server (https://jersey.java.net/jersey-server/) com.sun.jersey:jersey-server:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+  - jersey-servlet (https://jersey.java.net/jersey-servlet/) com.sun.jersey:jersey-servlet:jar:1.19\n+    License: CDDL 1.1  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (http://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+  - JAXB RI (http://jaxb.java.net/) com.sun.xml.bind:jaxb-impl:jar:2.2.3-1\n+    License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)\n+  - JAXB API bundle for GlassFish V3 (https://jaxb.dev.java.net/) javax.xml.bind:jaxb-api:jar:2.2.2\n+    License: CDDL 1.1  (https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html)    License: GPL2 w/ CPE  (https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html)\n \n From: 'OW2' (http://www.ow2.org/)\n   - asm (http://asm.ow2.io/) org.ow2.asm:asm:jar:9.3\n     License: BSD-3-Clause  (https://asm.ow2.io/license.html)\n \n From: 'Pivotal Software, Inc.' (https://www.spring.io)\n   - Spring Vault Core (https://projects.spring.io/spring-vault/spring-vault-core/) org.springframework.vault:spring-vault-core:jar:2.3.3\n@@ -618,28 +678,100 @@\n   - Spring Expression Language (SpEL) (https://github.com/spring-projects/spring-framework) org.springframework:spring-expression:jar:5.3.27\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - Spring Commons Logging Bridge (https://github.com/spring-projects/spring-framework) org.springframework:spring-jcl:jar:5.3.27\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n   - Spring Web (https://github.com/spring-projects/spring-framework) org.springframework:spring-web:jar:5.3.27\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0)\n \n+From: 'Sun Microsystems, Inc' (http://www.sun.com/)\n+  - jsr311-api (https://jsr311.dev.java.net) javax.ws.rs:jsr311-api:jar:1.1.1\n+    License: CDDL License  (http://www.opensource.org/licenses/cddl1.php)\n+\n From: 'The Apache Software Foundation' (http://www.apache.org/)\n+  - Apache Commons Collections (http://commons.apache.org/collections/) commons-collections:commons-collections:jar:3.2.2\n+    License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Commons Compress (http://commons.apache.org/proper/commons-compress/) org.apache.commons:commons-compress:jar:1.8.1\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Commons Math (http://commons.apache.org/math/) org.apache.commons:commons-math3:jar:3.1.1\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Curator Client (http://curator.apache.org/curator-client) org.apache.curator:curator-client:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Curator Framework (http://curator.apache.org/curator-framework) org.apache.curator:curator-framework:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Curator Recipes (http://curator.apache.org/curator-recipes) org.apache.curator:curator-recipes:bundle:4.2.0\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - htrace-core4 (http://incubator.apache.org/projects/htrace.html) org.apache.htrace:htrace-core4:jar:4.1.0-incubating\n+    License: The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Apache HttpClient (http://hc.apache.org/httpcomponents-client-ga) org.apache.httpcomponents:httpclient:jar:4.5.14\n     License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Apache HttpCore (http://hc.apache.org/httpcomponents-core-ga) org.apache.httpcomponents:httpcore:jar:4.4.16\n     License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Yetus - Audience Annotations (https://yetus.apache.org/audience-annotations) org.apache.yetus:audience-annotations:jar:0.5.0\n+    License: Apache License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)\n \n From: 'The Apache Software Foundation' (https://www.apache.org/)\n+  - Apache Commons BeanUtils (https://commons.apache.org/proper/commons-beanutils/) commons-beanutils:commons-beanutils:jar:1.9.4\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Commons CLI (https://commons.apache.org/proper/commons-cli/) commons-cli:commons-cli:jar:1.5.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Apache Commons Codec (https://commons.apache.org/proper/commons-codec/) commons-codec:commons-codec:jar:1.15\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Commons IO (https://commons.apache.org/proper/commons-io/) commons-io:commons-io:jar:2.12.0\n+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Commons Net (https://commons.apache.org/proper/commons-net/) commons-net:commons-net:jar:3.9.0\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Avro (https://avro.apache.org) org.apache.avro:avro:bundle:1.11.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache Commons Configuration (http://commons.apache.org/proper/commons-configuration/) org.apache.commons:commons-configuration2:jar:2.1.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Apache Commons Lang (https://commons.apache.org/proper/commons-lang/) org.apache.commons:commons-lang3:jar:3.12.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n   - Apache Commons Text (https://commons.apache.org/proper/commons-text) org.apache.commons:commons-text:jar:1.10.0\n     License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Admin (http://directory.apache.org/kerby/kerby-kerb/kerb-admin) org.apache.kerby:kerb-admin:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Client (http://directory.apache.org/kerby/kerby-kerb/kerb-client) org.apache.kerby:kerb-client:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Common (http://directory.apache.org/kerby/kerby-kerb/kerb-common) org.apache.kerby:kerb-common:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb core (http://directory.apache.org/kerby/kerby-kerb/kerb-core) org.apache.kerby:kerb-core:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Crypto (http://directory.apache.org/kerby/kerby-kerb/kerb-crypto) org.apache.kerby:kerb-crypto:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Identity (http://directory.apache.org/kerby/kerby-kerb/kerb-identity) org.apache.kerby:kerb-identity:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Server (http://directory.apache.org/kerby/kerby-kerb/kerb-server) org.apache.kerby:kerb-server:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerb Simple Kdc (http://directory.apache.org/kerby/kerby-kerb/kerb-simplekdc) org.apache.kerby:kerb-simplekdc:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby-kerb Util (http://directory.apache.org/kerby/kerby-kerb/kerb-util) org.apache.kerby:kerb-util:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby ASN1 Project (http://directory.apache.org/kerby/kerby-common/kerby-asn1) org.apache.kerby:kerby-asn1:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby Config (http://directory.apache.org/kerby/kerby-common/kerby-config) org.apache.kerby:kerby-config:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby PKIX Project (http://directory.apache.org/kerby/kerby-pkix) org.apache.kerby:kerby-pkix:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby Util (http://directory.apache.org/kerby/kerby-common/kerby-util) org.apache.kerby:kerby-util:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Kerby XDR Project (http://directory.apache.org/kerby/kerby-common/kerby-xdr) org.apache.kerby:kerby-xdr:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Token provider (http://directory.apache.org/kerby/kerby-provider/token-provider) org.apache.kerby:token-provider:jar:1.0.1\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Credential Builder (http://ranger.apache.org/credentialbuilder/) org.apache.ranger:credentialbuilder:jar:2.4.0\n+    License: Apache 2.0 License  (http://www.apache.org/licenses/LICENSE-2.0.html)\n+  - Apache ZooKeeper - Server (http://zookeeper.apache.org/zookeeper) org.apache.zookeeper:zookeeper:jar:3.5.6\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n+  - Apache ZooKeeper - Jute (http://zookeeper.apache.org/zookeeper-jute) org.apache.zookeeper:zookeeper-jute:jar:3.5.6\n+    License: Apache License, Version 2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)\n \n From: 'ThreeTen.org' (https://www.threeten.org)\n   - ThreeTen backport (https://www.threeten.org/threetenbp) org.threeten:threetenbp:jar:1.6.8\n     License: BSD-3-Clause  (https://raw.githubusercontent.com/ThreeTen/threetenbp/main/LICENSE.txt)\n \n+From: 'Webtide' (https://webtide.com)\n+  - Jetty :: Utilities (https://eclipse.org/jetty/jetty-util) org.eclipse.jetty:jetty-util:jar:9.4.51.v20230217\n+    License: Apache Software License - Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)    License: Eclipse Public License - Version 1.0  (https://www.eclipse.org/org/documents/epl-v10.php)\n+\n \n \n \n"}, {"source1": "build.properties", "source2": "build.properties", "unified_diff": "@@ -12,18 +12,18 @@\n # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n # See the License for the specific language governing permissions and\n # limitations under the License.\n \n Project-Version:1.22.0\n Build-Branch:UNKNOWN\n Build-Revision:71e3ea9\n-Build-Timestamp:2023-06-06T20:05:45Z\n-Built-By:jwitt\n-Maven-Home:/opt/homebrew/Cellar/maven/3.9.1/libexec\n-Maven-Version:3.9.1\n-Created-By:Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)\n-Build-Java-Home:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre\n-Build-Jdk:1.8.0_362\n-Build-Jdk-Vendor:Azul Systems, Inc.\n-Build-Arch:aarch64\n-Build-Os:Mac OS X\n-Build-Os-Version:13.4\n+Build-Timestamp:2025-01-30T00:13:26Z\n+Built-By:aman\n+Maven-Home:/usr/local/apache-maven\n+Maven-Version:3.9.2\n+Created-By:Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)\n+Build-Java-Home:/usr/lib/jvm/java-8-openjdk-amd64/jre\n+Build-Jdk:1.8.0_422\n+Build-Jdk-Vendor:Private Build\n+Build-Arch:amd64\n+Build-Os:Linux\n+Build-Os-Version:5.15.0-87-generic\n"}, {"source1": "nifi-runtime-manifest.json", "source2": "nifi-runtime-manifest.json", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9662259936829448%", "Differences: {\"'buildInfo'\": \"{'timestamp': 1738196006000, 'compiler': 'Private Build 1.8.0_422'}\",", " \"'bundles'\": \"{0: {'artifact': 'nifi-cybersecurity-nar', 'componentManifest': {'processors': {0: \"", "              \"{'artifact': 'nifi-cybersecurity-nar', 'type': \"", "              \"'org.apache.nifi.processors.cybersecurity.CompareFuzzyHash', 'typeDescription': \"", "              \"'Compares an attribute containing a Fuzzy Hash against a file containing a list of \"", "              'fuzzy hashes, appending an attribute to the FlowF [\u2026]"], "unified_diff": "@@ -1,679 +1,289 @@\n {\n     \"agentType\": \"nifi\",\n     \"buildInfo\": {\n-        \"compiler\": \"Azul Systems, Inc. 1.8.0_362\",\n+        \"compiler\": \"Private Build 1.8.0_422\",\n         \"revision\": \"71e3ea9\",\n-        \"timestamp\": 1686107145000,\n+        \"timestamp\": 1738196006000,\n         \"version\": \"1.22.0\"\n     },\n     \"bundles\": [\n         {\n-            \"artifact\": \"nifi-amqp-nar\",\n+            \"artifact\": \"nifi-cybersecurity-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cybersecurity-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AMQP Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0.9.1\",\n-                                        \"value\": \"0.9.1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0.9.1\",\n-                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n-                                \"displayName\": \"AMQP Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AMQP Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Brokers\": {\n-                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n-                                \"displayName\": \"Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Brokers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Name\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Host Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"5672\",\n-                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue\": {\n-                                \"description\": \"The name of the existing AMQP Queue from which messages will be consumed. Usually pre-defined by AMQP administrator. \",\n-                                \"displayName\": \"Queue\",\n+                            \"ATTRIBUTE_NAME\": {\n+                                \"defaultValue\": \"fuzzyhash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n+                                \"displayName\": \"Hash Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue\",\n+                                \"name\": \"ATTRIBUTE_NAME\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Virtual Host\": {\n-                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n-                                \"displayName\": \"Virtual Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Virtual Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.acknowledge\": {\n+                            \"HASH_ALGORITHM\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n+                                        \"displayName\": \"ssdeep\",\n+                                        \"value\": \"ssdeep\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n+                                        \"displayName\": \"tlsh\",\n+                                        \"value\": \"tlsh\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \" If false (Non-Auto-Acknowledge), the messages will be acknowledged by the processor after transferring the FlowFiles to success and committing the NiFi session. Non-Auto-Acknowledge mode provides 'at-least-once' delivery semantics. If true (Auto-Acknowledge), messages that are delivered to the AMQP Client will be auto-acknowledged by the AMQP Broker just after sending them out. This generally will provide better throughput but will also result in messages being lost upon restart/crash of the AMQP Broker, NiFi or the processor. Auto-Acknowledge mode provides 'at-most-once' delivery semantics and it is recommended only if loosing messages is acceptable.\",\n-                                \"displayName\": \"Auto-Acknowledge Messages\",\n+                                \"description\": \"The hashing algorithm utilised\",\n+                                \"displayName\": \"Hashing Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.acknowledge\",\n+                                \"name\": \"HASH_ALGORITHM\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of messages that should be processed in a single session. Once this many messages have been received (or once no more messages are readily available), the messages received will be transferred to the 'success' relationship and the messages will be acknowledged to the AMQP Broker. Setting this value to a larger number could result in better performance, particularly for very small messages, but can also result in more messages being duplicated upon sudden restart of NiFi.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"HASH_LIST_FILE\": {\n+                                \"description\": \"Path to the file containing hashes to be validated against\",\n+                                \"displayName\": \"Hash List Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch.size\",\n+                                \"name\": \"HASH_LIST_FILE\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"cert-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cert-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"header.separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"The character that is used to separate key-value for header in String. The value must only one character.Otherwise you will get an error message\",\n-                                \"displayName\": \"Header Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"remove.curly.braces\": {\n+                            \"MATCHING_MODE\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"Send FlowFile to matched after the first match above threshold\",\n+                                        \"displayName\": \"single\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"description\": \"Iterate full list of hashes before deciding to send FlowFile to matched or unmatched\",\n+                                        \"displayName\": \"multi-match\",\n+                                        \"value\": \"multi-match\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"If true Remove Curly Braces, Curly Braces in the header will be automatically remove.\",\n-                                \"displayName\": \"Remove Curly Braces\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"Defines if the Processor should try to match as many entries as possible (multi-match) or if it should stop after the first match (single)\",\n+                                \"displayName\": \"Matching Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remove.curly.braces\",\n-                                \"required\": false,\n+                                \"name\": \"MATCHING_MODE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"The property has no effect and therefore deprecated.\",\n-                                \"displayName\": \"Client Auth\",\n+                            \"MATCH_THRESHOLD\": {\n+                                \"description\": \"The similarity score must exceed or be equal to in order formatch to be considered true. Refer to Additional Information for differences between TLSH and SSDEEP scores and how they relate to this property.\",\n+                                \"displayName\": \"Match Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"MATCH_THRESHOLD\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the AMQP queue are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that cannot be matched, e.g. (lacks the attribute) will be sent to this Relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be matched to an existing hash will be sent to this Relationship.\",\n+                                \"name\": \"not-found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully matched to an existing hash will be sent to this Relationship.\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"amqp\",\n-                            \"consume\",\n-                            \"get\",\n-                            \"message\",\n-                            \"rabbit\",\n-                            \"receive\"\n+                            \"cyber-security\",\n+                            \"fuzzy-hashing\",\n+                            \"hashing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.amqp.processors.ConsumeAMQP\",\n-                        \"typeDescription\": \"Consumes AMQP Messages from an AMQP Broker using the AMQP 0.9.1 protocol. Each message that is received from the AMQP Broker will be emitted as its own FlowFile to the 'success' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n+                        \"typeDescription\": \"Compares an attribute containing a Fuzzy Hash against a file containing a list of fuzzy hashes, appending an attribute to the FlowFile in case of a successful match.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The App ID field from the AMQP Message\",\n-                                \"name\": \"amqp$appId\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Encoding reported by the AMQP Message\",\n-                                \"name\": \"amqp$contentEncoding\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Type reported by the AMQP Message\",\n-                                \"name\": \"amqp$contentType\"\n-                            },\n-                            {\n-                                \"description\": \"The headers present on the AMQP Message\",\n-                                \"name\": \"amqp$headers\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n-                                \"name\": \"amqp$deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The Message priority\",\n-                                \"name\": \"amqp$priority\"\n-                            },\n-                            {\n-                                \"description\": \"The Message's Correlation ID\",\n-                                \"name\": \"amqp$correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message's Reply-To field\",\n-                                \"name\": \"amqp$replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The Message Expiration\",\n-                                \"name\": \"amqp$expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The unique ID of the Message\",\n-                                \"name\": \"amqp$messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n-                                \"name\": \"amqp$timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The type of message\",\n-                                \"name\": \"amqp$type\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the user\",\n-                                \"name\": \"amqp$userId\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the AMQP Cluster\",\n-                                \"name\": \"amqp$clusterId\"\n-                            },\n-                            {\n-                                \"description\": \"The routingKey of the AMQP Message\",\n-                                \"name\": \"amqp$routingKey\"\n+                                \"description\": \"The match that resembles the attribute specified by the <Hash Attribute Name> property. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n+                                \"name\": \"XXXX.N.match\"\n                             },\n                             {\n-                                \"description\": \"The exchange from which AMQP Message was received\",\n-                                \"name\": \"amqp$exchange\"\n+                                \"description\": \"The similarity score between this flowfileand its match of the same number N. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n+                                \"name\": \"XXXX.N.similarity\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cybersecurity-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AMQP Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0.9.1\",\n-                                        \"value\": \"0.9.1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0.9.1\",\n-                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n-                                \"displayName\": \"AMQP Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AMQP Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Brokers\": {\n-                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n-                                \"displayName\": \"Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Brokers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Exchange Name\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The name of the AMQP Exchange the messages will be sent to. Usually provided by the AMQP administrator (e.g., 'amq.direct'). It is an optional property. If kept empty the messages will be sent to a default AMQP exchange.\",\n-                                \"displayName\": \"Exchange Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Exchange Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Name\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Host Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"ATTRIBUTE_NAME\": {\n+                                \"defaultValue\": \"fuzzyhash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n+                                \"displayName\": \"Hash Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"5672\",\n-                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Routing Key\": {\n-                                \"description\": \"The name of the Routing Key that will be used by AMQP to route messages from the exchange to a destination queue(s). Usually provided by the administrator (e.g., 'myKey')In the event when messages are sent to a default exchange this property corresponds to a destination queue name, otherwise a binding from the Exchange to a Queue via Routing Key must be set (usually by the AMQP administrator)\",\n-                                \"displayName\": \"Routing Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Routing Key\",\n+                                \"name\": \"ATTRIBUTE_NAME\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Virtual Host\": {\n-                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n-                                \"displayName\": \"Virtual Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Virtual Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cert-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cert-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"header.separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"The character that is used to split key-value for headers. The value must only one character. Otherwise you will get an error message\",\n-                                \"displayName\": \"Header Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header.separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n+                            \"HASH_ALGORITHM\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n+                                        \"displayName\": \"ssdeep\",\n+                                        \"value\": \"ssdeep\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n+                                        \"displayName\": \"tlsh\",\n+                                        \"value\": \"tlsh\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"The property has no effect and therefore deprecated.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"description\": \"The hashing algorithm utilised\",\n+                                \"displayName\": \"Hashing Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"HASH_ALGORITHM\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The App ID field to set on the AMQP Message\",\n-                                \"name\": \"amqp$appId\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Encoding to set on the AMQP Message\",\n-                                \"name\": \"amqp$contentEncoding\"\n-                            },\n-                            {\n-                                \"description\": \"The Content Type to set on the AMQP Message\",\n-                                \"name\": \"amqp$contentType\"\n-                            },\n-                            {\n-                                \"description\": \"The headers to set on the AMQP Message\",\n-                                \"name\": \"amqp$headers\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n-                                \"name\": \"amqp$deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The Message priority\",\n-                                \"name\": \"amqp$priority\"\n-                            },\n-                            {\n-                                \"description\": \"The Message's Correlation ID\",\n-                                \"name\": \"amqp$correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message's Reply-To field\",\n-                                \"name\": \"amqp$replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The Message Expiration\",\n-                                \"name\": \"amqp$expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The unique ID of the Message\",\n-                                \"name\": \"amqp$messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n-                                \"name\": \"amqp$timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The type of message\",\n-                                \"name\": \"amqp$type\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the user\",\n-                                \"name\": \"amqp$userId\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the AMQP Cluster\",\n-                                \"name\": \"amqp$clusterId\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n+                            \"org.apache.nifi.processors.standard.HashContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the AMQP destination are routed to this relationship\",\n+                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be routed to the AMQP destination are routed to this relationship\",\n+                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"amqp\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"put\",\n-                            \"rabbit\",\n-                            \"send\"\n+                            \"cyber-security\",\n+                            \"fuzzy-hashing\",\n+                            \"hashing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.amqp.processors.PublishAMQP\",\n-                        \"typeDescription\": \"Creates an AMQP Message from the contents of a FlowFile and sends the message to an AMQP Exchange. In a typical AMQP exchange model, the message that is sent to the AMQP Exchange will be routed based on the 'Routing Key' to its final destination in the queue (the binding). If due to some misconfiguration the binding between the Exchange, Routing Key and Queue is not set up, the message will have no final destination and will return (i.e., the data will not make it to the queue). If that happens you will see a log in both app-log and bulletin stating to that effect, and the FlowFile will be routed to the 'failure' relationship.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\",\n+                        \"typeDescription\": \"Calculates a fuzzy/locality-sensitive hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property.Note: this processor only offers non-cryptographic hash algorithms. And it should be not be seen as a replacement to the HashContent processor.Note: The underlying library loads the entirety of the streamed content into and performs result evaluations in memory. Accordingly, it is important to consider the anticipated profile of content being evaluated by this processor and the hardware supporting it especially when working against large files.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n+                                \"name\": \"<Hash Attribute Name>\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-cipher-nar\",\n+            \"artifact\": \"nifi-pgp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -685,138 +295,123 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cipher-algorithm-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Cipher Blocking Chaining Mode\",\n-                                        \"displayName\": \"CBC\",\n-                                        \"value\": \"CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Counter Mode\",\n-                                        \"displayName\": \"CTR\",\n-                                        \"value\": \"CTR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n-                                        \"displayName\": \"GCM\",\n-                                        \"value\": \"GCM\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GCM\",\n-                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cipher-algorithm-padding\": {\n+                            \"decryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"NoPadding\",\n-                                        \"displayName\": \"NoPadding\",\n-                                        \"value\": \"NoPadding\"\n+                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n+                                        \"displayName\": \"DECRYPTED\",\n+                                        \"value\": \"DECRYPTED\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS5Padding\",\n-                                        \"displayName\": \"PKCS5Padding\",\n-                                        \"value\": \"PKCS5Padding\"\n+                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n+                                        \"displayName\": \"PACKAGED\",\n+                                        \"value\": \"PACKAGED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NoPadding\",\n-                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Padding\",\n+                                \"defaultValue\": \"DECRYPTED\",\n+                                \"description\": \"Strategy for writing files to success after decryption\",\n+                                \"displayName\": \"Decryption Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-padding\",\n+                                \"name\": \"decryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-specification\": {\n-                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n-                                \"displayName\": \"Key Specification\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification\",\n-                                \"required\": true,\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"key-specification-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n-                                        \"displayName\": \"PASSWORD\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PASSWORD\",\n-                                \"description\": \"Format describing the configured Key Specification\",\n-                                \"displayName\": \"Key Specification Format\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"private-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption succeeded\",\n+                                \"description\": \"Decryption Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Decryption failed\",\n+                                \"description\": \"Decryption Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"AES\",\n-                            \"Argon2\",\n-                            \"PBKDF2\",\n-                            \"bcrypt\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\",\n-                            \"scrypt\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n-                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Filename from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Modified Date from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.modified\"\n+                            },\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -828,626 +423,460 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"encryption-scheme\": {\n+                            \"compression-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n-                                        \"value\": \"PBEWITHMD5ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n-                                        \"value\": \"PBEWITHMD5ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n-                                        \"value\": \"PBEWITHSHA1ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n-                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n-                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n-                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n-                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZLIB\",\n+                                        \"value\": \"ZLIB\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     }\n                                 ],\n-                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n-                                \"displayName\": \"Encryption Scheme\",\n+                                \"defaultValue\": \"ZIP\",\n+                                \"description\": \"Compression Algorithm for encryption\",\n+                                \"displayName\": \"Compression Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-scheme\",\n+                                \"name\": \"compression-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-derivation-strategy\": {\n+                            \"file-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n-                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n-                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     },\n                                     {\n-                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n-                                        \"displayName\": \"JASYPT_STANDARD\",\n-                                        \"value\": \"JASYPT_STANDARD\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n-                                \"displayName\": \"Key Derivation Strategy\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for encryption\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-strategy\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n-                                \"displayName\": \"Password\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Decryption failed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"Jasypt\",\n-                            \"OpenSSL\",\n-                            \"PBES1\",\n-                            \"PKCS5\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n-                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Password-Based Encryption Scheme\",\n-                                \"name\": \"pbe.scheme\"\n-                            },\n-                            {\n-                                \"description\": \"Password-Based Encryption Block Cipher\",\n-                                \"name\": \"pbe.symmetric.cipher\"\n                             },\n-                            {\n-                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n-                                \"name\": \"pbe.digest.algorithm\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"mac-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA256\",\n-                                        \"value\": \"HmacSHA256\"\n-                                    },\n+                            \"public-key-search\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA512\",\n-                                        \"value\": \"HmacSHA512\"\n+                                        \"propertyDisplayName\": \"Public Key Service\",\n+                                        \"propertyName\": \"public-key-service\"\n                                     }\n                                 ],\n-                                \"description\": \"Hashed Message Authentication Code Function\",\n-                                \"displayName\": \"Message Authentication Code Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mac-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code\": {\n-                                \"description\": \"The MAC to compare with the calculated value\",\n-                                \"displayName\": \"Message Authentication Code\",\n+                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n+                                \"displayName\": \"Public Key Search\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-authentication-code\",\n-                                \"required\": true,\n+                                \"name\": \"public-key-search\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-authentication-code-encoding\": {\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"public-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"symmetric-key-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"AES_128\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Message Authentication Code\",\n-                                \"displayName\": \"Message Authentication Code Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-authentication-code-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"secret-key\": {\n-                                \"description\": \"Secret key to calculate the hash\",\n-                                \"displayName\": \"Secret Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"secret-key-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"AES_192\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTF8\",\n-                                        \"value\": \"UTF8\"\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"AES_256\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n+                                        \"displayName\": \"CAMELLIA_128\",\n+                                        \"value\": \"CAMELLIA_128\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n+                                        \"displayName\": \"CAMELLIA_192\",\n+                                        \"value\": \"CAMELLIA_192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAMELLIA_256\",\n+                                        \"value\": \"CAMELLIA_256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Secret Key\",\n-                                \"displayName\": \"Secret Key Encoding\",\n+                                \"defaultValue\": \"AES_256\",\n+                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n+                                \"displayName\": \"Symmetric-Key Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key-encoding\",\n+                                \"name\": \"symmetric-key-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n+                                \"description\": \"Encryption Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n+                                \"description\": \"Encryption Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"HMAC\",\n-                            \"MAC\",\n-                            \"Signing\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n-                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n-                                \"name\": \"mac.calculated\"\n+                                \"description\": \"Symmetric-Key Algorithm\",\n+                                \"name\": \"pgp.symmetric.key.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n-                                \"name\": \"mac.encoding\"\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n                             {\n-                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n-                                \"name\": \"mac.algorithm\"\n+                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n+                            },\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-grpc-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Always Output Response\": {\n+                            \"compression-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ZLIB\",\n+                                        \"value\": \"ZLIB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Will force a response FlowFile to be generated and routed to the 'Response' relationship regardless of what the server status code received is or if the processor is configured to put the server response body in the request attribute. In the later configuration a request FlowFile with the response body in the attribute and a typical response FlowFile will be emitted to their respective relationships.\",\n-                                \"displayName\": \"Always Output Response\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Always Output Response\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Message Size\": {\n-                                \"defaultValue\": \"4MB\",\n-                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n-                                \"displayName\": \"Max Message Size\",\n+                                \"defaultValue\": \"ZIP\",\n+                                \"description\": \"Compression Algorithm for signing\",\n+                                \"displayName\": \"Compression Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Message Size\",\n-                                \"required\": false,\n+                                \"name\": \"compression-algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Penalize on \\\"No Retry\\\"\": {\n+                            \"file-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this property will penalize FlowFiles that are routed to the \\\"No Retry\\\" relationship.\",\n-                                \"displayName\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for signing\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n-                                \"required\": false,\n+                                \"name\": \"file-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote gRPC service hostname\": {\n-                                \"description\": \"Remote host which will be connected to\",\n-                                \"displayName\": \"Remote gRPC service hostname\",\n+                            \"hash-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"SHA512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA512\",\n+                                \"description\": \"Hash Algorithm for signing\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote gRPC service hostname\",\n+                                \"name\": \"hash-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote gRPC service port\": {\n-                                \"description\": \"Remote port which will be connected to\",\n-                                \"displayName\": \"Remote gRPC service port\",\n+                            \"private-key-id\": {\n+                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n+                                \"displayName\": \"Private Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote gRPC service port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"private-key-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use SSL/TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS (https) connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for generating content signatures\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"private-key-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Send FlowFile Content\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to include the FlowFile content in the FlowFileRequest to the gRPC service.\",\n-                                \"displayName\": \"Send FlowFile Content\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send FlowFile Content\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use SSL/TLS\": {\n+                            \"signing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n+                                        \"displayName\": \"SIGNED\",\n+                                        \"value\": \"SIGNED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n+                                        \"displayName\": \"DETACHED\",\n+                                        \"value\": \"DETACHED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use TLS to send the contents of the gRPC messages.\",\n-                                \"displayName\": \"Use TLS\",\n+                                \"defaultValue\": \"SIGNED\",\n+                                \"description\": \"Strategy for writing files to success after signing\",\n+                                \"displayName\": \"Signing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL/TLS\",\n-                                \"required\": false,\n+                                \"name\": \"signing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile will be routed upon success. It will have new attributes detailing the success of the request.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any type of connection failure, timeout or general exception. It will have new attributes detailing the request.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any status code that can be retried. It will have new attributes detailing the request.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed on any status code that should NOT be retried.  It will have new attributes detailing the request.\",\n-                                \"name\": \"No Retry\"\n+                                \"description\": \"Content signing succeeded\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A Response FlowFile will be routed upon success. If the 'Output Response Regardless' property is true then the response will be sent to this relationship regardless of the status code received.\",\n-                                \"name\": \"Response\"\n+                                \"description\": \"Content signing failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"grpc\",\n-                            \"rpc\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.grpc.InvokeGRPC\",\n-                        \"typeDescription\": \"Sends FlowFiles, optionally with content, to a configurable remote gRPC service endpoint. The remote gRPC service must abide by the service IDL defined in NiFi.  gRPC isn't intended to carry large payloads,  so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The response code that is returned (0 = ERROR, 1 = SUCCESS, 2 = RETRY)\",\n-                                \"name\": \"invokegrpc.response.code\"\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The response message that is returned\",\n-                                \"name\": \"invokegrpc.response.body\"\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The remote gRPC service hostname\",\n-                                \"name\": \"invokegrpc.service.host\"\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n                             },\n                             {\n-                                \"description\": \"The remote gRPC service port\",\n-                                \"name\": \"invokegrpc.service.port\"\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokegrpc.java.exception.class\"\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokegrpc.java.exception.message\"\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1456,1493 +885,1087 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authorized DN Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to apply against the Distinguished Name of incoming connections. If the Pattern does not match the DN, the connection will be refused. The property will only be used if client certificate authentication (Mutual TLS) has been configured on SSL Context Service, otherwise it will be ignored.\",\n-                                \"displayName\": \"Authorized DN Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authorized DN Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Flow Control Window\": {\n-                                \"defaultValue\": \"1MB\",\n-                                \"description\": \"The initial HTTP/2 flow control window for both new streams and overall connection. Flow-control schemes ensure that streams on the same connection do not destructively interfere with each other. The default is 1MB.\",\n-                                \"displayName\": \"Flow Control Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Control Window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local gRPC service port\": {\n-                                \"description\": \"The local port that the gRPC service will listen on.\",\n-                                \"displayName\": \"Local gRPC Service Port\",\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Local gRPC service port\",\n+                                \"name\": \"public-key-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Message Size\": {\n-                                \"defaultValue\": \"4MB\",\n-                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n-                                \"displayName\": \"Maximum Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Message Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use TLS\",\n-                                        \"propertyName\": \"Use TLS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service used to provide server certificate information for TLS (https) connections. Keystore must be configured on the service. If truststore is also configured, it will turn on and require client certificate authentication (Mutual TLS).\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"Use TLS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use TLS to receive the contents of the gRPC messages.\",\n-                                \"displayName\": \"Use TLS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use TLS\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile was received successfully.\",\n-                                \"name\": \"Success\"\n+                                \"description\": \"Signature Verification Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Verification Failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"grpc\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rpc\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.grpc.ListenGRPC\",\n-                        \"typeDescription\": \"Starts a gRPC server and listens on the given port to transform the incoming messages into FlowFiles. The message format is defined by the standard gRPC protobuf IDL provided by NiFi. gRPC isn't intended to carry large payloads, so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n+                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The DN of the user who sent the FlowFile to this NiFi\",\n-                                \"name\": \"listengrpc.remote.user.dn\"\n+                                \"description\": \"Filename from Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n                             {\n-                                \"description\": \"The IP of the client who sent the FlowFile to this NiFi\",\n-                                \"name\": \"listengrpc.remote.host\"\n+                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n+                                \"name\": \"pgp.literal.data.modified\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Creation Time in milliseconds\",\n+                                \"name\": \"pgp.signature.created\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-jetty-bundle\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"artifact\": \"nifi-cassandra-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"artifact\": \"nifi-cassandra-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"oauth2-access-token-url\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The full endpoint of the URL where access tokens are handled.\",\n-                                \"displayName\": \"Access Token Url\",\n+                            \"cassandra-dmc-key-field-name\": {\n+                                \"description\": \"The name of the field that acts as the unique key. (The CQL type should be \\\"blob\\\")\",\n+                                \"displayName\": \"Key Field Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"oauth2-access-token-url\",\n+                                \"name\": \"cassandra-dmc-key-field-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-ssl-context\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"SSL Context\",\n+                            \"cassandra-dmc-session-provider\": {\n+                                \"description\": \"The client service that will configure the cassandra client connection.\",\n+                                \"displayName\": \"Session Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"cassandra-dmc-session-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"cassandra-dmc-table-name\": {\n+                                \"description\": \"The name of the table where the cache will be stored.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-dmc-ttl\": {\n+                                \"description\": \"If configured, this will set a TTL (Time to Live) for each row inserted into the table so that old cache items expire after a certain period of time.\",\n+                                \"displayName\": \"TTL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-ttl\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-dmc-value-field-name\": {\n+                                \"description\": \"The name of the field that will store the value. (The CQL type should be \\\"blob\\\")\",\n+                                \"displayName\": \"Value Field Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cassandra-dmc-value-field-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProvider\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"authorization\",\n-                            \"oauth2\",\n-                            \"provider\"\n+                            \"cache\",\n+                            \"cassandra\",\n+                            \"distributed\",\n+                            \"map\"\n                         ],\n-                        \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProviderImpl\",\n-                        \"typeDescription\": \"This controller service provides a way of working with access and refresh tokens via the password and client_credential grant flows in the OAuth2 specification. It is meant to provide a way for components to get a token from an oauth2 provider and pass that token as a part of a header to another service.\",\n+                        \"type\": \"org.apache.nifi.controller.cassandra.CassandraDistributedMapCache\",\n+                        \"typeDescription\": \"Provides a DistributedMapCache client that is based on Apache Cassandra.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"artifact\": \"nifi-cassandra-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"HTTP Protocols\": {\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"H2_HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"audience\": {\n-                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n-                                \"displayName\": \"Audience\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"audience\",\n+                                \"name\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-server-url\": {\n-                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n-                                \"displayName\": \"Authorization Server URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"authorization-server-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-authentication-strategy\": {\n+                            \"Compression Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n-                                        \"displayName\": \"REQUEST_BODY\",\n-                                        \"value\": \"REQUEST_BODY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n-                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n-                                        \"value\": \"BASIC_AUTHENTICATION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUEST_BODY\",\n-                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n-                                \"displayName\": \"Client Authentication Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Enable compression at transport-level requests and responses\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-id\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"client-id\",\n+                                \"name\": \"Compression Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"client-secret\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Client ID\",\n-                                        \"propertyName\": \"client-id\"\n-                                    }\n-                                ],\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"grant-type\": {\n+                            \"Consistency Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n-                                        \"displayName\": \"User Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n-                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n-                                        \"displayName\": \"Client Credentials\",\n-                                        \"value\": \"client_credentials\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n-                                        \"displayName\": \"Refresh Token\",\n-                                        \"value\": \"refresh_token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password\",\n-                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n-                                \"displayName\": \"Grant Type\",\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"grant-type\",\n+                                \"name\": \"Consistency Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"refresh-token\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"refresh_token\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Refresh Token.\",\n-                                \"displayName\": \"Refresh Token\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor supports the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-window\": {\n-                                \"defaultValue\": \"0 s\",\n-                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n-                                \"displayName\": \"Refresh Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"refresh-window\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"resource\": {\n-                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n-                                \"displayName\": \"Resource\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"resource\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"scope\": {\n-                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n-                                \"displayName\": \"Scope\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scope\",\n+                                \"name\": \"Keyspace\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"service-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for the username on the service that is being accessed.\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"service-user-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username on the service that is being accessed.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"service-user-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"access token\",\n-                            \"authorization\",\n-                            \"http\",\n-                            \"oauth2\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n-                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-groovyx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-groovyx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"groovyx-additional-classpath\": {\n-                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n-                                \"displayName\": \"Additional classpath\",\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"groovyx-additional-classpath\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-failure-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"rollback\",\n-                                        \"value\": \"rollback\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"transfer to failure\",\n-                                        \"value\": \"transfer to failure\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"rollback\",\n-                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n-                                \"displayName\": \"Failure strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-failure-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"groovyx-script-body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"connect-timeout-ms\": {\n+                                \"description\": \"Connection timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n+                                \"displayName\": \"Connect Timout (ms)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-script-body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connect-timeout-ms\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-script-file\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"read-timeout-ms\": {\n+                                \"description\": \"Read timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n+                                \"displayName\": \"Read Timout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"groovyx-script-file\",\n+                                \"name\": \"read-timeout-ms\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"groovyx\",\n-                            \"script\"\n+                            \"cassandra\",\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"pooling\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n-                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n+                        \"type\": \"org.apache.nifi.service.CassandraSessionProvider\",\n+                        \"typeDescription\": \"Provides connection session for Cassandra processors to work with Apache Cassandra.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-couchbase-nar\",\n+            \"artifact\": \"nifi-couchbase-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-prometheus-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specify bucket password if necessary. Couchbase Server 5.0 or later should use 'User Name' and 'User Password' instead.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Bucket Password for BUCKET_NAME\",\n-                                \"value\": \"bucket password\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Connection String\": {\n-                                \"description\": \"The hostnames or ip addresses of the bootstraping nodes and optional parameters. Syntax) couchbase://node1,node2,nodeN?param1=value1&param2=value2&paramN=valueN\",\n-                                \"displayName\": \"Connection String\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection String\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user-name\": {\n-                                \"description\": \"The user name to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n-                                \"displayName\": \"User Name\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-name\",\n-                                \"required\": false,\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n-                                \"displayName\": \"User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"nosql\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterService\",\n-                        \"typeDescription\": \"Provides a centralized Couchbase connection and bucket passwords management. Bucket passwords can be specified via dynamic properties.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n-                                \"required\": true,\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"lookup-sub-doc-path\": {\n-                                \"description\": \"The Sub-Document lookup path within the target JSON document.\",\n-                                \"displayName\": \"Lookup Sub-Document Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-sub-doc-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"prometheus\",\n+                            \"record\",\n+                            \"send\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseKeyValueLookupService\",\n-                        \"typeDescription\": \"Lookup a string value from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n+                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"60 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"couchbase\",\n-                            \"distributed\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseMapCacheClient\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a Couchbase Server cluster as a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster. Couchbase Server cluster can provide a high available and persistent cache storage.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"prometheus-reporting-task-metrics-send-jvm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n+                                \"displayName\": \"Send JVM metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"document-type\": {\n+                            \"prometheus-reporting-task-metrics-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Send rollup metrics for the entire root process group\",\n+                                        \"displayName\": \"Root Process Group\",\n+                                        \"value\": \"Root Process Group\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Send metrics for each process group\",\n+                                        \"displayName\": \"All Process Groups\",\n+                                        \"value\": \"All Process Groups\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n+                                        \"displayName\": \"All Components\",\n+                                        \"value\": \"All Components\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n+                                \"defaultValue\": \"All Components\",\n+                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n+                                \"displayName\": \"Metrics Reporting Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n+                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing fetched document from Couchbase Server.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"enrich\",\n-                            \"lookup\"\n+                            \"metrics\",\n+                            \"prometheus\",\n+                            \"reporting\",\n+                            \"time series data\"\n                         ],\n-                        \"type\": \"org.apache.nifi.couchbase.CouchbaseRecordLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n+                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n                         \"version\": \"1.22.0\"\n                     }\n-                ],\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"20 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"document-id\": {\n-                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n-                                \"displayName\": \"Document Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"document-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"document-type\": {\n+                            \"zendesk-authentication-type-name\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Zendesk Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-to-attribute\": {\n-                                \"description\": \"If set, the retrieved value will be put into an attribute of the FlowFile instead of a the content of the FlowFile. The attribute key to put to is determined by evaluating value of this property.\",\n-                                \"displayName\": \"Put Value to Attribute\",\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Zendesk Authentication Credential\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-to-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server but can be retried are routed to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Values retrieved from Couchbase Server are written as outgoing FlowFiles content or put into an attribute of the incoming FlowFile and routed to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server and not retry-able are routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input FlowFile is routed to this relationship when the value is retrieved from Couchbase Server and routed to 'success'.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"get\",\n-                            \"nosql\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.couchbase.GetCouchbaseKey\",\n-                        \"typeDescription\": \"Get a document from Couchbase Server via Key/Value access. The ID of the document to fetch may be supplied by setting the <Document Id> property. NOTE: if the Document Id property is not set, the contents of the FlowFile will be read to determine the Document Id, which means that the contents of the entire FlowFile will be buffered in memory.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Cluster where the document was retrieved from.\",\n-                                \"name\": \"couchbase.cluster\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket where the document was retrieved from.\",\n-                                \"name\": \"couchbase.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Id of the document.\",\n-                                \"name\": \"couchbase.doc.id\"\n-                            },\n-                            {\n-                                \"description\": \"CAS of the document.\",\n-                                \"name\": \"couchbase.doc.cas\"\n-                            },\n-                            {\n-                                \"description\": \"Expiration of the document.\",\n-                                \"name\": \"couchbase.doc.expiry\"\n-                            },\n-                            {\n-                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n-                                \"name\": \"couchbase.exception\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-couchbase-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"bucket-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The name of bucket to access.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bucket-name\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"cluster-controller-service\": {\n-                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n-                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                            \"zendesk-export-method\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n+                                        \"displayName\": \"Cursor Based\",\n+                                        \"value\": \"cursor\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n+                                        \"displayName\": \"Time Based\",\n+                                        \"value\": \"time\"\n+                                    }\n+                                ],\n+                                \"description\": \"Method for incremental export.\",\n+                                \"displayName\": \"Zendesk Export Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cluster-controller-service\",\n+                                \"name\": \"zendesk-export-method\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"document-id\": {\n-                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n-                                \"displayName\": \"Document Id\",\n+                            \"zendesk-query-start-timestamp\": {\n+                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n+                                \"displayName\": \"Zendesk Query Start Timestamp\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"document-id\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"document-type\": {\n+                            \"zendesk-resource\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Json\",\n-                                        \"value\": \"Json\"\n+                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/api/v2/incremental/tickets\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Json\",\n-                                \"description\": \"The type of contents.\",\n-                                \"displayName\": \"Document Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"document-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"persist-to\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n+                                        \"displayName\": \"Ticket Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MASTER\",\n-                                        \"value\": \"MASTER\"\n+                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n+                                        \"displayName\": \"Ticket Metric Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"/api/v2/incremental/users\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n+                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n+                                        \"displayName\": \"Organizations\",\n+                                        \"value\": \"/api/v2/incremental/organizations\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n+                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n+                                        \"displayName\": \"Articles\",\n+                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n+                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n+                                        \"displayName\": \"NPS - Responses\",\n+                                        \"value\": \"/api/v2/nps/incremental/responses\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FOUR\",\n-                                        \"value\": \"FOUR\"\n+                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n+                                        \"displayName\": \"NPS - Recipients\",\n+                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Durability constraint about disk persistence.\",\n-                                \"displayName\": \"Persist To\",\n+                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n+                                \"displayName\": \"Zendesk Resource\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"persist-to\",\n+                                \"name\": \"zendesk-resource\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"replicate-to\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Durability constraint about replication.\",\n-                                \"displayName\": \"Replicate To\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Zendesk Subdomain Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"replicate-to\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"Zendesk User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"zendesk-user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Used as a document id if 'Document Id' is not specified\",\n-                                \"name\": \"uuid\"\n-                            }\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles failed to be written to Couchbase Server but can be retried are routed to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Couchbase Server are routed to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles failed to be written to Couchbase Server and not retry-able are routed to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"couchbase\",\n-                            \"database\",\n-                            \"nosql\",\n-                            \"put\"\n+                            \"zendesk\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.couchbase.PutCouchbaseKey\",\n-                        \"typeDescription\": \"Put a document to Couchbase Server via Key/Value access.\",\n+                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n+                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Cluster where the document was stored.\",\n-                                \"name\": \"couchbase.cluster\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket where the document was stored.\",\n-                                \"name\": \"couchbase.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Id of the document.\",\n-                                \"name\": \"couchbase.doc.id\"\n-                            },\n-                            {\n-                                \"description\": \"CAS of the document.\",\n-                                \"name\": \"couchbase.doc.cas\"\n-                            },\n-                            {\n-                                \"description\": \"Expiration of the document.\",\n-                                \"name\": \"couchbase.doc.expiry\"\n-                            },\n-                            {\n-                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n-                                \"name\": \"couchbase.exception\"\n+                                \"description\": \"The number of records fetched by the processor.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-enrich-nar\",\n+            \"artifact\": \"nifi-language-translation-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-language-translation-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n+                                \"value\": \"The value to translate\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data to be translated\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"IP Address Attribute\": {\n-                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n-                                \"displayName\": \"IP Address Attribute\",\n+                            \"Input Language\": {\n+                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n+                                \"displayName\": \"Input Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n+                                \"name\": \"Input Language\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Target Language\": {\n+                                \"defaultValue\": \"en\",\n+                                \"description\": \"The language to translate the text into\",\n+                                \"displayName\": \"Target Language\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Target Language\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Content\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n+                                \"displayName\": \"Translate Content\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Translate Content\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Yandex API Key\": {\n+                                \"description\": \"The API Key that is registered with Yandex\",\n+                                \"displayName\": \"Yandex API Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Yandex API Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n+                                \"name\": \"translation.failure\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n+                                \"description\": \"This relationship is used when the translation is successful\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n+                                \"name\": \"comms.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\"\n+                            \"language\",\n+                            \"translate\",\n+                            \"translation\",\n+                            \"yandex\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.GeoEnrichIP\",\n-                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.geo.<fieldName>\",\n+                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n+                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of microseconds that the geo lookup took\",\n-                                \"name\": \"X.geo.lookup.micros\"\n-                            },\n-                            {\n-                                \"description\": \"The city identified for the IP address\",\n-                                \"name\": \"X.geo.city\"\n-                            },\n-                            {\n-                                \"description\": \"The accuracy radius if provided by the database (in Kilometers)\",\n-                                \"name\": \"X.geo.accuracy\"\n-                            },\n-                            {\n-                                \"description\": \"The latitude identified for this IP address\",\n-                                \"name\": \"X.geo.latitude\"\n-                            },\n-                            {\n-                                \"description\": \"The longitude identified for this IP address\",\n-                                \"name\": \"X.geo.longitude\"\n-                            },\n-                            {\n-                                \"description\": \"Each subdivision that is identified for this IP address is added with a one-up number appended to the attribute name, starting with 0\",\n-                                \"name\": \"X.geo.subdivision.N\"\n-                            },\n-                            {\n-                                \"description\": \"The ISO code for the subdivision that is identified by X.geo.subdivision.N\",\n-                                \"name\": \"X.geo.subdivision.isocode.N\"\n-                            },\n-                            {\n-                                \"description\": \"The country identified for this IP address\",\n-                                \"name\": \"X.geo.country\"\n-                            },\n-                            {\n-                                \"description\": \"The ISO Code for the country identified\",\n-                                \"name\": \"X.geo.country.isocode\"\n+                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n+                                \"name\": \"yandex.translate.failure.reason\"\n                             },\n                             {\n-                                \"description\": \"The postal code for the country identified\",\n-                                \"name\": \"X.geo.postalcode\"\n+                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n+                                \"name\": \"language\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-riemann-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-riemann-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -2950,201 +1973,219 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These values will be attached to the Riemann event as a custom attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Custom Event Attribute\",\n+                                \"value\": \"Any value or expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Batch size for incoming FlowFiles\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-city-record-path\": {\n-                                \"description\": \"Record path for putting the city identified for the IP address\",\n-                                \"displayName\": \"City Record Path\",\n+                            \"Description\": {\n+                                \"description\": \"Description associated to the event\",\n+                                \"displayName\": \"Description\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-city-record-path\",\n+                                \"name\": \"Description\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-iso-record-path\": {\n-                                \"description\": \"Record path for putting the ISO Code for the country identified\",\n-                                \"displayName\": \"Country ISO Code Record Path\",\n+                            \"Host\": {\n+                                \"defaultValue\": \"${hostname()}\",\n+                                \"description\": \"A hostname associated to this event (e.g. nifi-app1)\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\n+                                \"name\": \"Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-postal-record-path\": {\n-                                \"description\": \"Record path for putting the postal code for the country identified\",\n-                                \"displayName\": \"Country Postal Code Record Path\",\n+                            \"Metric\": {\n+                                \"description\": \"Floating point number associated to this event\",\n+                                \"displayName\": \"Metric\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n+                                \"name\": \"Metric\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-country-record-path\": {\n-                                \"description\": \"Record path for putting the country identified for this IP address\",\n-                                \"displayName\": \"Country Record Path\",\n+                            \"Riemann Address\": {\n+                                \"description\": \"Hostname of Riemann server\",\n+                                \"displayName\": \"Riemann Address\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Riemann Address\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Riemann Port\": {\n+                                \"defaultValue\": \"5555\",\n+                                \"description\": \"Port that Riemann is listening on\",\n+                                \"displayName\": \"Riemann Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Riemann Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service\": {\n+                                \"description\": \"Name of service associated to this event (e.g. FTP File Fetched)\",\n+                                \"displayName\": \"Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-record-path\",\n+                                \"name\": \"Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-ip-record-path\": {\n-                                \"description\": \"The record path to retrieve the IP address for doing the lookup.\",\n-                                \"displayName\": \"IP Address Record Path\",\n+                            \"State\": {\n+                                \"description\": \"State of service associated to this event in string form (e.g. ok, warning, foo)\",\n+                                \"displayName\": \"State\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-ip-record-path\",\n-                                \"required\": true,\n+                                \"name\": \"State\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-latitude-record-path\": {\n-                                \"description\": \"Record path for putting the latitude identified for this IP address\",\n-                                \"displayName\": \"Latitude Record Path\",\n+                            \"TTL\": {\n+                                \"description\": \"Floating point value in seconds until Riemann considers this event as \\\"expired\\\"\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-latitude-record-path\",\n+                                \"name\": \"TTL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-longitude-record-path\": {\n-                                \"description\": \"Record path for putting the longitude identified for this IP address\",\n-                                \"displayName\": \"Longitude Record Path\",\n+                            \"Tags\": {\n+                                \"description\": \"Comma separated list of tags associated to the event\",\n+                                \"displayName\": \"Tags\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-longitude-record-path\",\n+                                \"name\": \"Tags\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-record-reader\": {\n-                                \"description\": \"Record reader service to use for reading the flowfile contents.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Time\": {\n+                                \"description\": \"Time of event in unix epoch seconds (long), default: (current time)\",\n+                                \"displayName\": \"Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-record-writer\": {\n-                                \"description\": \"Record writer service to use for enriching the flowfile contents.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Timeout in milliseconds when writing events to Riemann\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-writer\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-split-found-not-found\": {\n+                            \"Transport Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Separate records that have been enriched from ones that have not. Default behavior is to send everything to the found relationship if even one record is enriched.\",\n-                                \"displayName\": \"Separate Enriched From Not Enriched\",\n+                                \"defaultValue\": \"TCP\",\n+                                \"description\": \"Transport protocol to speak to Riemann in\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-split-found-not-found\",\n+                                \"name\": \"Transport Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"The original input flowfile goes to this relationship regardless of whether the content was enriched or not.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Metrics successfully written to Riemann\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n+                                \"description\": \"Metrics which failed to write to Riemann\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\",\n-                            \"record\"\n+                            \"metrics\",\n+                            \"monitoring\",\n+                            \"riemann\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.GeoEnrichIPRecord\",\n-                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. This version uses the NiFi Record API to allow large scale enrichment of record-oriented data sets. Each field provided by the MaxMind database can be directed to a field of the user's choosing by providing a record path for that field configuration. \",\n+                        \"type\": \"org.apache.nifi.processors.riemann.PutRiemann\",\n+                        \"typeDescription\": \"Send events to Riemann (http://riemann.io) when FlowFiles pass through this processor. You can use events to notify Riemann that a FlowFile passed through, or you can attach a more meaningful metric, such as, the time a FlowFile took to get to this processor. All attributes attached to events support the NiFi Expression Language.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -3153,257 +2194,266 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Geo Database File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"IP Address Attribute\": {\n-                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n-                                \"displayName\": \"IP Address Attribute\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"ISP\",\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"maxmind\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.ISPEnrichIP\",\n-                        \"typeDescription\": \"Looks up ISP information for an IP address and adds the information to FlowFile attributes. The ISP data is provided as a MaxMind ISP database. (Note that this is NOT the same as the GeoLite database utilized by some geo enrichment tools). The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.isp.<fieldName>\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of microseconds that the geo lookup took\",\n-                                \"name\": \"X.isp.lookup.micros\"\n                             },\n-                            {\n-                                \"description\": \"The Autonomous System Number (ASN) identified for the IP address\",\n-                                \"name\": \"X.isp.asn\"\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The Organization Associated with the ASN identified\",\n-                                \"name\": \"X.isp.asn.organization\"\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The name of the ISP associated with the IP address provided\",\n-                                \"name\": \"X.isp.name\"\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The Organization associated with the IP address provided\",\n-                                \"name\": \"X.isp.organization\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"DNS_QUERY_TYPE\": {\n-                                \"defaultValue\": \"TXT\",\n-                                \"description\": \"The DNS query type to be used by the processor (e.g. TXT, A)\",\n-                                \"displayName\": \"DNS Query Type\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_QUERY_TYPE\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_RETRIES\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of attempts before giving up and moving on\",\n-                                \"displayName\": \"DNS Query Retries\",\n+                            \"fetch-es-doc-id\": {\n+                                \"description\": \"The identifier of the document to be fetched\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_RETRIES\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"fetch-es-doc-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_SERVER\": {\n-                                \"description\": \"A comma separated list of  DNS servers to be used. (Defaults to system wide if none is used)\",\n-                                \"displayName\": \"DNS Servers\",\n+                            \"fetch-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_SERVER\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"fetch-es-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"DNS_TIMEOUT\": {\n-                                \"defaultValue\": \"1500 ms\",\n-                                \"description\": \"The amount of time to wait until considering a query as failed\",\n-                                \"displayName\": \"DNS Query Timeout\",\n+                            \"fetch-es-index\": {\n+                                \"description\": \"The name of the index to read from.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_TIMEOUT\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"fetch-es-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_INPUT\": {\n-                                \"description\": \"The value that should be used to populate the query\",\n-                                \"displayName\": \"Lookup value\",\n+                            \"fetch-es-type\": {\n+                                \"description\": \"The type of document/fetch (if unset, the first document matching the identifier across _all types will be retrieved). This should be unset, '_doc' or '_source' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n-                                \"required\": true,\n+                                \"name\": \"fetch-es-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"Split\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a regular expression to split the results into attributes \",\n-                                        \"displayName\": \"RegEx\",\n-                                        \"value\": \"RegEx\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The method used to slice the results into attribute groups\",\n-                                \"displayName\": \"Results Parser\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"QUERY_PARSER_INPUT\": {\n-                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n-                                \"displayName\": \"Parser RegEx\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER_INPUT\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n+                                \"name\": \"not found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"dns\",\n-                            \"enrich\",\n-                            \"ip\"\n+                            \"elasticsearch\",\n+                            \"fetch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.enrich.QueryDNS\",\n-                        \"typeDescription\": \"A powerful DNS query processor primary designed to enrich DataFlows with DNS based APIs (e.g. RBLs, ShadowServer's ASN lookup) but that can be also used to perform regular DNS lookups.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.FetchElasticsearchHttp\",\n+                        \"typeDescription\": \"Retrieves a document from Elasticsearch using the specified connection properties and the identifier of the document to retrieve. Note that the full body of the document will be read into memory before being written to a Flow File for transfer.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The captured fields of the DNS query response for each of the records received\",\n-                                \"name\": \"enrich.dns.record*.group*\"\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -3412,283 +2462,269 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"BATCH_SIZE\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor. \",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"BATCH_SIZE\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"BULK_PROTOCOL\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The evaluated input of each flowfile is enclosed within begin and end tags. Each row contains a delimited set of fields\",\n-                                        \"displayName\": \"Begin/End\",\n-                                        \"value\": \"Begin/End\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Queries are made without any particular dialect\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The protocol used to perform the bulk query. \",\n-                                \"displayName\": \"Bulk Protocol\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"BULK_PROTOCOL\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"KEY_GROUP\": {\n-                                \"description\": \"When performing a batched lookup, the following RegEx numbered capture group or Column number will be used to match the whois server response with the lookup field\",\n-                                \"displayName\": \"Key lookup group (multiline / batch)\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"KEY_GROUP\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_INPUT\": {\n-                                \"description\": \"The value that should be used to populate the query\",\n-                                \"displayName\": \"Lookup value\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"Split\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use a regular expression to split the results into attributes \",\n-                                        \"displayName\": \"RegEx\",\n-                                        \"value\": \"RegEx\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The method used to slice the results into attribute groups\",\n-                                \"displayName\": \"Results Parser\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER_INPUT\": {\n-                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n-                                \"displayName\": \"Parser RegEx\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER_INPUT\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"WHOIS_QUERY_TYPE\": {\n-                                \"description\": \"The Whois query type to be used by the processor (if used)\",\n-                                \"displayName\": \"Whois Query Type\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_QUERY_TYPE\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_SERVER\": {\n-                                \"description\": \"The Whois server to be used\",\n-                                \"displayName\": \"Whois Server\",\n+                            \"put-es-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of flow files to put to the database in a single transaction. Note that the contents of the flow files will be stored in memory until the bulk operation is performed. Also the results should be returned in the same order the flow files were received.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_SERVER\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-es-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_SERVER_PORT\": {\n-                                \"defaultValue\": \"43\",\n-                                \"description\": \"The TCP port of the remote Whois server\",\n-                                \"displayName\": \"Whois Server Port\",\n+                            \"put-es-id-attr\": {\n+                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n+                                \"displayName\": \"Identifier Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_SERVER_PORT\",\n+                                \"name\": \"put-es-id-attr\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-index\": {\n+                                \"description\": \"The name of the index to insert into\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"WHOIS_TIMEOUT\": {\n-                                \"defaultValue\": \"1500 ms\",\n-                                \"description\": \"The amount of time to wait until considering a query as failed\",\n-                                \"displayName\": \"Whois Query Timeout\",\n+                            \"put-es-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_TIMEOUT\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"put-es-type\": {\n+                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\n+                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"whois\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.enrich.QueryWhois\",\n-                        \"typeDescription\": \"A powerful whois query processor primary designed to enrich DataFlows with whois based APIs (e.g. ShadowServer's ASN lookup) but that can be also used to perform regular whois lookups.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The captured fields of the Whois query response for each of the records received\",\n-                                \"name\": \"enrich.dns.record*.group*\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-dropbox-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"app-key\": {\n-                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"app-secret\": {\n-                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-token\": {\n-                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n-                                \"displayName\": \"Refresh Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"dropbox\",\n-                            \"provider\"\n+                            \"delete\",\n+                            \"elasticsearch\",\n+                            \"http\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"update\",\n+                            \"upsert\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n-                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttp\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-update-attribute-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -3697,1870 +2733,1459 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A FlowFile attribute to update\",\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n                                 \"value\": \"The value to set it to\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Delete Attributes Expression\": {\n-                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n-                                \"displayName\": \"Delete Attributes Expression\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Delete Attributes Expression\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Stateful Variables Initial Value\": {\n-                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n-                                \"displayName\": \"Stateful Variables Initial Value\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Stateful Variables Initial Value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Store State\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Do not store state\",\n-                                        \"value\": \"Do not store state\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Store state locally\",\n-                                        \"value\": \"Store state locally\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do not store state\",\n-                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n-                                \"displayName\": \"Store State\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Store State\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"canonical-value-lookup-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n-                                \"displayName\": \"Cache Value Lookup Cache Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"canonical-value-lookup-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"delete\",\n-                            \"modification\",\n-                            \"state\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n-                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n-                                \"name\": \"See additional details\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-airtable-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-airtable-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"15 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n-                                \"displayName\": \"API Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"api-url\": {\n-                                \"defaultValue\": \"https://api.airtable.com/v0\",\n-                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n-                                \"displayName\": \"API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"base-id\": {\n-                                \"description\": \"The ID of the Airtable base to be queried.\",\n-                                \"displayName\": \"Base ID\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"base-id\",\n-                                \"required\": true,\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-filter\": {\n-                                \"description\": \"Filter records by Airtable's formulas.\",\n-                                \"displayName\": \"Custom Filter\",\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"custom-filter\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fields\": {\n-                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n-                                \"displayName\": \"Fields\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fields\",\n-                                \"required\": false,\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-records-per-flowfile\": {\n-                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Records Per FlowFile\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-records-per-flowfile\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-page-size\": {\n-                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n-                                \"displayName\": \"Query Page Size\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query-page-size\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-time-window-lag\": {\n-                                \"defaultValue\": \"3 s\",\n-                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n-                                \"displayName\": \"Query Time Window Lag\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query-time-window-lag\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"table-id\": {\n-                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n-                                \"displayName\": \"Table ID\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"table-id\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"airtable\",\n-                            \"database\",\n-                            \"query\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n-                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mqtt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Broker URI\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Client ID\",\n+                                \"name\": \"proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n+                            \"put-es-record-at-timestamp\": {\n+                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n+                                \"displayName\": \"@timestamp Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Group ID\": {\n-                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"put-es-record-at-timestamp-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n+                                \"displayName\": \"@timestamp Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Group ID\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                            \"put-es-record-id-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the identifier for the document. If the Index Operation is \\\"index\\\" or \\\"create\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the field's value must be non-empty.\",\n+                                \"displayName\": \"Identifier Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n+                            \"put-es-record-index\": {\n+                                \"description\": \"The name of the index to insert into\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Retain\": {\n+                            \"put-es-record-log-all-errors\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Queue Size\": {\n-                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n-                                \"displayName\": \"Max Queue Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Queue Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mapping for the index it is being inserted into. If this is set to true, the processor will log the failure reason for the every failed record. When set to false only the first error in the batch will be logged.\",\n+                                \"displayName\": \"Log all errors in batch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"put-es-record-log-all-errors\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Quality of Service(QoS)\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"put-es-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quality of Service(QoS)\",\n+                                \"name\": \"put-es-record-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"put-es-record-record-writer\": {\n+                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mappingfor the index it is being inserted into. This property specifies the Controller Service to use for writing out those individual records sent to 'failure'. If this is not set, then the whole FlowFile will be routed to failure (including any records which may have been inserted successfully). Note that this will only be used if Elasticsearch reports that individual records failed and that in the event that the entire FlowFile fails (e.g. in the event ES is down), the FF will be routed to failure without being interpreted by this record writer. If there is an error while attempting to route the failures, the entire FlowFile will be routed to Failure. Also if every record failed individually, the entire FlowFile will be routed to Failure without being parsed by the writer.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"put-es-record-record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n+                            \"put-es-record-type\": {\n+                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"suppress-nulls\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic Filter\": {\n-                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n-                                \"displayName\": \"Topic Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Topic Filter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"add-attributes-as-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n                                     }\n                                 ],\n-                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n-                                \"displayName\": \"Add attributes as fields\",\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"add-attributes-as-fields\",\n+                                \"name\": \"suppress-nulls\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"The MQTT message output\",\n-                                \"name\": \"Message\"\n+                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"delete\",\n+                            \"elasticsearch\",\n+                            \"http\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\",\n+                            \"update\",\n+                            \"upsert\",\n+                            \"write\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n-                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttpRecord\",\n+                        \"typeDescription\": \"Writes the records from a FlowFile into to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document, as well as the operation type (index, upsert, delete, etc.). Note: The Bulk API is used to send the records. This means that the entire contents of the incoming flow file are read into memory, and each record is transformed into a JSON document which is added to a single HTTP request body. For very large flow files (files with a large number of records, e.g.), this could cause memory usage issues.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n+                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship.\",\n                                 \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"MQTT broker that was the message source\",\n-                                \"name\": \"mqtt.broker\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT topic on which message was received\",\n-                                \"name\": \"mqtt.topic\"\n-                            },\n-                            {\n-                                \"description\": \"The quality of service for this message.\",\n-                                \"name\": \"mqtt.qos\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n-                                \"name\": \"mqtt.isDuplicate\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n-                                \"name\": \"mqtt.isRetained\"\n+                                \"description\": \"The number of records found by Elasticsearch to have errors. This is only populated on the 'failure' relationship.\",\n+                                \"name\": \"failure.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Broker URI\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Client ID\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Quality of Service(QoS)\": {\n-                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quality of Service(QoS)\",\n-                                \"required\": true,\n+                                \"name\": \"query-es-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Retain Message\": {\n-                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n-                                \"displayName\": \"Retain Message\",\n+                            \"query-es-index\": {\n+                                \"description\": \"The name of the index to read from. If the property is unset or set to _all, the query will match across all indexes.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Retain Message\",\n+                                \"name\": \"query-es-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"query-es-limit\": {\n+                                \"description\": \"If set, limits the number of results that will be returned.\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-limit\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n+                            \"query-es-query\": {\n+                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"query-es-sort\": {\n+                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"query-es-sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"query-es-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Flow file content\",\n+                                        \"value\": \"Flow file content\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Flow file attributes\",\n+                                        \"value\": \"Flow file attributes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n+                                \"defaultValue\": \"Flow file content\",\n+                                \"description\": \"Indicates where the results should be placed.  In the case of 'Flow file content', the JSON response will be written as the content of the flow file.  In the case of 'Flow file attributes', the original flow file (if applicable) will be cloned for each result, and all return fields will be placed in a flow file attribute of the same name, but prefixed by 'es.result.'\",\n+                                \"displayName\": \"Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n+                                \"name\": \"query-es-target\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Topic\": {\n-                                \"description\": \"The topic to publish the message to.\",\n-                                \"displayName\": \"Topic\",\n+                            \"query-es-type\": {\n+                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n+                                \"name\": \"query-es-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"routing-query-info-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Always route Query Info\",\n+                                        \"displayName\": \"Always\",\n+                                        \"value\": \"ALWAYS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Never route Query Info\",\n+                                        \"displayName\": \"Never\",\n+                                        \"value\": \"NEVER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Route Query Info if the Query returns no hits\",\n+                                        \"displayName\": \"No Hits\",\n+                                        \"value\": \"NOHIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always append Query Info as attributes, using the existing relationships (does not add the Query Info relationship).\",\n+                                        \"displayName\": \"Append as Attributes\",\n+                                        \"value\": \"APPEND_AS_ATTRIBUTES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NEVER\",\n+                                \"description\": \"Specifies when to generate and route Query Info after a successful query\",\n+                                \"displayName\": \"Routing Strategy for Query Info\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"routing-query-info-strategy\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"publish\"\n+                            \"elasticsearch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"query\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n-                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hubspot-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.QueryElasticsearchHttp\",\n+                        \"typeDescription\": \"Queries Elasticsearch using the specified connection properties. Note that the full body of each page of documents will be read into memory before being written to Flow Files for transfer.  Also note that the Elasticsearch max_result_window index setting is the upper bound on the number of records that can be retrieved using this query.  To retrieve more records, use the ScrollElasticsearchHttp processor.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits for a query\",\n+                                \"name\": \"es.query.hitcount\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch document identifier\",\n+                                \"name\": \"es.id\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch query that was built\",\n+                                \"name\": \"es.query.url\"\n+                            },\n+                            {\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n+                            },\n+                            {\n+                                \"description\": \"If Target is 'Flow file attributes', the JSON attributes of each result will be placed into corresponding attributes with this prefix.\",\n+                                \"name\": \"es.result.*\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hubspot-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"10 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A URL query parameter\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n-                                \"displayName\": \"Incremental Delay\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Elasticsearch cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-delay\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"elasticsearch-http-connect-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n+                            \"elasticsearch-http-proxy-host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-initial-start-time\",\n+                                \"name\": \"elasticsearch-http-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"is-incremental\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n-                                \"displayName\": \"Incremental Loading\",\n+                            \"elasticsearch-http-proxy-port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"object-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n-                                        \"displayName\": \"Companies\",\n-                                        \"value\": \"/crm/v3/objects/companies\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n-                                        \"displayName\": \"Contacts\",\n-                                        \"value\": \"/crm/v3/objects/contacts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n-                                        \"displayName\": \"Deals\",\n-                                        \"value\": \"/crm/v3/objects/deals\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n-                                        \"displayName\": \"Line Items\",\n-                                        \"value\": \"/crm/v3/objects/line_items\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"/crm/v3/objects/products\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/crm/v3/objects/tickets\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n-                                        \"displayName\": \"Quotes\",\n-                                        \"value\": \"/crm/v3/objects/quotes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n-                                        \"displayName\": \"Calls\",\n-                                        \"value\": \"/crm/v3/objects/calls\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get emails on CRM records.\",\n-                                        \"displayName\": \"Emails\",\n-                                        \"value\": \"/crm/v3/objects/emails\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get meetings on CRM records.\",\n-                                        \"displayName\": \"Meetings\",\n-                                        \"value\": \"/crm/v3/objects/meetings\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get notes on CRM records.\",\n-                                        \"displayName\": \"Notes\",\n-                                        \"value\": \"/crm/v3/objects/notes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get tasks on CRM records.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"/crm/v3/objects/tasks\"\n-                                    }\n-                                ],\n-                                \"description\": \"The HubSpot Object Type requested\",\n-                                \"displayName\": \"Object Type\",\n+                            \"elasticsearch-http-response-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n+                                \"displayName\": \"Response Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"elasticsearch-http-response-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n+                            \"elasticsearch-http-url\": {\n+                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n+                                \"displayName\": \"Elasticsearch URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"result-limit\",\n-                                \"required\": false,\n+                                \"name\": \"elasticsearch-http-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"hubspot\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n-                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-workday-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-workday-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            },\n+                            \"proxy-password\": {\n+                                \"description\": \"Proxy Password\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-username\": {\n+                                \"description\": \"Proxy Username\",\n+                                \"displayName\": \"Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scroll-es-fields\": {\n+                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n+                                \"displayName\": \"Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scroll-es-index\": {\n+                                \"description\": \"The name of the index to read from. If the property is set to _all, the query will match across all indexes.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-index\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Workday Password\": {\n-                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Password\",\n+                            \"scroll-es-query\": {\n+                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Password\",\n+                                \"name\": \"scroll-es-query\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Workday Report URL\": {\n-                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n-                                \"displayName\": \"Workday Report URL\",\n+                            \"scroll-es-scroll\": {\n+                                \"defaultValue\": \"1m\",\n+                                \"description\": \"The scroll duration is how long each search context is kept in memory.\",\n+                                \"displayName\": \"Scroll Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Report URL\",\n+                                \"name\": \"scroll-es-scroll\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Workday Username\": {\n-                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Username\",\n+                            \"scroll-es-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n+                                \"displayName\": \"Page Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Workday Username\",\n+                                \"name\": \"scroll-es-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"scroll-es-sort\": {\n+                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-sort\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"scroll-es-type\": {\n+                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scroll-es-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After each successful scroll page, the latest scroll_id is persisted in scrollId as input for the next scroll call.  Once the entire query is complete, finishedQuery state will be set to true, and the processor will not execute unless this is cleared.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Workday\",\n-                            \"report\"\n+                            \"elasticsearch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n-                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.ScrollElasticsearchHttp\",\n+                        \"typeDescription\": \"Scrolls through an Elasticsearch query using the specified connection properties. This processor is intended to be run on the primary node, and is designed for scrolling through huge result sets, as in the case of a reindex.  The state must be cleared before another query can be run.  Each page of results is returned, wrapped in a JSON object like so: { \\\"hits\\\" : [ <doc1>, <doc2>, <docn> ] }.  Note that the full body of each page of documents will be read into memory before being written to a Flow File for transfer.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.class\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"es.index\"\n                             },\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"es.type\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-prometheus-nar\",\n+            \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hashicorp-vault-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A Spring Vault configuration property name\",\n+                                \"value\": \"The property value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n+                            \"configuration-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n+                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n+                                        \"displayName\": \"Direct Properties\",\n+                                        \"value\": \"direct-properties\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n+                                        \"displayName\": \"Properties Files\",\n+                                        \"value\": \"properties-files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"direct-properties\",\n+                                \"description\": \"Specifies the source of the configuration properties.\",\n+                                \"displayName\": \"Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOKEN\",\n+                                        \"value\": \"TOKEN\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPID\",\n+                                        \"value\": \"APPID\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPROLE\",\n+                                        \"value\": \"APPROLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AWS_EC2\",\n+                                        \"value\": \"AWS_EC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AZURE\",\n+                                        \"value\": \"AZURE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CERT\",\n+                                        \"value\": \"CERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CUBBYHOLE\",\n+                                        \"value\": \"CUBBYHOLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KUBERNETES\",\n+                                        \"value\": \"KUBERNETES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"TOKEN\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n+                                \"displayName\": \"Vault Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n+                                \"name\": \"vault.authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"vault.connection.timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n+                            \"vault.properties.files\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"properties-files\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n+                                \"displayName\": \"Vault Properties Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.properties.files\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.read.timeout\": {\n+                                \"defaultValue\": \"15 sec\",\n+                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.read.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                            \"vault.ssl.context.service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"name\": \"vault.ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"vault.uri\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n+                                \"displayName\": \"Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"vault.uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"prometheus\",\n-                            \"record\",\n-                            \"send\",\n-                            \"write\"\n+                            \"client\",\n+                            \"hashicorp\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n-                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n+                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"processors\": [],\n-                \"reportingTasks\": [\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hwx-schema-registry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"artifact\": \"nifi-hwx-schema-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"60 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This controller service is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n-                                    },\n+                            \"basic-auth-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n-                                    },\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"basic-auth-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"description\": \"The username to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n+                                \"displayName\": \"Basic Authentication Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n-                                \"required\": true,\n+                                \"name\": \"basic-auth-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Hortonworks Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Hortonworks Schema Registry\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-send-jvm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n-                                \"displayName\": \"Send JVM metrics\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"prometheus-reporting-task-metrics-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Send rollup metrics for the entire root process group\",\n-                                        \"displayName\": \"Root Process Group\",\n-                                        \"value\": \"Root Process Group\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each process group\",\n-                                        \"displayName\": \"All Process Groups\",\n-                                        \"value\": \"All Process Groups\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n-                                        \"displayName\": \"All Components\",\n-                                        \"value\": \"All Components\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"All Components\",\n-                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n-                                \"displayName\": \"Metrics Reporting Strategy\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password for the kerberos principal when not using the kerberos credentials service\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The kerberos principal to authenticate with when not using the kerberos credentials service\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies the SSL Context Service to use for communicating with Schema Registry.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"url\": {\n+                                \"description\": \"URL of the schema registry that this Controller Service should connect to, including version. For example, http://localhost:9090/api/v1\",\n+                                \"displayName\": \"Schema Registry URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"1.22.0\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"prometheus\",\n-                            \"reporting\",\n-                            \"time series data\"\n+                            \"avro\",\n+                            \"hortonworks\",\n+                            \"hwx\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n-                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n+                        \"type\": \"org.apache.nifi.schemaregistry.hortonworks.HortonworksSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry Service that interacts with a Hortonworks Schema Registry, available at https://github.com/hortonworks/registry\",\n                         \"version\": \"1.22.0\"\n                     }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n+                ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-avro-nar\",\n+            \"artifact\": \"nifi-websocket-processors-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -5569,114 +4194,117 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Avro schema\": {\n-                                \"description\": \"If the Avro records do not contain the schema (datum only), it must be specified here.\",\n-                                \"displayName\": \"Avro schema\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Avro schema\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"JSON container options\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"array\",\n-                                        \"value\": \"array\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"array\",\n-                                \"description\": \"Determines how stream of records is exposed: either as a sequence of single Objects (none) (i.e. writing every Object to a new line), or as an array of Objects (array).\",\n-                                \"displayName\": \"JSON container options\",\n+                            \"websocket-client-controller-service\": {\n+                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n+                                \"displayName\": \"WebSocket Client ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON container options\",\n+                                \"name\": \"websocket-client-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Wrap Single Record\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines if the resulting output for empty records or a single record should be wrapped in a container array as specified by 'JSON container options'\",\n-                                \"displayName\": \"Wrap Single Record\",\n+                            \"websocket-client-id\": {\n+                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n+                                \"displayName\": \"WebSocket Client Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Wrap Single Record\",\n+                                \"name\": \"websocket-client-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been converted to JSON\",\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or cannot be converted to JSON for any reason\",\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"json\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.ConvertAvroToJSON\",\n-                        \"typeDescription\": \"Converts a Binary Avro record into a JSON object. This processor provides a direct mapping of an Avro field to a JSON field, such that the resulting JSON will have the same hierarchical structure as the Avro document. Note that the Avro schema information will be lost, as this is not a translation from binary Avro to JSON formatted Avro. The output JSON is encoded the UTF-8 encoding. If an incoming FlowFile contains a stream of multiple Avro records, the resultant FlowFile will contain a JSON Array containing all of the Avro records or a sequence of JSON Objects.  If an incoming FlowFile does not contain any records, an empty JSON object is the output. Empty/Single Avro record FlowFile inputs are optionally wrapped in a container as dictated by 'Wrap Single Record'\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime type to application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n+                            },\n+                            {\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -5685,131 +4313,109 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Count Items\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n-                                \"displayName\": \"Count Items\",\n+                            \"server-url-path\": {\n+                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n+                                \"displayName\": \"Server URL Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Count Items\",\n+                                \"name\": \"server-url-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fingerprint Algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CRC-64-AVRO\",\n-                                        \"value\": \"CRC-64-AVRO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"CRC-64-AVRO\",\n-                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n-                                \"displayName\": \"Fingerprint Algorithm\",\n+                            \"websocket-server-controller-service\": {\n+                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n+                                \"displayName\": \"WebSocket Server ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fingerprint Algorithm\",\n+                                \"name\": \"websocket-server-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Metadata Keys\": {\n-                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n-                                \"displayName\": \"Metadata Keys\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Metadata Keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"metadata\",\n-                            \"schema\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n-                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n-                                \"name\": \"schema.type\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n-                                \"name\": \"schema.name\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n-                                \"name\": \"schema.fingerprint\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n-                                \"name\": \"item.count\"\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -5821,2795 +4427,2399 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Output Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n-                                \"displayName\": \"Output Size\",\n+                            \"websocket-controller-service-id\": {\n+                                \"defaultValue\": \"${websocket.controller.service.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket ControllerService Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-controller-service-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Avro's object container file format\",\n-                                        \"displayName\": \"Datafile\",\n-                                        \"value\": \"Datafile\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bare Avro records\",\n-                                        \"displayName\": \"Bare Record\",\n-                                        \"value\": \"Bare Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Datafile\",\n-                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n-                                \"displayName\": \"Output Strategy\",\n+                            \"websocket-endpoint-id\": {\n+                                \"defaultValue\": \"${websocket.endpoint.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket Endpoint Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-endpoint-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Split Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Split at Record boundaries\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Record\",\n-                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n-                                \"displayName\": \"Split Strategy\",\n+                            \"websocket-message-type\": {\n+                                \"defaultValue\": \"TEXT\",\n+                                \"description\": \"The type of message content: TEXT or BINARY\",\n+                                \"displayName\": \"WebSocket Message Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-message-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Metadata\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n-                                \"displayName\": \"Transfer Metadata\",\n+                            \"websocket-session-id\": {\n+                                \"defaultValue\": \"${websocket.session.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n+                                \"displayName\": \"WebSocket Session Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Metadata\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"websocket-session-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"split\"\n+                            \"WebSocket\",\n+                            \"publish\",\n+                            \"send\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n-                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n+                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"Detail of the failure.\",\n+                                \"name\": \"websocket.failure.detail\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"artifact\": \"nifi-dropbox-services-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-lookup-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"CSV Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"file\": {\n-                                \"defaultValue\": \"${dropbox.id}\",\n-                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n-                                \"displayName\": \"File\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"dropbox\",\n-                            \"fetch\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n+                                \"defaultValue\": \"MINIMAL\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Quote Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Trim Fields\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n-                                \"displayName\": \"Folder\",\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"csv-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"ignore-duplicates\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"ignore-duplicates\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"recursive-search\": {\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"character-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"distributed-map-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-map-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"map\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n+                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n+                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"configuration-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"properties\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n+                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"*\",\n+                                \"value\": \"*\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"8 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"rest-lookup-basic-auth-password\": {\n+                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"rest-lookup-basic-auth-username\": {\n+                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n+                                \"displayName\": \"Basic Authentication Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-basic-auth-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"150 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"rest-lookup-connection-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for connection to remote service.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n+                                \"name\": \"rest-lookup-connection-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"rest-lookup-digest-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n+                                \"displayName\": \"Use Digest Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"rest-lookup-digest-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"rest-lookup-read-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from remote service.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"name\": \"rest-lookup-read-timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The full name of the file to upload.\",\n-                                \"displayName\": \"Filename\",\n+                            \"rest-lookup-record-path\": {\n+                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n+                                \"displayName\": \"Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"rest-lookup-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n-                                \"displayName\": \"Folder\",\n+                            \"rest-lookup-record-reader\": {\n+                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"rest-lookup-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"rest-lookup-ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"rest-lookup-url\": {\n+                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rest-lookup-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"http\",\n+                            \"json\",\n+                            \"lookup\",\n+                            \"rest\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n-                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-couchbase-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-rethinkdb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n+                        \"typeDescription\": \"Use a REST service to look up values.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n+                            \"CSV Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CSV Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n-                                \"required\": true,\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-document-identifier\": {\n-                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n-                                \"displayName\": \"Document Identifier\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-document-identifier\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-durability\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Save change to disk before ack\",\n-                                        \"displayName\": \"Hard\",\n-                                        \"value\": \"hard\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Don't save changes to disk before ack\",\n-                                        \"displayName\": \"Soft\",\n-                                        \"value\": \"soft\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"hard\",\n-                                \"description\": \"Durability of documents being inserted\",\n-                                \"displayName\": \"Durablity of documents\",\n+                                \"defaultValue\": \"MINIMAL\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-durability\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"csv-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-return-result\": {\n+                            \"ignore-duplicates\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Return changed document\",\n-                                        \"displayName\": \"True\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not return changed document\",\n-                                        \"displayName\": \"False\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Return old value which were deleted\",\n-                                \"displayName\": \"Return deleted value\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-return-result\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ignore-duplicates\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n+                            \"lookup-value-column\": {\n+                                \"description\": \"Lookup value column.\",\n+                                \"displayName\": \"Lookup Value Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-value-column\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Document not found are routed to this relationship\",\n-                                \"name\": \"not_found\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"remove\",\n-                            \"rethinkdb\"\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                        \"typeDescription\": \"Processor to remove a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error count while delete documents\",\n-                                \"name\": \"rethinkdb.delete.errors\"\n-                            },\n+                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Number of documents deleted\",\n-                                \"name\": \"rethinkdb.delete.deleted\"\n-                            },\n+                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A key that can be looked up\",\n+                                \"value\": \"The value for the key\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Number of documents inserted\",\n-                                \"name\": \"rethinkdb.delete.inserted\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Number of documents replaced\",\n-                                \"name\": \"rethinkdb.delete.replaced\"\n-                            },\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"configuration-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Number of documents skipped\",\n-                                \"name\": \"rethinkdb.delete.skipped\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Number of documents unchanged since they already existed\",\n-                                \"name\": \"rethinkdb.delete.unchanged\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\",\n+                            \"xml\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n+                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-document-identifier\": {\n-                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n-                                \"displayName\": \"Document Identifier\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-document-identifier\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-max-document-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n-                                \"displayName\": \"Max size of documents\",\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-max-document-size\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-read-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Read values from memory from primary replica (Default)\",\n-                                        \"displayName\": \"Single\",\n-                                        \"value\": \"single\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Read values committed to disk on majority of replicas\",\n-                                        \"displayName\": \"Majority\",\n-                                        \"value\": \"majority\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Read values from memory from an arbitrary replica \",\n-                                        \"displayName\": \"Outdated\",\n-                                        \"value\": \"outdated\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"Read mode used for consistency\",\n-                                \"displayName\": \"Read Mode\",\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-read-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n+                            \"dbrecord-lookup-value-columns\": {\n+                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Value Columns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-value-columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Document not found are routed to this relationship\",\n-                                \"name\": \"not_found\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"read\",\n-                            \"rethinkdb\"\n+                            \"cache\",\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n-                        \"typeDescription\": \"Processor to get a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id. The FlowFile will contain the retrieved document\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"rethinkdb-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-conflict-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Update the document having same id with new values\",\n-                                        \"displayName\": \"Update\",\n-                                        \"value\": \"update\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Replace the document with having same id new document\",\n-                                        \"displayName\": \"Replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Return error if the document with same id exists\",\n-                                        \"displayName\": \"Error\",\n-                                        \"value\": \"error\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"update\",\n-                                \"description\": \"Conflict strategy to be used in case of inserting existing document.\",\n-                                \"displayName\": \"Conflict strategy\",\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-conflict-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-dbname\": {\n-                                \"description\": \"RethinkDB database to connect to\",\n-                                \"displayName\": \"DB Name\",\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-dbname\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-durability\": {\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Save change to disk before ack\",\n-                                        \"displayName\": \"Hard\",\n-                                        \"value\": \"hard\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Don't save changes to disk before ack\",\n-                                        \"displayName\": \"Soft\",\n-                                        \"value\": \"soft\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"hard\",\n-                                \"description\": \"Durability of documents being inserted\",\n-                                \"displayName\": \"Durablity of documents\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rethinkdb-durability\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"RethinkDB hostname\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-max-document-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n-                                \"displayName\": \"Max size of documents\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-max-document-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-password\": {\n-                                \"description\": \"Password for user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"rethinkdb-port\": {\n-                                \"defaultValue\": \"28015\",\n-                                \"description\": \"RethinkDB database port to connect to\",\n-                                \"displayName\": \"DB Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rethinkdb-table\": {\n-                                \"description\": \"RethinkDB table to connect to\",\n-                                \"displayName\": \"Table name\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-table\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rethinkdb-username\": {\n-                                \"description\": \"Username for accessing RethinkDB\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rethinkdb-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n-                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"insert\",\n-                            \"put\",\n-                            \"rethinkdb\",\n-                            \"stream\",\n-                            \"update\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\",\n-                        \"typeDescription\": \"Processor to write the JSON content of a FlowFile to RethinkDB (https://www.rethinkdb.com/). The flow file should contain either JSON Object an array of JSON documents\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"RethinkDB error message\",\n-                                \"name\": \"rethinkdb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error count while inserting documents\",\n-                                \"name\": \"rethinkdb.insert.errors\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents deleted\",\n-                                \"name\": \"rethinkdb.insert.deleted\"\n-                            },\n-                            {\n-                                \"description\": \"Keys generated on inserting documents\",\n-                                \"name\": \"rethinkdb.insert.generated_keys\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents inserted\",\n-                                \"name\": \"rethinkdb.insert.inserted\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents replaced\",\n-                                \"name\": \"rethinkdb.insert.replaced\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents skipped because they already existed\",\n-                                \"name\": \"rethinkdb.insert.skipped\"\n-                            },\n-                            {\n-                                \"description\": \"Number of documents unchanged since they already existed\",\n-                                \"name\": \"rethinkdb.insert.unchanged\"\n-                            },\n-                            {\n-                                \"description\": \"First error while inserting documents\",\n-                                \"name\": \"rethinkdb.insert.first_error\"\n-                            },\n-                            {\n-                                \"description\": \"Warning message in case of large number of ids being returned on insertion\",\n-                                \"name\": \"rethinkdb.insert.warnings\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hazelcast-cache-manager\": {\n-                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n-                                \"displayName\": \"Hazelcast Cache Manager\",\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-cache-manager\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"hazelcast-cache-name\": {\n-                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n-                                \"displayName\": \"Hazelcast Cache Name\",\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cache-name\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-entry-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down.\",\n-                                \"displayName\": \"Hazelcast Entry Lifetime\",\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-entry-ttl\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-value-column\": {\n+                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n+                                \"displayName\": \"Lookup Value Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-value-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                 \"version\": \"1.22.0\"\n                             },\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"hazelcast\",\n-                            \"map\"\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n+                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n+                            \"database-file\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cluster-name\",\n+                                \"name\": \"database-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-clustering-strategy\": {\n+                            \"lookup-anonymous-ip\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n-                                        \"displayName\": \"All Nodes\",\n-                                        \"value\": \"all_nodes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n-                                        \"displayName\": \"Explicit\",\n-                                        \"value\": \"explicit\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n-                                \"displayName\": \"Hazelcast Clustering Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n+                                \"displayName\": \"Lookup Anonymous IP Information\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-clustering-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-instances\": {\n-                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n-                                \"displayName\": \"Hazelcast Instances\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-instances\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-port\": {\n-                                \"defaultValue\": \"5701\",\n-                                \"description\": \"Port for the Hazelcast instance to use.\",\n-                                \"displayName\": \"Hazelcast Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-cluster-name\",\n+                                \"name\": \"lookup-anonymous-ip\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-connection-timeout\": {\n-                                \"defaultValue\": \"20 secs\",\n-                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n-                                \"displayName\": \"Hazelcast Connection Timeout\",\n+                            \"lookup-city\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup Geo Enrichment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-connection-timeout\",\n+                                \"name\": \"lookup-city\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-initial\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n-                                \"displayName\": \"Hazelcast Initial Backoff\",\n+                            \"lookup-connection-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n+                                \"displayName\": \"Lookup Connection Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-initial\",\n+                                \"name\": \"lookup-connection-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-maximum\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Maximum Backoff\",\n+                            \"lookup-domain\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n+                                \"displayName\": \"Lookup Domain Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-maximum\",\n+                                \"name\": \"lookup-domain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-multiplier\": {\n-                                \"defaultValue\": \"1.5\",\n-                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n+                            \"lookup-isp\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup ISP\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-server-address\": {\n-                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n-                                \"displayName\": \"Hazelcast Server Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hazelcast-server-address\",\n+                                \"name\": \"lookup-isp\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n+                            \"anonymous\",\n+                            \"cellular\",\n+                            \"domain\",\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"ipgeo\",\n+                            \"isp\",\n+                            \"lookup\",\n+                            \"maxmind\",\n+                            \"tor\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n+                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-asana-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"artifact\": \"nifi-poi-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-proxy-configuration-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-proxy-configuration-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"proxy-server-host\": {\n-                                \"description\": \"Proxy server hostname or ip-address.\",\n-                                \"displayName\": \"Proxy Server Host\",\n+                            \"CSV Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-server-host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CSV Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-server-port\": {\n-                                \"description\": \"Proxy server port number.\",\n-                                \"displayName\": \"Proxy Server Port\",\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-server-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-type\": {\n-                                \"allowableValues\": [\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Include Header Line\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type.\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n+                                \"displayName\": \"Include Header Line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-type\",\n+                                \"name\": \"Include Header Line\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-user-name\": {\n-                                \"description\": \"The name of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-user-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-user-password\": {\n-                                \"description\": \"The password of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"socks-version\": {\n+                            \"Include Trailing Delimiter\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS4\",\n-                                        \"value\": \"SOCKS4\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS5\",\n-                                        \"value\": \"SOCKS5\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SOCKS5\",\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SOCKS\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Proxy Type\",\n-                                        \"propertyName\": \"proxy-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"SOCKS Protocol Version\",\n-                                \"displayName\": \"SOCKS Version\",\n+                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n+                                \"displayName\": \"Include Trailing Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socks-version\",\n+                                \"name\": \"Include Trailing Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Proxy\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n-                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-scripting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Null String\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Null String\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lookup\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. Please note, that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Record Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Trim Fields\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lookup\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf. Please note that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"excel-extract-column-to-skip\": {\n+                                \"description\": \"Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.\",\n+                                \"displayName\": \"Columns To Skip\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"excel-extract-column-to-skip\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"excel-extract-first-row\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.\",\n+                                \"displayName\": \"Number of Rows to Skip\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"excel-extract-first-row\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"excel-format-values\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Should the cell values be written to CSV using the formatting applied in Excel, or should they be printed as raw values.\",\n+                                \"displayName\": \"Format Cell Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"excel-format-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"extract-sheets\": {\n+                                \"description\": \"Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. The list of names is case in-sensitive. Any sheets not specified in this value will be ignored. A bulletin will be generated if a specified sheet(s) are not found.\",\n+                                \"displayName\": \"Sheets to Extract\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"extract-sheets\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Original Excel document received by this processor\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Excel data converted to csv\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Failed to parse the Excel document\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"recordFactory\",\n-                            \"ruby\",\n-                            \"script\"\n+                            \"csv\",\n+                            \"excel\",\n+                            \"poi\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.poi.ConvertExcelToCSVProcessor\",\n+                        \"typeDescription\": \"Consumes a Microsoft Excel document and converts each worksheet to csv. Each sheet from the incoming Excel document will generate a new Flowfile that will be output from this processor. Each output Flowfile's contents will be formatted as a csv file where the each row from the excel sheet is output as a newline in the csv file. This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents. This processor also expects well formatted CSV content and will not escape cell's containing invalid content such as newlines or additional commas.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Excel sheet that this particular row of data came from in the Excel document\",\n+                                \"name\": \"sheetname\"\n+                            },\n+                            {\n+                                \"description\": \"The number of rows in this Excel Sheet\",\n+                                \"name\": \"numrows\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Excel document file that this data originated from\",\n+                                \"name\": \"sourcefilename\"\n+                            },\n+                            {\n+                                \"description\": \"Error message that was encountered on a per Excel sheet basis. This attribute is only populated if an error was occured while processing the particular sheet. Having the error present at the sheet level will allow for the end user to better understand what syntax errors in their excel doc on a larger scale caused the error.\",\n+                                \"name\": \"convertexceltocsvprocessor.error\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ranger-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-1-0-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"ruby\",\n-                            \"script\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"record\",\n-                            \"record sink\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.rules.engine.RulesEngineService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"rules\",\n-                            \"rules engine\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.rules.engine.script.ScriptedRulesEngine\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RulesEngineService for custom firing of rules depending on the supplied facts. The script must set a variable 'rulesEngine' to an implementation of RulesEngineService.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.rules.PropertyContextActionHandler\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"action\",\n-                            \"action handler\",\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"rules\",\n-                            \"rules engine\",\n-                            \"script\"\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n-                        \"type\": \"org.apache.nifi.rules.handlers.script.ScriptedActionHandler\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted ActionHandler for custom firing of rules depending on the supplied facts. The script must set a variable 'actionHandler' to an implementation of ActionHandler.\",\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_1_0\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 1.x topic.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -8617,2015 +6827,2539 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n                         ],\n-                        \"explicitRestrictions\": [\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"lua 5.2 [Luaj Luaj-jse 3.0.1]\",\n-                                        \"displayName\": \"lua DEPRECATED\",\n-                                        \"value\": \"lua\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Clojure\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"clojure\",\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n-                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"ruby\",\n-                            \"script\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n-                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\"\n+                            \"1.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_1_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"group\",\n-                            \"jython\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"1.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_1_0.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n-                                \"name\": \"partition\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-key-field\": {\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-key-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-transactions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ExecuteScript\",\n-                            \"org.apache.nifi.processors.standard.LookupRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"modify\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"transform\",\n-                            \"update\"\n+                            \"1.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 1.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_1_0.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kafka-1-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ECMAScript\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lua\",\n-                                        \"value\": \"lua\"\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ruby\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"valid\"\n                             },\n-                            {\n-                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"invalid\"\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"jython\",\n-                            \"python\",\n-                            \"record\",\n-                            \"script\",\n-                            \"validate\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_362-b09]\",\n-                                        \"displayName\": \"ECMAScript DEPRECATED\",\n-                                        \"value\": \"ECMAScript\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n-                                        \"displayName\": \"python\",\n-                                        \"value\": \"python\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n-                                        \"displayName\": \"ruby DEPRECATED\",\n-                                        \"value\": \"ruby\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ECMAScript\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Script File\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-transactions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"javascript\",\n-                            \"jruby\",\n-                            \"js\",\n-                            \"jython\",\n-                            \"lua\",\n-                            \"luaj\",\n-                            \"python\",\n-                            \"reporting\",\n-                            \"ruby\",\n-                            \"script\"\n+                            \"1.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n-                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 1.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_1_0.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n                     }\n-                ]\n+                ],\n+                \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-http-context-map-nar\",\n+            \"artifact\": \"nifi-key-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-http-context-map-nar\",\n+                        \"artifact\": \"nifi-key-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Maximum Outstanding Requests\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n-                                \"displayName\": \"Maximum Outstanding Requests\",\n+                            \"key\": {\n+                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Outstanding Requests\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Request Expiration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n-                                \"displayName\": \"Request Expiration\",\n+                            \"key-file\": {\n+                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"key-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            },\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n-                        ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"request\",\n-                            \"response\"\n+                            \"PEM\",\n+                            \"PKCS8\"\n                         ],\n-                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n-                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n+                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n+                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-compress-nar\",\n+            \"artifact\": \"nifi-hadoop-libraries-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kudu-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-compress-nar\",\n+                        \"artifact\": \"nifi-kudu-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Input Compression Strategy\": {\n+                            \"kudu-lu-kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kudu-lu-kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kudu-lu-masters\": {\n+                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n+                                \"displayName\": \"Kudu Masters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-masters\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-operations-timeout-ms\": {\n+                                \"defaultValue\": \"30000ms\",\n+                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n+                                \"displayName\": \"Kudu Operation Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-operations-timeout-ms\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-replica-selection\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"description\": \"Select the closest replica to the client. Replicas are classified from closest to furthest as follows: 1) Local replicas 2) Replicas whose tablet server has the same location as the client 3) All other replicas\",\n+                                        \"displayName\": \"CLOSEST_REPLICA\",\n+                                        \"value\": \"CLOSEST_REPLICA\"\n                                     },\n                                     {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"Select the LEADER replica\",\n+                                        \"displayName\": \"LEADER_ONLY\",\n+                                        \"value\": \"LEADER_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n-                                \"displayName\": \"Input Compression Strategy\",\n+                                \"defaultValue\": \"CLOSEST_REPLICA\",\n+                                \"description\": \"Policy with which to choose amongst multiple replicas\",\n+                                \"displayName\": \"Kudu Replica Selection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Compression Strategy\",\n+                                \"name\": \"kudu-lu-replica-selection\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Compression Level\": {\n+                            \"kudu-lu-return-cols\": {\n+                                \"defaultValue\": \"*\",\n+                                \"description\": \"A comma-separated list of columns to return when scanning. To return all columns set to \\\"*\\\"\",\n+                                \"displayName\": \"Kudu Return Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-return-cols\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-lu-table-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Name of the table to access.\",\n+                                \"displayName\": \"Kudu Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-lu-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"key\",\n+                            \"kudu\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.kudu.KuduLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Kudu Server associated with the specified key. Binary columns are base64 encoded. Only one matched row will be returned\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kudu-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of Records to process in a single Kudu-client batch, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size. Gradually increase this number to find out the best one for best performances.\",\n+                                \"displayName\": \"Max Records per Batch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data RecordPath\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Kudu instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to Kudu.\",\n+                                \"displayName\": \"Data RecordPath\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data RecordPath\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"description\": \"The FlowFile containing the Records that failed to insert will be routed to the 'failure' relationship\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"route-to-failure\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n-                                        \"propertyName\": \"Output Compression Strategy\"\n+                                        \"description\": \"If any Record cannot be inserted, all FlowFiles in the session will be rolled back to their input queue. This means that if data cannot be pushed, it will block any subsequent data from be pushed to Kudu as well until the issue is resolved. However, this may be advantageous if a strict ordering is required.\",\n+                                        \"displayName\": \"Rollback Session\",\n+                                        \"value\": \"rollback\"\n                                     }\n                                 ],\n-                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n-                                \"displayName\": \"Output Compression Level\",\n+                                \"defaultValue\": \"route-to-failure\",\n+                                \"description\": \"If one or more Records in a batch cannot be transferred to Kudu, specifies how to handle the failure\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Level\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Compression Strategy\": {\n+                            \"FlowFiles per Batch\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of FlowFiles to process in a single execution, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size for the number of FlowFiles to process per client connection setup.Gradually increase this number, only if your FlowFiles typically contain a few records.\",\n+                                \"displayName\": \"FlowFiles per Batch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"FlowFiles per Batch\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Flush Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Hadoop\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO_FLUSH_SYNC\",\n+                                        \"value\": \"AUTO_FLUSH_SYNC\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO_FLUSH_BACKGROUND\",\n+                                        \"value\": \"AUTO_FLUSH_BACKGROUND\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MANUAL_FLUSH\",\n+                                        \"value\": \"MANUAL_FLUSH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n-                                \"displayName\": \"Output Compression Strategy\",\n+                                \"defaultValue\": \"AUTO_FLUSH_BACKGROUND\",\n+                                \"description\": \"Set the new flush mode for a kudu session.\\nAUTO_FLUSH_SYNC: the call returns when the operation is persisted, else it throws an exception.\\nAUTO_FLUSH_BACKGROUND: the call returns when the operation has been added to the buffer. This call should normally perform only fast in-memory operations but it may have to wait when the buffer is full and there's another buffer being flushed.\\nMANUAL_FLUSH: the call returns when the operation has been added to the buffer, else it throws a KuduException if the buffer is full.\",\n+                                \"displayName\": \"Flush Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Strategy\",\n+                                \"name\": \"Flush Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Filename Strategy\": {\n+                            \"Handle Schema Drift\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, when fields with names that are not in the target Kudu table are encountered, the Kudu table will be altered to include new columns for those fields.\",\n+                                \"displayName\": \"Handle Schema Drift\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Handle Schema Drift\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore NULL\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Ignore NULL on Kudu Put Operation, Update only non-Null columns if set true\",\n+                                \"displayName\": \"Ignore NULL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Ignore NULL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Insert Operation\": {\n+                                \"defaultValue\": \"INSERT\",\n+                                \"description\": \"Specify operationType for this processor.\\nValid values are: INSERT, INSERT_IGNORE, UPSERT, UPDATE, DELETE, UPDATE_IGNORE, DELETE_IGNORE. This Property will be ignored if the <Operation RecordPath> property is set.\",\n+                                \"displayName\": \"Kudu Operation Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Insert Operation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kudu Masters\": {\n+                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n+                                \"displayName\": \"Kudu Masters\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kudu Masters\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Lowercase Field Names\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Convert column names to lowercase when finding index of Kudu table columns\",\n+                                \"displayName\": \"Lowercase Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Lowercase Field Names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Operation RecordPath\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record in order to determine the Kudu Operation Type. When evaluated, the RecordPath must evaluate to one of hte valid Kudu Operation Types, or the incoming FlowFile will be routed to failure. If this property is specified, the <Kudu Operation Type> property will be ignored.\",\n+                                \"displayName\": \"Operation RecordPath\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Operation RecordPath\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Skip head line\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n-                                        \"displayName\": \"Original\",\n-                                        \"value\": \"ORIGINAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n-                                        \"displayName\": \"Updated\",\n-                                        \"value\": \"UPDATED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UPDATED\",\n-                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n-                                \"displayName\": \"Output Filename Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Deprecated. Used to ignore header lines, but this should be handled by a RecordReader (e.g. \\\"Treat First Line as Header\\\" property of CSVReader)\",\n+                                \"displayName\": \"Skip head line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Filename Strategy\",\n+                                \"name\": \"Skip head line\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the Kudu Table to put data into\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kudu-keep-alive-period-timeout-ms\": {\n+                                \"defaultValue\": \"15000ms\",\n+                                \"description\": \"Default timeout used for user operations\",\n+                                \"displayName\": \"Kudu Keep Alive Period Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-keep-alive-period-timeout-ms\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-operations-timeout-ms\": {\n+                                \"defaultValue\": \"30000ms\",\n+                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n+                                \"displayName\": \"Kudu Operation Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-operations-timeout-ms\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kudu-sasl-protocol-name\": {\n+                                \"defaultValue\": \"kudu\",\n+                                \"description\": \"The SASL protocol name to use for authenticating via Kerberos. Must match the service principal name.\",\n+                                \"displayName\": \"Kudu SASL Protocol Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kudu-sasl-protocol-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading records from incoming flow files.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"worker-count\": {\n+                                \"defaultValue\": \"36\",\n+                                \"description\": \"The maximum number of worker threads handling Kudu client read and write operations. Defaults to the number of available processors.\",\n+                                \"displayName\": \"Kudu Client Worker Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"worker-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in Kudu\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to Kudu\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"recompress\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n+                            \"HDFS\",\n+                            \"NoSQL\",\n+                            \"database\",\n+                            \"kudu\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n-                        \"typeDescription\": \"Decompresses the contents of FlowFiles using a user-specified compression algorithm and recompresses the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n+                        \"type\": \"org.apache.nifi.processors.kudu.PutKudu\",\n+                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to the specified Kudu's table. The schema for the Kudu table is inferred from the schema of the Record Reader. If any error occurs while reading records from the input, or writing records to Kudu, the FlowFile will be routed to failure\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Number of records written to Kudu\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-processors-nar\",\n+            \"artifact\": \"nifi-cassandra-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-asana-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"asana-controller-service\": {\n-                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n-                                \"displayName\": \"Asana Client Service\",\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-controller-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the record data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-asana-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"asana-object-type\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"asana-collect-tasks\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Task Attachments\",\n-                                        \"value\": \"asana-collect-task-attachments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect projects of the workspace.\",\n-                                        \"displayName\": \"Projects\",\n-                                        \"value\": \"asana-collect-projects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Consistency Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect tags of the workspace.\",\n-                                        \"displayName\": \"Tags\",\n-                                        \"value\": \"asana-collect-tags\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the workspace.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"asana-collect-users\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the specified project.\",\n-                                        \"displayName\": \"Members of a Project\",\n-                                        \"value\": \"asana-collect-project-members\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect teams of the workspace.\",\n-                                        \"displayName\": \"Teams\",\n-                                        \"value\": \"asana-collect-teams\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the specified team.\",\n-                                        \"displayName\": \"Team Members\",\n-                                        \"value\": \"asana-collect-team-members\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Stories of Tasks\",\n-                                        \"value\": \"asana-collect-stories\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect status updates of the specified project.\",\n-                                        \"displayName\": \"Status Updates of a Project\",\n-                                        \"value\": \"asana-collect-project-status-updates\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect attached files of project status updates.\",\n-                                        \"displayName\": \"Attachments of Status Updates\",\n-                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n-                                        \"displayName\": \"Events of a Project\",\n-                                        \"value\": \"asana-collect-project-events\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"asana-collect-tasks\",\n-                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n-                                \"displayName\": \"Object Type\",\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-object-type\",\n-                                \"required\": true,\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-output-batch-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-output-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-project-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-project-members\",\n-                                            \"asana-collect-project-status-attachments\",\n-                                            \"asana-collect-project-status-updates\",\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\",\n-                                            \"asana-collect-project-events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n-                                \"displayName\": \"Project Name\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-project-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-section-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n-                                \"displayName\": \"Section Name\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-section-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"asana-tag-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n-                                \"displayName\": \"Tag\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-tag-name\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"asana-team-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-team-members\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Team name. Case sensitive.\",\n-                                \"displayName\": \"Team\",\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-team-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n-                                \"required\": true,\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"putcql-stmt-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of CQL Prepared Statements to cache. This can improve performance if many incoming flow files have the same CQL statement with different values for the parameters. If this property is set to zero, the cache is effectively disabled.\",\n+                                \"displayName\": \"Statement Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"putcql-stmt-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The type of each parameter is specified as a lowercase string corresponding to the Cassandra data type (text, int, boolean, e.g.). In the case of collections, the primitive type(s) of the elements in the collection should be comma-delimited, follow the collection type, and be enclosed in angle brackets (< and >), for example set<text> or map<timestamp, int>.\",\n+                                \"name\": \"cql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The value of the parameters are specified as cql.args.1.value, cql.args.2.value, cql.args.3.value, and so on. The  type of the cql.args.1.value parameter is specified by the cql.args.1.type attribute.\",\n+                                \"name\": \"cql.args.N.value\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n-                                \"name\": \"removed\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Newly collected objects are routed to this relationship.\",\n-                                \"name\": \"new\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n-                                \"name\": \"updated\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"asana\",\n-                            \"ingest\",\n-                            \"source\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"set\",\n+                            \"update\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n-                        \"typeDescription\": \"This processor collects data from Asana\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Global ID of the object in Asana.\",\n-                                \"name\": \"asana.gid\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-html-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraQL\",\n+                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) statement on a Cassandra 1.x, 2.x, or 3.0.x cluster. The content of an incoming FlowFile is expected to be the CQL command to execute. The CQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention cql.args.N.type and cql.args.N.value, where N is a positive integer. The cql.args.N.type is expected to be a lowercase string indicating the Cassandra type.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -10637,3877 +9371,4979 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Append Element Value\": {\n-                                \"description\": \"Appends the specified value to the resulting Element\",\n-                                \"displayName\": \"Append Element Value\",\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Append Element Value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Attribute Name\": {\n-                                \"description\": \"When getting the value of a HTML element attribute this value is used as the key to determine which attribute on the selected element should be retrieved. This value is used when the \\\"Output Type\\\" is set to \\\"Attribute\\\". If this value is prefixed with 'abs:', then the extracted attribute value will be converted into an absolute URL form using the specified base URL.\",\n-                                \"displayName\": \"Attribute Name\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Attribute Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n+                            \"Consistency Level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if element extracted is written as a flowfile attribute or as flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"SERIAL\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"put-cassandra-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies the number of 'Insert statements' to be grouped together to execute as a batch (BatchStatement)\",\n+                                \"displayName\": \"Batch size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-cassandra-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Type\": {\n+                            \"put-cassandra-record-batch-statement-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTML\",\n-                                        \"value\": \"HTML\"\n+                                        \"description\": \"Use a LOGGED batch statement\",\n+                                        \"displayName\": \"LOGGED\",\n+                                        \"value\": \"LOGGED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Use an UNLOGGED batch statement\",\n+                                        \"displayName\": \"UNLOGGED\",\n+                                        \"value\": \"UNLOGGED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Attribute\",\n-                                        \"value\": \"Attribute\"\n+                                        \"description\": \"Use a COUNTER batch statement\",\n+                                        \"displayName\": \"COUNTER\",\n+                                        \"value\": \"COUNTER\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Data\",\n-                                        \"value\": \"Data\"\n+                                        \"description\": \"The value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED or COUNTER) will be used to generate and execute the Update statement.\",\n+                                        \"displayName\": \"Use cql.batch.statement.type Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTML\",\n-                                \"description\": \"Controls the type of DOM value that is retrieved from the HTML element.\",\n-                                \"displayName\": \"Output Type\",\n+                                \"defaultValue\": \"LOGGED\",\n+                                \"description\": \"Specifies the type of 'Batch Statement' to be used.\",\n+                                \"displayName\": \"Batch Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Type\",\n+                                \"name\": \"put-cassandra-record-batch-statement-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-cassandra-record-reader\": {\n+                                \"description\": \"Specifies the type of Record Reader controller service to use for parsing the incoming data and determining the schema\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-cassandra-record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"put-cassandra-record-statement-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use an UPDATE statement.\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use an INSERT statement.\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n+                                        \"displayName\": \"Use cql.statement.type Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"INSERT\",\n+                                \"description\": \"Specifies the type of CQL Statement to generate.\",\n+                                \"displayName\": \"Statement Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-cassandra-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Prepend Element Value\": {\n-                                \"description\": \"Prepends the specified value to the resulting Element\",\n-                                \"displayName\": \"Prepend Element Value\",\n+                            \"put-cassandra-record-table\": {\n+                                \"description\": \"The name of the Cassandra table to which the records have to be written.\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Prepend Element Value\",\n-                                \"required\": false,\n+                                \"name\": \"put-cassandra-record-table\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"URL\": {\n-                                \"description\": \"Base URL for the HTML page being parsed. This URL will be used to resolve an absolute URL when an attribute value is extracted from a HTML element.\",\n-                                \"displayName\": \"URL\",\n+                            \"put-cassandra-record-update-keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the conversion to CQL will fail. This property is ignored if the Statement Type is not UPDATE.\",\n+                                \"displayName\": \"Update Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"name\": \"put-cassandra-record-update-keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-cassandra-record-update-method\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use an increment operation (+=) for the Update statement.\",\n+                                        \"displayName\": \"Increment\",\n+                                        \"value\": \"INCREMENT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use a decrement operation (-=) for the Update statement.\",\n+                                        \"displayName\": \"Decrement\",\n+                                        \"value\": \"DECREMENT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use a set operation (=) for the Update statement.\",\n+                                        \"displayName\": \"Set\",\n+                                        \"value\": \"SET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement.\",\n+                                        \"displayName\": \"Use cql.update.method Attribute\",\n+                                        \"value\": \"USE_ATTR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SET\",\n+                                \"description\": \"Specifies the method to use to SET the values. This property is used if the Statement Type is UPDATE and ignored otherwise.\",\n+                                \"displayName\": \"Update Method\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-cassandra-record-update-method\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.ModifyHTMLElement\",\n-                            \"org.apache.nifi.PutHTMLElement\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n+                                \"description\": \"If 'Use cql.statement.type Attribute' is selected for the Statement Type property, the value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n+                                \"name\": \"cql.statement.type\"\n                             },\n                             {\n-                                \"description\": \"Successfully parsed HTML element\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If 'Use cql.update.method Attribute' is selected for the Update Method property, the value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement. Ignored if the Statement Type property is not set to UPDATE\",\n+                                \"name\": \"cql.update.method\"\n                             },\n                             {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n+                                \"description\": \"If 'Use cql.batch.statement.type Attribute' is selected for the Batch Statement Type property, the value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED, COUNTER) will be generated and executed\",\n+                                \"name\": \"cql.batch.statement.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"get\",\n-                            \"html\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\",\n+                            \"set\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.GetHTMLElement\",\n-                        \"typeDescription\": \"Extracts HTML element values from the incoming flowfile's content using a CSS selector. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string. The result of \\\"querying\\\" the HTML DOM may produce 0-N results. If no results are found the flowfile will be transferred to the \\\"element not found\\\" relationship to indicate so to the end user. If N results are found a new flowfile will be created and emitted for each result. The query result will either be placed in the content of the new flowfile or as an attribute of the new flowfile. By default the result is written to an attribute. This can be controlled by the \\\"Destination\\\" property. Resulting query values may also have data prepended or appended to them by setting the value of property \\\"Prepend Element Value\\\" or \\\"Append Element Value\\\". Prepended and appended values are treated as string values and concatenated to the result retrieved from the HTML DOM query operation. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Flowfile attribute where the element result parsed from the HTML using the CSS selector syntax are placed if the destination is a flowfile attribute.\",\n-                                \"name\": \"HTMLElement\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraRecord\",\n+                        \"typeDescription\": \"This is a record aware processor that reads the content of the incoming FlowFile as individual records using the configured 'Record Reader' and writes them to Apache Cassandra using native protocol version 3 or higher.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n+                        \"artifact\": \"nifi-cassandra-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Name\": {\n-                                \"description\": \"When modifying the value of an element attribute this value is used as the key to determine which attribute on the selected element will be modified with the new value.\",\n-                                \"displayName\": \"Attribute Name\",\n+                            \"CQL select query\": {\n+                                \"description\": \"CQL select query\",\n+                                \"displayName\": \"CQL select query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Attribute Name\",\n+                                \"name\": \"CQL select query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cassandra Contact Points\": {\n+                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n+                                \"displayName\": \"Cassandra Contact Points\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Cassandra Contact Points\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the record data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Modified Value\": {\n-                                \"description\": \"Value to update the found HTML elements with\",\n-                                \"displayName\": \"Modified Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Modified Value\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Type\": {\n+                            \"Consistency Level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTML\",\n-                                        \"value\": \"HTML\"\n+                                        \"displayName\": \"ANY\",\n+                                        \"value\": \"ANY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Attribute\",\n-                                        \"value\": \"Attribute\"\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUORUM\",\n+                                        \"value\": \"QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ALL\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_QUORUM\",\n+                                        \"value\": \"LOCAL_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EACH_QUORUM\",\n+                                        \"value\": \"EACH_QUORUM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SERIAL\",\n+                                        \"value\": \"SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_SERIAL\",\n+                                        \"value\": \"LOCAL_SERIAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LOCAL_ONE\",\n+                                        \"value\": \"LOCAL_ONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTML\",\n-                                \"description\": \"Controls whether the HTML element is output as HTML,Text or Data\",\n-                                \"displayName\": \"Output Type\",\n+                                \"defaultValue\": \"ONE\",\n+                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n+                                \"displayName\": \"Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Type\",\n+                                \"name\": \"Consistency Level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fetch size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. Zero is the default and means there is no limit.\",\n+                                \"displayName\": \"Fetch size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.GetHTMLElement\",\n-                            \"org.apache.nifi.PutHTMLElement\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n                             },\n-                            {\n-                                \"description\": \"Successfully parsed HTML element\",\n-                                \"name\": \"success\"\n+                            \"Keyspace\": {\n+                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n+                                \"displayName\": \"Keyspace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keyspace\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n+                            \"Max Rows Per Flow File\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Rows Per Flow File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"html\",\n-                            \"modify\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.ModifyHTMLElement\",\n-                        \"typeDescription\": \"Modifies the value of an existing HTML element. The desired element to be modified is located by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the element the user desires to modify. If the HTML element is found the element's value is updated in the DOM using the value specified \\\"Modified Value\\\" property. All DOM elements that match the CSS selector will be updated. Once all of the DOM elements have been updated the DOM is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Total number of HTML element modifications made\",\n-                                \"name\": \"NumElementsModified\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-html-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"CSS Selector\": {\n-                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n-                                \"displayName\": \"CSS Selector\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CSS Selector\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Element Insert Location Type\": {\n+                            \"Output Format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"append-html\",\n-                                        \"value\": \"append-html\"\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"prepend-html\",\n-                                        \"value\": \"prepend-html\"\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"append-html\",\n-                                \"description\": \"Controls whether the new element is prepended or appended to the children of the Element located by the CSS selector. EX: prepended value '<b>Hi</b>' inside of Element (using CSS Selector 'p') '<p>There</p>' would result in '<p><b>Hi</b>There</p>'. Appending the value would result in '<p>There<b>Hi</b></p>'\",\n-                                \"displayName\": \"Element Insert Location Type\",\n+                                \"defaultValue\": \"Avro\",\n+                                \"description\": \"The format to which the result rows will be converted. If JSON is selected, the output will contain an object with field 'results' containing an array of result rows. Each row in the array is a map of the named column to its value. For example: { \\\"results\\\": [{\\\"userid\\\":1, \\\"name\\\":\\\"Joe Smith\\\"}]}\",\n+                                \"displayName\": \"Output Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Element Insert Location Type\",\n+                                \"name\": \"Output Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTML Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding of the input HTML\",\n-                                \"displayName\": \"HTML Character Encoding\",\n+                            \"Password\": {\n+                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTML Character Encoding\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to access the Cassandra cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cassandra-connection-provider\": {\n+                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n+                                \"displayName\": \"Cassandra Connection Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cassandra-connection-provider\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"qdbt-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Put Value\": {\n-                                \"description\": \"Value used when creating the new Element. Value should be a valid HTML element. The text should be supplied unencoded: characters like '<', '>', etc will be properly HTML encoded in the resulting output.\",\n-                                \"displayName\": \"Put Value\",\n+                            \"timestamp-format-pattern\": {\n+                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ssZ\",\n+                                \"description\": \"Pattern to use when converting timestamp fields to JSON. Note: the formatted timestamp will be in UTC timezone.\",\n+                                \"displayName\": \"Timestamp Format Pattern for JSON output\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"timestamp-format-pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.GetHTMLElement\",\n-                            \"org.apache.nifi.ModifyHTMLElement\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n-                                \"name\": \"element not found\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Successfully parsed HTML element\",\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original HTML input\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The input HTML syntax is invalid\",\n-                                \"name\": \"invalid html\"\n+                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"css\",\n-                            \"dom\",\n-                            \"element\",\n-                            \"html\",\n-                            \"put\"\n+                            \"cassandra\",\n+                            \"cql\",\n+                            \"select\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.PutHTMLElement\",\n-                        \"typeDescription\": \"Places a new HTML element in the existing HTML DOM. The desired position for the new HTML element is specified by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML DOM location may be located in a similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the position where the user desires to add the new HTML element. Once the new HTML element is added to the DOM it is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.cassandra.QueryCassandra\",\n+                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) select query on a Cassandra 1.x, 2.x, or 3.0.x cluster. Query result may be converted to Avro or JSON format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query. FlowFile attribute 'executecql.row.count' indicates how many rows were selected.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of rows returned by the CQL query\",\n+                                \"name\": \"executecql.row.count\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-image-viewer-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-nar\",\n+            \"artifact\": \"nifi-record-serialization-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credential-configuration-strategy\": {\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n-                                        \"displayName\": \"Default Credential\",\n-                                        \"value\": \"default-credential\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"managed-identity\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n+                                        \"displayName\": \"Use Embedded Avro Schema\",\n+                                        \"value\": \"embedded-avro-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default-credential\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"defaultValue\": \"embedded-avro-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credential-configuration-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n+                            \"schema-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"managed-identity\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n-                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"credentials\",\n-                            \"provider\",\n-                            \"security\",\n-                            \"session\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n-                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-consistency-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n-                                    },\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"document\",\n-                            \"service\"\n+                            \"avro\",\n+                            \"comma\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n+                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n+                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Authentication Strategy\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Event Hub shared access key\",\n-                                        \"displayName\": \"Shared Access Key\",\n-                                        \"value\": \"SHARED_ACCESS_KEY\"\n+                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n+                                        \"displayName\": \"Embed Avro Schema\",\n+                                        \"value\": \"avro-embedded\"\n                                     },\n                                     {\n-                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n-                                        \"displayName\": \"Default Azure Credential\",\n-                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n-                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"avro-embedded\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Provides the Event Hub Name for connections\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Partition Key\": {\n-                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n-                                \"displayName\": \"Partition Key\",\n+                            \"encoder-pool-size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n+                                \"displayName\": \"Encoder Pool Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Partition Key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"encoder-pool-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Default Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"China Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Germany Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"United States Government Endpoint\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy\": {\n+                            \"schema-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n-                                \"displayName\": \"Shared Access Policy\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Shared Access Policy Key\": {\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The primary or secondary key of the shared access policy\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n+                            \"avro\",\n                             \"record\",\n-                            \"sink\"\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n+                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"managed-identity-client-id\": {\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                            \"accept-empty-extensions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"accept-empty-extensions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n+                            \"datetime-representation\": {\n+                                \"defaultValue\": \"en-US\",\n+                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n+                                \"displayName\": \"DateTime Locale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"datetime-representation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n-                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                            \"inference-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Includes only CEF header fields into the inferred schema.\",\n+                                        \"displayName\": \"Headers only\",\n+                                        \"value\": \"headers-only\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes the CEF header and extension fields to the schema, but not the custom extensions.\",\n+                                        \"displayName\": \"Headers and extensions\",\n+                                        \"value\": \"headers-and-extensions\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields as string values.\",\n+                                        \"displayName\": \"With custom extensions as strings\",\n+                                        \"value\": \"custom-extensions-as-string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields with inferred data types. The inference works based on the values in the FlowFile. In some scenarios this might result unsatisfiable behaviour. In these cases it is suggested to use \\\"With custom extensions as strings\\\" Inference Strategy or predefined schema.\",\n+                                        \"displayName\": \"With custom extensions inferred\",\n+                                        \"value\": \"custom-extensions-inferred\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"custom-extensions-inferred\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the set of fields should be included in the schema and the way the fields are being interpreted.\",\n+                                \"displayName\": \"Inference Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"inference-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n+                            \"invalid-message-field\": {\n+                                \"description\": \"Used when a line in the FlowFile cannot be parsed by the CEF parser. If set, instead of failing to process the FlowFile, a record is being added with one field. This record contains one field with the name specified by the property and the raw message as value.\",\n+                                \"displayName\": \"Invalid Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"invalid-message-field\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"raw-message-field\": {\n+                                \"description\": \"If set the raw message will be added to the record using the property value as field name. This is not the same as the \\\"rawEvent\\\" extension field!\",\n+                                \"displayName\": \"Raw Message Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"raw-message-field\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"dfs.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-use-managed-identity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"schema-inference-cache\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-use-managed-identity\",\n+                                \"name\": \"schema-inference-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register ADLSCredentialsService\",\n-                                \"value\": \"The ADLSCredentialsService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n-                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Azure Storage processors. Uses Account Name with Account Key or Account Name with SAS Token.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register AzureStorageCredentialsService\",\n-                                \"value\": \"The AzureStorageCredentialsService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup\",\n-                        \"typeDescription\": \"Provides an AzureStorageCredentialsService that can be used to dynamically select another AzureStorageCredentialsService. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService that has been registered with that name. This will allow multiple AzureStorageCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n-                                \"value\": \"The AzureStorageCredentialsService_v12\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"cef\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n-                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"type\": \"org.apache.nifi.cef.CEFReader\",\n+                        \"typeDescription\": \"Parses CEF (Common Event Format) events, returning each row as a record. This reader allows for inferring a schema based on the first event in the FlowFile or providing an explicit schema for interpreting the values.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n-                                        \"displayName\": \"Account Key\",\n-                                        \"value\": \"ACCOUNT_KEY\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n-                                        \"displayName\": \"SAS Token\",\n-                                        \"value\": \"SAS_TOKEN\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n-                                        \"displayName\": \"Service Principal\",\n-                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credentials-type\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n+                            \"Comment Marker\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n+                            \"Null String\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Null String\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies.\",\n-                                \"displayName\": \"Account Key\",\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"Record Separator\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"Skip Header Line\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the first line of CSV should be considered a Header or should be considered a record. If the Schema Access Strategy indicates that the columns must be defined in the header, then this property will be ignored, since the header must always be present and won't be processed as a Record. Otherwise, if 'true', then the first line of CSV data will not be processed as a record and if 'false',then the first line will be interpreted as a record.\",\n+                                \"displayName\": \"Treat First Line as Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"Skip Header Line\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"blob.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key.\",\n-                                \"displayName\": \"SAS Token\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n-                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azurite-uri\": {\n-                                \"description\": \"URI to connect to Azure Storage Emulator (Azurite)\",\n-                                \"displayName\": \"Storage Emulator URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azurite-uri\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"credentials\",\n-                            \"emulator\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageEmulatorCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Azure Storage processors that connects to Azurite emulator.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                            },\n+                            \"Trim double quote\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Ignore\",\n-                                        \"value\": \"IGNORE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Upsert\",\n-                                        \"value\": \"UPSERT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"IGNORE\",\n-                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n-                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"rfc-4180\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not to trim starting and ending double quotes. For example: with trim string '\\\"test\\\"' would be parsed to 'test', without trim would be parsed to '\\\"test\\\"'.If set to 'false' it means full compliance with RFC-4180. Default value is true, with trim.\",\n+                                \"displayName\": \"Trim double quote\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n-                                \"required\": false,\n+                                \"name\": \"Trim double quote\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-connection-service\": {\n-                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n-                                \"displayName\": \"Cosmos DB Connection Service\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-connection-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"csv-reader-csv-parser\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n+                                        \"description\": \"The CSV parser implementation from the Apache Commons CSV library.\",\n+                                        \"displayName\": \"Apache Commons CSV\",\n+                                        \"value\": \"commons-csv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n+                                        \"description\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n+                                        \"displayName\": \"Jackson CSV\",\n+                                        \"value\": \"jackson-csv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"commons-csv\",\n+                                \"description\": \"Specifies which parser to use to read CSV records. NOTE: Different parsers may support different subsets of functionality and may also exhibit different levels of performance.\",\n+                                \"displayName\": \"CSV Parser\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"csv-reader-csv-parser\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"csvutils-allow-duplicate-header-names\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"description\": \"Whether duplicate header names are allowed. Header names are case-sensitive, for example \\\"name\\\" and \\\"Name\\\" are treated as separate fields. Handling of duplicate header names is CSV Parser specific (where applicable):\\n* Apache Commons CSV - duplicate headers will result in column data \\\"shifting\\\" right with new fields created for \\\"unknown_field_index_X\\\" where \\\"X\\\" is the CSV column index number\\n* Jackson CSV - duplicate headers will be de-duplicated with the field value being that of the right-most duplicate CSV column\",\n+                                \"displayName\": \"Allow Duplicate Header Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"name\": \"csvutils-allow-duplicate-header-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-container-id\": {\n-                                \"description\": \"The unique identifier for the container\",\n-                                \"displayName\": \"Cosmos DB Container ID\",\n+                            \"csvutils-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-container-id\",\n+                                \"name\": \"csvutils-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n+                            \"ignore-csv-header\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If the first line of a CSV is a header, and the configured schema does not match the fields named in the header line, this controls how the Reader will interpret the fields. If this property is true, then the field names mapped to each column are driven only by the configured schema and any fields not in the schema will be ignored. If this property is false, then the field names found in the CSV Header will be used as the names of the fields.\",\n+                                \"displayName\": \"Ignore CSV Header Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n+                                \"name\": \"ignore-csv-header\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"azure-cosmos-db-name\": {\n-                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n-                                \"displayName\": \"Cosmos DB Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-name\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-partition-key\": {\n-                                \"description\": \"The partition key used to distribute data among servers\",\n-                                \"displayName\": \"Cosmos DB Partition Key\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The first non-comment line of the CSV file is a header line that contains the names of the columns. The schema will be derived by using the column names in the header and assuming that all columns are of type String.\",\n+                                        \"displayName\": \"Use String Fields From Header\",\n+                                        \"value\": \"csv-header-derived\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-partition-key\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"insert-batch-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n-                                \"displayName\": \"Insert Batch Size\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\"\n+                            \"comma\",\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"type\": \"org.apache.nifi.csv.CSVReader\",\n+                        \"typeDescription\": \"Parses CSV-formatted data, returning each row in the CSV file as a separate record. This reader allows for inferring a schema based on the first line of the CSV, if a 'header line' is present, or providing an explicit schema for interpreting the values. See Controller Service's Usage for further documentation.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Service Bus Endpoint\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"custom\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-batch-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-consumer-group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use.\",\n-                                \"displayName\": \"Consumer Group\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-consumer-group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-consumer-hostname\": {\n-                                \"description\": \"DEPRECATED: This property is no longer used.\",\n-                                \"displayName\": \"Consumer Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-consumer-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-initial-offset\": {\n+                            \"Include Header Line\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read from the oldest message retained in the stream.\",\n-                                        \"displayName\": \"Start of stream\",\n-                                        \"value\": \"start-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n-                                        \"displayName\": \"End of stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"end-of-stream\",\n-                                \"description\": \"Specify where to start receiving messages if offset is not stored in Azure Storage.\",\n-                                \"displayName\": \"Initial Offset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-initial-offset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-message-receive-timeout\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time this consumer should wait to receive the Prefetch Count before returning.\",\n-                                \"displayName\": \"Message Receive Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-message-receive-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-name\": {\n-                                \"description\": \"The name of the event hub to pull messages from.\",\n-                                \"displayName\": \"Event Hub Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-namespace\": {\n-                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n-                                \"displayName\": \"Event Hub Namespace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-namespace\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-prefetch-count\": {\n-                                \"defaultValue\": \"300\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Prefetch Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-prefetch-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-shared-access-policy-name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"event-hub-shared-access-policy-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-shared-access-policy-primary-key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n+                                \"displayName\": \"Include Header Line\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"Include Header Line\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-container-name\": {\n-                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n-                                \"displayName\": \"Storage Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-container-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n-                                \"displayName\": \"Storage SAS Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"use-managed-identity\": {\n+                            \"Include Trailing Delimiter\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles received from Event Hub.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a message from event hub cannot be parsed using the configured Record Reader or failed to be written by the configured Record Writer, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Event Hub Consumer Group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use when pulling events\",\n-                                \"displayName\": \"Consumer Group\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n+                                \"displayName\": \"Include Trailing Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Consumer Group\",\n+                                \"name\": \"Include Trailing Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Message Enqueue Time\": {\n-                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n-                                \"displayName\": \"Message Enqueue Time\",\n+                            \"Null String\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n+                                \"displayName\": \"Null String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Message Enqueue Time\",\n+                                \"name\": \"Null String\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs source\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"Quote Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MINIMAL\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Event Hub Partitions\": {\n-                                \"description\": \"This property is deprecated and no longer used.\",\n-                                \"displayName\": \"Number of Event Hub Partitions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Number of Event Hub Partitions\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Partition Receiver Timeout (millseconds)\": {\n-                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n-                                \"displayName\": \"Partition Receiver Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Partition Recivier Fetch Size\": {\n-                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n-                                \"displayName\": \"Partition Receiver Fetch Size\",\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n+                                \"displayName\": \"Record Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Recivier Fetch Size\",\n-                                \"required\": false,\n+                                \"name\": \"Record Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"Trim Fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n-                                \"required\": false,\n+                                \"name\": \"Trim Fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n                             },\n-                            {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs destination\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"csvutils-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"csvutils-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioning-key-attribute-name\": {\n-                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n-                                \"displayName\": \"Partitioning Key Attribute Name\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioning-key-attribute-name\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"use-managed-identity\": {\n-                                \"allowableValues\": [\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"tab\",\n+                            \"tsv\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n-                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"type\": \"org.apache.nifi.csv.CSVRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet as CSV data. The first line written will be the column names (unless the 'Include Header Line' property is false). All subsequent lines will be the values corresponding to the record fields.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n+                            \"Grok Expression\": {\n+                                \"description\": \"Specifies the format of a log line in Grok format. This allows the Record Reader to understand how to parse each log line. The property supports one or more Grok expressions. The Reader attempts to parse input lines according to the configured order of the expressions.If a line in the log file does not match any expressions, the line will be assumed to belong to the previous log message.If other Grok patterns are referenced by this expression, they need to be supplied in the Grok Pattern File property.\",\n+                                \"displayName\": \"Grok Expressions\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Grok Expression\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Grok Pattern File\": {\n+                                \"description\": \"Grok Patterns to use for parsing logs. If not specified, a built-in default Pattern file will be used. If specified, all patterns specified will override the default patterns. See the Controller Service's Additional Details for a list of pre-defined patterns.\",\n+                                \"displayName\": \"Grok Patterns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Grok Pattern File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"no-match-behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will be appended to the last field of the prior message.\",\n+                                        \"displayName\": \"Append to Previous Message\",\n+                                        \"value\": \"append-to-previous-message\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE_SNAPSHOTS\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will be skipped.\",\n+                                        \"displayName\": \"Skip Line\",\n+                                        \"value\": \"skip-line\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"DELETE_SNAPSHOTS_ONLY\"\n+                                        \"description\": \"The line of text that does not match the Grok Expression will only be added to the _raw field.\",\n+                                        \"displayName\": \"Raw Line\",\n+                                        \"value\": \"raw-line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n-                                \"displayName\": \"Delete Snapshots Option\",\n+                                \"defaultValue\": \"append-to-previous-message\",\n+                                \"description\": \"If a line of text is encountered and it does not match the given Grok Expression, and it is not part of a stack trace, this property specifies how the text should be processed.\",\n+                                \"displayName\": \"No Match Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"no-match-behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The schema will be derived using the field names present in all configured Grok Expressions. All schema fields will have a String type and will be marked as nullable. The schema will also include a `stackTrace` field, and a `_raw` field containing the input line string.\",\n+                                        \"displayName\": \"Use String Fields From Grok Expression\",\n+                                        \"value\": \"string-fields-from-grok-expression\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"string-fields-from-grok-expression\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"grok\",\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"logstash\",\n+                            \"parse\",\n+                            \"pattern\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"regex\",\n+                            \"text\",\n+                            \"unstructured\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                        \"typeDescription\": \"Deletes the provided blob from Azure Storage\",\n+                        \"type\": \"org.apache.nifi.grok.GrokReader\",\n+                        \"typeDescription\": \"Provides a mechanism for reading unstructured text data, such as log files, and structuring the data so that it can be processed. The service is configured using Grok patterns. The service reads from a stream of data and splits each message that it finds into a separate Record, each containing the fields that are configured. If a line in the input does not match the expected message pattern, the line of text is either considered to be part of the previous message or is skipped, depending on the configuration, with the exception of stack traces. A stack trace that is found at the end of a log message is considered to be part of the previous message but is added to the 'stackTrace' field of the Record. If a record has no stack trace, it will have a NULL value for the stackTrace field (assuming that the schema does in fact include a stackTrace field of type String). Assuming that the schema includes a '_raw' field of type String, the raw message will be included in the Record.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"User-defined properties identify how to extract specific fields from a JSON object in order to create a Record\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The field name for the record.\",\n+                                \"value\": \"A JSONPath Expression that will be evaluated against each JSON record. The result of the JSONPath will be the value of the field whose name is the same as the property name.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"ONLY\"\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n-                                \"displayName\": \"Delete Snapshots Option\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonTreeReader\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"jsonpath\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.json.JsonPathReader\",\n+                        \"typeDescription\": \"Parses JSON records and evaluates user-defined JSON Path's against each JSON object. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. User-defined properties define the fields that should be extracted from the JSON in order to form the fields of a Record. Any JSON field that is not extracted via a JSONPath will not be returned in the JSON Records.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"dependencies\": [\n+                            \"Pretty Print JSON\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n-                                        \"propertyName\": \"filesystem-object-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the JSON should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pretty Print JSON\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-object-type\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The object to be deleted is a file.\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"file\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"The object to be deleted is a directory.\",\n-                                        \"displayName\": \"Directory\",\n-                                        \"value\": \"directory\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"file\",\n-                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n-                                \"displayName\": \"Filesystem Object Type\",\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filesystem-object-type\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"blob\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, BZIP2, ZSTD, XZ-LZMA2, LZMA, Snappy, and Snappy Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-id\": {\n+                            \"compression-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n+                                            \"gzip\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"compression-format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"description\": \"The compression level to use; this is valid only when using GZIP compression. A lower value results in faster processing but less compression; a value of 0 indicates no compression but simply archiving\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cse-key-id\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-type\": {\n+                            \"output-grouping\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Output records as a JSON array\",\n+                                        \"displayName\": \"Array\",\n+                                        \"value\": \"output-array\"\n                                     },\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n-                                        \"displayName\": \"SYMMETRIC\",\n-                                        \"value\": \"SYMMETRIC\"\n+                                        \"description\": \"Output records with one JSON object per line, delimited by a newline character\",\n+                                        \"displayName\": \"One Line Per Object\",\n+                                        \"value\": \"output-oneline\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"output-array\",\n+                                \"description\": \"Specifies how the writer should output the JSON records (as an array or one object per line, e.g.) Note that if 'One Line Per Object' is selected, then Pretty Print JSON must be false.\",\n+                                \"displayName\": \"Output Grouping\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-key-type\",\n+                                \"name\": \"output-grouping\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-symmetric-key-hex\": {\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Symmetric Key\",\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-symmetric-key-hex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-protocol-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            },\n+                            \"suppress-nulls\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"suppress-nulls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"row\",\n+                            \"serialize\",\n+                            \"writer\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                        \"typeDescription\": \"Retrieves contents of an Azure Storage Blob, writing the contents to the content of the FlowFile\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The length of the blob fetched\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.json.JsonRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the results of a RecordSet as either a JSON Array or one JSON object per line. If using Array output, then even if the RecordSet consists of a single row, it will be written as an array with a single element. If using One Line Per Object output, the JSON objects cannot be pretty-printed.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n+                            \"schema-application-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Applies the schema for the whole JSON.\",\n+                                        \"displayName\": \"Whole JSON\",\n+                                        \"value\": \"WHOLE_JSON\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n+                                        \"displayName\": \"Selected Part\",\n+                                        \"value\": \"SELECTED_PART\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SELECTED_PART\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"schema-text-property\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n+                                \"displayName\": \"Schema Application Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"name\": \"schema-application-strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"schema-inference-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-inference-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"starting-field-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"NESTED_FIELD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n+                                        \"propertyName\": \"starting-field-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                \"displayName\": \"Starting Field Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"starting-field-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"starting-field-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Begins processing from the root node.\",\n+                                        \"displayName\": \"Root Node\",\n+                                        \"value\": \"ROOT_NODE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n+                                        \"displayName\": \"Nested Field\",\n+                                        \"value\": \"NESTED_FIELD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ROOT_NODE\",\n+                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n+                                \"displayName\": \"Starting Field Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"starting-field-strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonPathReader\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"json\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"tree\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n+                        \"type\": \"org.apache.nifi.json.JsonTreeReader\",\n+                        \"typeDescription\": \"Parses JSON into individual Record objects. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the JSON, a null value will be used. If the JSON contains a field that is not present in the schema, that field will be skipped. See the Usage of the Controller Service for more information and examples.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n+                                \"description\": \"\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the RecordReader\",\n+                                \"value\": \"A RecordReaderFactory controller service\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Service to Use\": {\n+                                \"defaultValue\": \"${recordreader.name}\",\n+                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n+                                \"displayName\": \"Service to Use\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.RecordSetWriterLookup\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.ReaderLookup\",\n+                        \"typeDescription\": \"Provides a RecordReaderFactory that can be used to dynamically select another RecordReaderFactory. This will allow multiple RecordReaderFactories to be defined and registered, and then selected dynamically at runtime by referencing a FlowFile attribute in the Service to Use property.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n+                                \"description\": \"\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the RecordSetWriter\",\n+                                \"value\": \"A RecordSetWriterFactory controller service\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Service to Use\": {\n+                                \"defaultValue\": \"${recordsetwriter.name}\",\n+                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n+                                \"displayName\": \"Service to Use\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.ReaderLookup\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.RecordSetWriterLookup\",\n+                        \"typeDescription\": \"Provides a RecordSetWriterFactory that can be used to dynamically select another RecordSetWriterFactory. This will allow multiple RecordSetWriterFactory's to be defined and registered, and then selected dynamically at runtime by tagging FlowFiles with the attributes and referencing those attributes in the Service to Use property.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"max-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of Schemas to cache.\",\n+                                \"displayName\": \"Maximum Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"record\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.schema.inference.VolatileSchemaCache\",\n+                        \"typeDescription\": \"Provides a Schema Cache that evicts elements based on a Least-Recently-Used algorithm. This cache is not persisted, so any restart of NiFi will result in the cache being cleared. Additionally, the cache will be cleared any time that the Controller Service is stopped and restarted.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"syslog-5424-reader-raw-message\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n+                                \"displayName\": \"Raw message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"syslog 5424\",\n+                            \"text\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.syslog.Syslog5424Reader\",\n+                        \"typeDescription\": \"Provides a mechanism for reading RFC 5424 compliant Syslog data, such as log files, and structuring the data so that it can be processed.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"syslog-5424-reader-raw-message\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n+                                \"displayName\": \"Raw message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"text\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.syslog.SyslogReader\",\n+                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164. In the case of RFC5424 formatted messages, structured data is not supported, and will be returned as part of the message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"Text\": {\n+                                \"description\": \"The text to use when writing the results. This property will evaluate the Expression Language using any of the fields available in a Record.\",\n+                                \"displayName\": \"Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"el\",\n+                            \"expression\",\n+                            \"freeform\",\n+                            \"language\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"serialize\",\n+                            \"text\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.text.FreeFormTextRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet as free-form text. The configured text is able to make use of the Expression Language to reference each of the fields that are available in a Record, as well as the attributes in the FlowFile and variables. If there is a name collision, the field name/value is used before attributes or variables. Each record in the RecordSet will be separated by a single newline character.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"event\",\n+                            \"log\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"windows\",\n+                            \"xml\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.windowsevent.WindowsEventLogReader\",\n+                        \"typeDescription\": \"Reads Windows Event Log data as XML content having been generated by ConsumeWindowsEventLog, ParseEvtx, etc. (see Additional Details) and creates Record object(s). If the root tag of the input XML is 'Events', the child content is expected to be a series of 'Event' tags, each of which will constitute a single record. If the root tag is 'Event', the content is expected to be a single 'Event' and thus a single record. No other root tags are valid. Only events of type 'System' are currently supported.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute_prefix\": {\n+                                \"description\": \"If this property is set, the name of attributes will be prepended with a prefix when they are added to a record.\",\n+                                \"displayName\": \"Attribute Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n+                                \"name\": \"attribute_prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"content_field_name\": {\n+                                \"description\": \"If tags with content (e. g. <field>content</field>) are defined as nested records in the schema, the name of the tag will be used as name for the record and the value of this property will be used as name for the field. If tags with content shall be parsed together with attributes (e. g. <field attribute=\\\"123\\\">content</field>), they have to be defined as records. In such a case, the name of the tag will be used as the name for the record and  the value of this property will be used as the name for the field holding the original content. The name of the attribute will be used to create a new record field, the content of which will be the value of the attribute. For more information, see the 'Additional Details...' section of the XMLReader controller service's documentation.\",\n+                                \"displayName\": \"Field Name for Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"content_field_name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"parse_xml_attributes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"infer-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When 'Schema Access Strategy' is 'Infer Schema' and this property is 'true' then XML attributes are parsed and added to the record as new fields. When the schema is inferred but this property is 'false', XML attributes and their values are ignored.\",\n+                                \"displayName\": \"Parse XML Attributes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parse_xml_attributes\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record_format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Each FlowFile will consist of a single record without any sort of \\\"wrapper\\\".\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Each FlowFile will consist of zero or more records. The outer-most XML element is expected to be a \\\"wrapper\\\" and will be ignored.\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Whether to treat a FlowFile as a single Record or an array of multiple Records is determined by the value of the 'xml.stream.is.array' attribute. If the value of the attribute is 'true' (case-insensitive), then the XML Reader will treat the FlowFile as a series of Records with the outer element being ignored. If the value of the attribute is 'false' (case-insensitive), then the FlowFile is treated as a single Record and no wrapper element is assumed. If the attribute is missing or its value is anything other than 'true' or 'false', then an Exception will be thrown and no records will be parsed.\",\n+                                        \"displayName\": \"Use attribute 'xml.stream.is.array'\",\n+                                        \"value\": \"${xml.stream.is.array}\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This property defines whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\". Because XML does not provide for a way to read a series of XML documents from a stream directly, it is common to combine many XML documents by concatenating them and then wrapping the entire XML blob  with a \\\"wrapper element\\\". This property dictates whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\" that will be ignored.\",\n+                                \"displayName\": \"Expect Records as Array\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"record_format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"number-of-retries\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"schema-inference-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n+                                \"displayName\": \"Schema Inference Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-inference-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Fetch the provided file from Azure Data Lake Storage\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.statusCode\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorCode\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorMessage\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.xml.XMLReader\",\n+                        \"typeDescription\": \"Reads XML content and creates Record objects. Records are expected in the second level of XML data, embedded in an enclosing root tag.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Schema Write Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"array_tag_name\": {\n+                                \"description\": \"Name of the tag used by property \\\"Wrap Elements of Arrays\\\" to write arrays\",\n+                                \"displayName\": \"Array Tag Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"array_tag_name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"array_wrapping\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used as the tag name to wrap elements of an array. The field name of the array field will be used for the tag name of the elements.\",\n+                                        \"displayName\": \"Use Property as Wrapper\",\n+                                        \"value\": \"use-property-as-wrapper\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used for the tag name of the elements of an array. The field name of the array field will be used as the tag name to wrap elements.\",\n+                                        \"displayName\": \"Use Property for Elements\",\n+                                        \"value\": \"use-property-for-elements\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The elements of an array will not be wrapped\",\n+                                        \"displayName\": \"No Wrapping\",\n+                                        \"value\": \"no-wrapping\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no-wrapping\",\n+                                \"description\": \"Specifies how the writer wraps elements of fields of type array\",\n+                                \"displayName\": \"Wrap Elements of Arrays\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"array_wrapping\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"omit_xml_declaration\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not to include XML declaration\",\n+                                \"displayName\": \"Omit XML Declaration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"omit_xml_declaration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"pretty_print_xml\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n+                                \"displayName\": \"Pretty Print XML\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"pretty_print_xml\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"record_tag_name\": {\n+                                \"description\": \"Specifies the name of the XML record tag wrapping the record fields. If this is not set, the writer will use the record name in the schema.\",\n+                                \"displayName\": \"Name of Record Tag\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"record_tag_name\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"root_tag_name\": {\n+                                \"description\": \"Specifies the name of the XML root tag wrapping the record set. This property has to be defined if the writer is supposed to write multiple records in a single FlowFile.\",\n+                                \"displayName\": \"Name of Root Tag\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"root_tag_name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Prefix\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"prefix\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"schema-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"schema-protocol-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            },\n+                            \"suppress_nulls\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n+                                        \"displayName\": \"Suppress Missing Values\",\n+                                        \"value\": \"suppress-missing\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"never-suppress\",\n+                                \"description\": \"Specifies how the writer should handle a null field\",\n+                                \"displayName\": \"Suppress Null Values\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"suppress_nulls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored. This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run.  State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"row\",\n+                            \"serialize\",\n+                            \"writer\",\n+                            \"xml\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage.  This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure blob\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for blob content\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"Secondary location for blob content\",\n-                                \"name\": \"azure.secondaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"Etag for the Azure blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp in Azure for the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"MimeType of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"This is the type of blob and can be either page or block type\",\n-                                \"name\": \"azure.blobtype\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n+                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cassandra-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-shopify-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-shopify-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -14519,659 +14355,806 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"CUSTOMERS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"customers\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CUSTOMERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Customer resource to query\",\n+                                \"displayName\": \"Customer Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"CUSTOMERS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"DISCOUNTS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n+                                        \"displayName\": \"Price Rules\",\n+                                        \"value\": \"price_rules\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"DISCOUNTS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Discount resource to query\",\n+                                \"displayName\": \"Discount Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"DISCOUNTS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"INVENTORY\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n+                                        \"displayName\": \"Locations\",\n+                                        \"value\": \"locations\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"INVENTORY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Inventory resource to query\",\n+                                \"displayName\": \"Inventory Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"INVENTORY\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"ONLINE_STORE\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n+                                        \"displayName\": \"Blogs\",\n+                                        \"value\": \"blogs\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n+                                        \"displayName\": \"Comments\",\n+                                        \"value\": \"comments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n+                                        \"displayName\": \"Pages\",\n+                                        \"value\": \"pages\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n+                                        \"displayName\": \"Redirects\",\n+                                        \"value\": \"redirects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n+                                        \"displayName\": \"Script Tags\",\n+                                        \"value\": \"script_tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n+                                        \"displayName\": \"Themes\",\n+                                        \"value\": \"themes\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ONLINE_STORE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Online Store resource to query\",\n+                                \"displayName\": \"Online Store Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"ONLINE_STORE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"blob-name-prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Blob Name Prefix\",\n+                            \"ORDERS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n+                                        \"displayName\": \"Abandoned Checkouts\",\n+                                        \"value\": \"checkouts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n+                                        \"displayName\": \"Draft Orders\",\n+                                        \"value\": \"draft_orders\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"orders\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ORDERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Order resource to query\",\n+                                \"displayName\": \"Order Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"blob-name-prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ORDERS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"PRODUCT\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n+                                        \"displayName\": \"Collects\",\n+                                        \"value\": \"collects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n+                                        \"displayName\": \"Custom Collections\",\n+                                        \"value\": \"custom_collections\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get products in a merchant's store \",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"products\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n+                                        \"displayName\": \"Smart Collections\",\n+                                        \"value\": \"smart_collections\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PRODUCT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Product resource to query\",\n+                                \"displayName\": \"Product Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"PRODUCT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"SALES_CHANNELS\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n+                                        \"displayName\": \"Collection Listings\",\n+                                        \"value\": \"collection_listings\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n+                                        \"displayName\": \"Product Listings\",\n+                                        \"value\": \"product_listings\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"SALES_CHANNELS\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"description\": \"Sales Channel resource to query\",\n+                                \"displayName\": \"Sales Channel Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"SALES_CHANNELS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n+                            \"STORE_PROPERTIES\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n+                                        \"displayName\": \"Countries\",\n+                                        \"value\": \"countries\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n+                                        \"displayName\": \"Currencies\",\n+                                        \"value\": \"currencies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n+                                        \"displayName\": \"Policies\",\n+                                        \"value\": \"policies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n+                                        \"displayName\": \"Shipping Zones\",\n+                                        \"value\": \"shipping_zones\"\n+                                    }\n+                                ],\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"STORE_PROPERTIES\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"description\": \"Store Property resource to query\",\n+                                \"displayName\": \"Store Property Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"STORE_PROPERTIES\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"api-version\": {\n+                                \"defaultValue\": \"2022-10\",\n+                                \"description\": \"The Shopify REST API version\",\n+                                \"displayName\": \"API Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"api-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n+                                \"displayName\": \"Incremental Delay\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n+                            \"incremental-initial-start-time\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"incremental-initial-start-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"is-incremental\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"object-category\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Query a Customer resource\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"CUSTOMERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Discount resource\",\n+                                        \"displayName\": \"Discounts\",\n+                                        \"value\": \"DISCOUNTS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Inventory resource\",\n+                                        \"displayName\": \"Inventory\",\n+                                        \"value\": \"INVENTORY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Online Store resource\",\n+                                        \"displayName\": \"Online Store\",\n+                                        \"value\": \"ONLINE_STORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Order resource\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"ORDERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Product resource\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"PRODUCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Sales Channel resource\",\n+                                        \"displayName\": \"Sales Channels\",\n+                                        \"value\": \"SALES_CHANNELS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Store Property resource\",\n+                                        \"displayName\": \"Store Properties\",\n+                                        \"value\": \"STORE_PROPERTIES\"\n+                                    }\n+                                ],\n+                                \"description\": \"Shopify object category\",\n+                                \"displayName\": \"Object Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"object-category\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"result-limit\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"store-domain\": {\n+                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n+                                \"displayName\": \"Store Domain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"store-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"shopify\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n+                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n-                            {\n-                                \"description\": \"MIME Type of the content\",\n+                                \"description\": \"Sets the MIME type to application/json\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-0-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-filter\": {\n-                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n-                                \"displayName\": \"File Filter\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"file-filter\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-temporary-files\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n-                                \"displayName\": \"Include Temporary Files\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-temporary-files\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"path-filter\": {\n-                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"path-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"recurse-subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recurse-subdirectories\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The full path of the Azure File\",\n-                                \"name\": \"azure.filePath\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the Azure File\",\n-                                \"name\": \"azure.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"The ETag of the Azure File\",\n-                                \"name\": \"azure.etag\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_0\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.x topic.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15179,743 +15162,572 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n-                                \"displayName\": \"Destination Directory\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n-                                \"displayName\": \"Destination Filesystem\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"source-directory-name\": {\n-                                \"defaultValue\": \"${azure.directory}\",\n-                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n-                                \"displayName\": \"Source Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"source-filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n-                                \"displayName\": \"Source Filesystem\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-filesystem-name\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the source Azure File System\",\n-                                \"name\": \"azure.source.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the source Azure Directory\",\n-                                \"name\": \"azure.source.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"azure-create-container\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-create-container\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"blob\": {\n-                                \"description\": \"The filename of the blob\",\n-                                \"displayName\": \"Blob\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-key-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cse-key-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"cse-key-type\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n-                                        \"displayName\": \"SYMMETRIC\",\n-                                        \"value\": \"SYMMETRIC\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-key-type\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cse-symmetric-key-hex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SYMMETRIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"cse-key-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Symmetric Key\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cse-symmetric-key-hex\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\",\n-                        \"typeDescription\": \"Puts content into an Azure Storage Blob\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure blob\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for blob content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Etag for the Azure blob\",\n-                                \"name\": \"azure.etag\"\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The timestamp in Azure for the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n-                                \"required\": true,\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n+                            \"sasl.username\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"IGNORE_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-container\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"MIME Type of the content\",\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15923,582 +15735,541 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"base-temporary-path\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n-                                \"displayName\": \"Base Temporary Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"base-temporary-path\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Puts content into an Azure Data Lake Storage Gen 2\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"auto-delete-messages\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto-delete-messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"The number of messages to be retrieved from the queue.\",\n-                                \"displayName\": \"Batch Size\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"storage-queue-name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-queue-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"visibility-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"visibility-timeout\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\",\n-                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n-                                \"name\": \"azure.queue.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message was inserted into the queue storage\",\n-                                \"name\": \"azure.queue.insertionTime\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message will expire from the queue storage\",\n-                                \"name\": \"azure.queue.expirationTime\"\n                             },\n-                            {\n-                                \"description\": \"The ID of the retrieved message\",\n-                                \"name\": \"azure.queue.messageId\"\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The pop receipt of the retrieved message\",\n-                                \"name\": \"azure.queue.popReceipt\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Auto Delete Messages\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"The number of messages to be retrieved from the queue.\",\n-                                \"displayName\": \"Message Batch Size\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_0.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n-                                \"name\": \"azure.queue.uri\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The time when the message was inserted into the queue storage\",\n-                                \"name\": \"azure.queue.insertionTime\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"The time when the message will expire from the queue storage\",\n-                                \"name\": \"azure.queue.expirationTime\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"The ID of the retrieved message\",\n-                                \"name\": \"azure.queue.messageId\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The pop receipt of the retrieved message\",\n-                                \"name\": \"azure.queue.popReceipt\"\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16508,166 +16279,589 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"deprecated\": true,\n                         \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n                         ],\n                         \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Failure Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-key-field\": {\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n+                                \"name\": \"message-key-field\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n-                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"storage-queue-name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-queue-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"time-to-live\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Maximum time to allow the message to be in the queue. If left empty, the default value of 7 days will be used.\",\n-                                \"displayName\": \"TTL\",\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"time-to-live\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"visibility-delay\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"The length of time during which the message will be invisible, starting when it is added to the queue. This value must be greater than or equal to 0 and less than the TTL value.\",\n-                                \"displayName\": \"Visibility Delay\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"visibility-delay\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"2.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_0.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-0-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16675,811 +16869,1052 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Message Time To Live\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Maximum time to allow the message to be in the queue\",\n-                                \"displayName\": \"Message Time To Live\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Time To Live\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Job Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifiprovenance\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Messages will be assigned to random partitions.\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each event.\",\n-                                \"displayName\": \"Platform\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Platform\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"include-null-values\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Event Type to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-event-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Event Type to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component ID to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-id-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component ID to Exclude\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-name-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Name to Include\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-name-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Name to Exclude\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"s2s-prov-task-type-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Type to Include\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-type-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Type to Exclude\",\n+                            \"transactional-id-prefix\": {\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"provenace\",\n-                            \"reporting\"\n+                            \"2.0\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n-                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_0.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-datadog-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-datadog-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Instance ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifimetrics\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"API key\": {\n+                                \"description\": \"Datadog API key. If specified value is 'agent', local Datadog agent will be used.\",\n+                                \"displayName\": \"API key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"API key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n+                            \"Datadog transport\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Metrics will be sent via locally installed Datadog agent. Datadog agent needs to be installed manually before using this option\",\n+                                        \"displayName\": \"Datadog Agent\",\n+                                        \"value\": \"Datadog Agent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Metrics will be sent via HTTP transport with no need of Agent installed. Datadog API key needs to be set\",\n+                                        \"displayName\": \"Datadog HTTP\",\n+                                        \"value\": \"Datadog HTTP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Datadog HTTP\",\n+                                \"description\": \"Transport through which metrics will be sent to Datadog\",\n+                                \"displayName\": \"Datadog transport\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Datadog transport\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"Environment\": {\n+                                \"defaultValue\": \"dev\",\n+                                \"description\": \"Environment, dataflow is running in. This property will be included as metrics tag.\",\n+                                \"displayName\": \"Environment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"name\": \"Environment\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Process group ID(s)\": {\n-                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n-                                \"displayName\": \"Process group ID(s)\",\n+                            \"Metrics prefix\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Prefix to be added before every metric\",\n+                                \"displayName\": \"Metrics prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Process group ID(s)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send JVM Metrics\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"Metrics prefix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n+                            \"datadog\",\n                             \"metrics\",\n                             \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n-                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n+                        \"type\": \"org.apache.nifi.reporting.datadog.DataDogReportingTask\",\n+                        \"typeDescription\": \"Publishes metrics from NiFi to datadog. For accurate and informative reporting, components should have unique names.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-social-media-nar\",\n+            \"artifact\": \"nifi-solr-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"backfill-minutes\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n-                                \"displayName\": \"Backfill Minutes\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Number of rows per Solr query\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backfill-minutes\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-attempts\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n-                                \"displayName\": \"Backoff Attempts\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-attempts\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-time\": {\n-                                \"defaultValue\": \"1 mins\",\n-                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n-                                \"displayName\": \"Backoff Time\",\n+                            \"Date Field\": {\n+                                \"description\": \"The name of a date field in Solr used to filter results\",\n+                                \"displayName\": \"Date Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-time\",\n+                                \"name\": \"Date Field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"base-path\": {\n-                                \"defaultValue\": \"https://api.twitter.com\",\n-                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n-                                \"displayName\": \"Base Path\",\n+                            \"Initial Date Filter\": {\n+                                \"description\": \"Date value to filter results. Documents with an earlier date will not be fetched. The format has to correspond to the date pattern of Solr 'YYYY-MM-DDThh:mm:ssZ'\",\n+                                \"displayName\": \"Initial Date Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"base-path\",\n-                                \"required\": true,\n+                                \"name\": \"Initial Date Filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"bearer-token\": {\n-                                \"description\": \"The Bearer Token provided by Twitter.\",\n-                                \"displayName\": \"Bearer Token\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Return Fields\": {\n+                                \"description\": \"Comma-separated list of field names to return\",\n+                                \"displayName\": \"Return Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bearer-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Return Fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Records\",\n+                                        \"value\": \"Records\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"XML\",\n+                                \"description\": \"Write Solr documents to FlowFiles as XML or using a Record Writer\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"expansions\": {\n-                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n-                                \"displayName\": \"Expansions\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expansions\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"maximum-backoff-time\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n-                                \"displayName\": \"Maximum Backoff Time\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-backoff-time\",\n+                                \"name\": \"Solr Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"media-fields\": {\n-                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n-                                \"displayName\": \"Media Fields\",\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"media-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"place-fields\": {\n-                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n-                                \"displayName\": \"Place Fields\",\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"place-fields\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"poll-fields\": {\n-                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n-                                \"displayName\": \"Poll Fields\",\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-fields\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"queue-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Maximum size of internal queue for streamed messages\",\n-                                \"displayName\": \"Queue Size\",\n+                            \"Solr Query\": {\n+                                \"description\": \"A query to execute against Solr\",\n+                                \"displayName\": \"Solr Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"queue-size\",\n-                                \"required\": true,\n+                                \"name\": \"Solr Query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"Solr Socket Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"stream-endpoint\": {\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n-                                        \"displayName\": \"Sample Stream\",\n-                                        \"value\": \"Sample Endpoint\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n-                                        \"displayName\": \"Search Stream\",\n-                                        \"value\": \"Search Endpoint\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"The source from which the processor will consume Tweets.\",\n-                                \"displayName\": \"Stream Endpoint\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"stream-endpoint\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"tweet-fields\": {\n-                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n-                                \"displayName\": \"Tweet Fields\",\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tweet-fields\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-fields\": {\n-                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n-                                \"displayName\": \"User Fields\",\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"user-fields\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores latest date of Date Field so that the same data will not be fetched multiple times.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n+                                \"description\": \"The results of querying Solr\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\n+                            \"Apache\",\n+                            \"Get\",\n+                            \"Pull\",\n+                            \"Records\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n-                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of Tweets in the FlowFile\",\n-                                \"name\": \"tweets\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.GetSolr\",\n+                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -17487,2039 +17922,2116 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.twitter.ConsumeTwitter\"\n-                        ],\n-                        \"deprecationReason\": \"GetTwitter relies on the Twitter Hosebird client, which is not maintained. This processor will be removed in future releases.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Allows users to specify the name/value of a query parameter to add to the Twitter query\",\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name of a query parameter to add to the Twitter query\",\n-                                \"value\": \"The value of a query parameter to add to the Twitter query\"\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"The Access Token provided by Twitter\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Commit Within\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The number of milliseconds before the given update is committed\",\n+                                \"displayName\": \"Commit Within\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Commit Within\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Stream Path\": {\n+                                \"defaultValue\": \"/update/json/docs\",\n+                                \"description\": \"The path in Solr to post the ContentStream\",\n+                                \"displayName\": \"Content Stream Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content Stream Path\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Access Token Secret\": {\n-                                \"description\": \"The Access Token Secret provided by Twitter\",\n-                                \"displayName\": \"Access Token Secret\",\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"application/json\",\n+                                \"description\": \"Content-Type being sent to Solr\",\n+                                \"displayName\": \"Content-Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token Secret\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Consumer Key\": {\n-                                \"description\": \"The Consumer Key provided by Twitter\",\n-                                \"displayName\": \"Consumer Key\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consumer Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Consumer Secret\": {\n-                                \"description\": \"The Consumer Secret provided by Twitter\",\n-                                \"displayName\": \"Consumer Secret\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consumer Secret\",\n+                                \"name\": \"Solr Connection Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"IDs to Follow\": {\n-                                \"description\": \"A comma-separated list of Twitter User ID's to follow. Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n-                                \"displayName\": \"IDs to Follow\",\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IDs to Follow\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Languages\": {\n-                                \"description\": \"A comma-separated list of languages for which tweets should be fetched\",\n-                                \"displayName\": \"Languages\",\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Languages\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Locations to Filter On\": {\n-                                \"description\": \"A comma-separated list of coordinates specifying one or more bounding boxes to filter on.Each bounding box is specified by a pair of coordinates in the format: swLon,swLat,neLon,neLat. Multiple bounding boxes can be specified as such: swLon1,swLat1,neLon1,neLat1,swLon2,swLat2,neLon2,neLat2.Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n-                                \"displayName\": \"Locations to Filter On\",\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Locations to Filter On\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Terms to Filter On\": {\n-                                \"description\": \"A comma-separated list of terms to filter on. Ignored unless Endpoint is set to 'Filter Endpoint'. The filter works such that if any term matches, the status update will be retrieved; multiple terms separated by a space function as an 'AND'. I.e., 'it was, hello' will retrieve status updates that have either 'hello' or both 'it' AND 'was'\",\n-                                \"displayName\": \"Terms to Filter On\",\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Terms to Filter On\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Twitter Endpoint\": {\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The endpoint that provides public data, aka a 'garden hose'\",\n-                                        \"displayName\": \"Sample Endpoint\",\n-                                        \"value\": \"Sample Endpoint\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The endpoint that provides access to all tweets\",\n-                                        \"displayName\": \"Firehose Endpoint\",\n-                                        \"value\": \"Firehose Endpoint\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Endpoint that allows the stream to be filtered by specific terms or User IDs\",\n-                                        \"displayName\": \"Filter Endpoint\",\n-                                        \"value\": \"Filter Endpoint\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"Specifies which endpoint data should be pulled from\",\n-                                \"displayName\": \"Twitter Endpoint\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Twitter Endpoint\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-client-error-retries\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of retries to attempt when client experience retryable connection errors. Client continues attempting to reconnect using an exponential back-off pattern until it successfully reconnects or until it reaches the retry limit.  It is recommended to raise this value when client is getting rate limited by Twitter API. Default value is 5.\",\n-                                \"displayName\": \"Max Client Error Retries\",\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-client-error-retries\",\n-                                \"required\": true,\n+                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All status updates will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.twitter.GetTwitter\",\n-                        \"typeDescription\": \"Pulls status changes from Twitter's streaming API. In versions starting with 1.9.0, the Consumer Key and Access Token are marked as sensitive according to https://developer.twitter.com/en/docs/basics/authentication/guides/securing-keys-and-tokens\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets mime type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            },\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"box-file-id\": {\n-                                \"defaultValue\": \"${box.id}\",\n-                                \"description\": \"The ID of the File to fetch\",\n-                                \"displayName\": \"File ID\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"box-file-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.ListBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"The original FlowFile\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n+                                \"name\": \"connection_failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Put\",\n+                            \"Send\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.PutSolrContentStream\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a ContentStream to Solr\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The number of solr documents to index per batch\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Commit Within\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The number of milliseconds before the given update is committed\",\n+                                \"displayName\": \"Commit Within\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Commit Within\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fields To Index\": {\n+                                \"description\": \"Comma-separated list of field names to write\",\n+                                \"displayName\": \"Fields To Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Fields To Index\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"box-folder-id\",\n+                                \"name\": \"Solr Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Solr Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Update Path\": {\n+                                \"defaultValue\": \"/update\",\n+                                \"description\": \"The path in Solr to post the Flowfile Records\",\n+                                \"displayName\": \"Solr Update Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Solr Update Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"recursive-search\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n-                                \"displayName\": \"Search Recursively\",\n+                            \"put-solr-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"put-solr-record-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"The original FlowFile\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n+                                \"name\": \"connection_failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"Solr\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n-                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.solr.PutSolrRecord\",\n+                        \"typeDescription\": \"Indexes the Records from a FlowFile into Solr\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-solr-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These parameters will be passed to Solr on the request\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A Solr request parameter name\",\n+                                \"value\": \"A Solr request parameter value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"Collection\": {\n+                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n+                                \"displayName\": \"Collection\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Collection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"box-folder-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"Solr Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n+                                \"name\": \"Solr Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n+                            \"Solr Location\": {\n+                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n+                                \"displayName\": \"Solr Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Solr Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Maximum Connections\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n+                                \"displayName\": \"Solr Maximum Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Maximum Connections Per Host\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n+                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Socket Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n+                                \"displayName\": \"Solr Socket Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Solr Socket Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Solr Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"A SolrCloud instance.\",\n+                                        \"displayName\": \"Cloud\",\n+                                        \"value\": \"Cloud\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"A stand-alone Solr instance.\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n+                                \"displayName\": \"Solr Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Solr Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-folder\": {\n+                            \"Username\": {\n+                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n+                                \"displayName\": \"Basic Auth Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Client Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Connection Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n+                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amount_documents_to_return\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Entire results\",\n+                                        \"value\": \"return_all_results\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Only top results\",\n+                                        \"value\": \"return_only_top_results\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"return_only_top_results\",\n+                                \"description\": \"Total amount of Solr documents to be returned. If this property is set to \\\"Only top results\\\", only single requests will be sent to Solr and the results will be written into single FlowFiles. If it is set to \\\"Entire results\\\", all results matching to the query are retrieved via multiple Solr requests and returned in multiple FlowFiles. For both options, the number of Solr documents to be returned in a FlowFile depends on the configuration of the \\\"Rows\\\" property\",\n+                                \"displayName\": \"Total amount of returned results\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amount_documents_to_return\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"return_type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Subfolder Name\",\n-                                        \"propertyName\": \"subfolder-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Records\",\n+                                        \"value\": \"Records\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n-                                \"displayName\": \"Create Subfolder\",\n+                                \"defaultValue\": \"XML\",\n+                                \"description\": \"Output format of Solr results. Write Solr documents to FlowFiles as XML or using a Record Writer\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-folder\",\n+                                \"name\": \"return_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"solr_param_field_list\": {\n+                                \"description\": \"Comma separated list of fields to be included into results, e. g. field1,field2\",\n+                                \"displayName\": \"Field List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"solr_param_field_list\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_query\": {\n+                                \"defaultValue\": \"*:*\",\n+                                \"description\": \"Solr Query, e. g. field:value\",\n+                                \"displayName\": \"Solr Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subfolder-name\": {\n-                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n-                                \"displayName\": \"Subfolder Name\",\n+                            \"solr_param_request_handler\": {\n+                                \"defaultValue\": \"/select\",\n+                                \"description\": \"Define a request handler here, e. g. /query\",\n+                                \"displayName\": \"Request Handler\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"subfolder-name\",\n+                                \"name\": \"solr_param_request_handler\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_rows\": {\n+                                \"description\": \"Number of results to be returned for a single request\",\n+                                \"displayName\": \"Rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_rows\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_sort\": {\n+                                \"description\": \"Comma separated sort clauses to define the sorting of results, e. g. field1 asc, field2 desc\",\n+                                \"displayName\": \"Sorting of result list\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"solr_param_start\": {\n+                                \"description\": \"Offset of result set\",\n+                                \"displayName\": \"Start of results\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"solr_param_start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.ListBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Stats about Solr index\",\n+                                \"name\": \"stats\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n+                                \"description\": \"Results of Solr queries\",\n+                                \"name\": \"results\"\n+                            },\n+                            {\n+                                \"description\": \"Results of faceted search\",\n+                                \"name\": \"facets\"\n+                            },\n+                            {\n+                                \"description\": \"Failure relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Original flowfile\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"Apache\",\n+                            \"Get\",\n+                            \"Query\",\n+                            \"Records\",\n+                            \"Solr\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n-                        \"typeDescription\": \"Puts content to a Box folder.\",\n+                        \"type\": \"org.apache.nifi.processors.solr.QuerySolr\",\n+                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n+                                \"description\": \"Solr connect string\",\n+                                \"name\": \"solr.connect\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Solr collection\",\n+                                \"name\": \"solr.collection\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Query string sent to Solr\",\n+                                \"name\": \"solr.query\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n+                                \"description\": \"Cursor mark can be used for scrolling Solr\",\n+                                \"name\": \"solr.cursor.mark\"\n                             },\n                             {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n+                                \"description\": \"Status code of Solr request. A status code of 0 indicates that the request was successfully processed\",\n+                                \"name\": \"solr.status.code\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The elapsed time to process the query (in ms)\",\n+                                \"name\": \"solr.query.time\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"Solr start parameter (result offset) for the query\",\n+                                \"name\": \"solr.start\"\n+                            },\n+                            {\n+                                \"description\": \"Number of Solr documents to be returned for the query\",\n+                                \"name\": \"solr.rows\"\n+                            },\n+                            {\n+                                \"description\": \"Number of Solr documents that match the query\",\n+                                \"name\": \"solr.number.results\"\n+                            },\n+                            {\n+                                \"description\": \"The mime type of the data format\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"querysolr.exeption.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"querysolr.exeption.message\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"artifact\": \"nifi-asana-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-metrics-reporting-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-metrics-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal.\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The charset used by the graphite server\",\n+                                \"displayName\": \"Charset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"host\": {\n+                                \"description\": \"The hostname of the carbon listener\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"host\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"metric name prefix\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"A prefix that will be used for all metric names sent by reporters provided by this service.\",\n+                                \"displayName\": \"Metric Name Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"metric name prefix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"port\": {\n+                                \"description\": \"The port on which carbon listens\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"graphite\",\n+                            \"metrics\",\n+                            \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.GraphiteMetricReporterService\",\n+                        \"typeDescription\": \"A controller service that provides metric reporters for graphite. Used by MetricsReportingTask.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-metrics-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"metric reporter service\": {\n+                                \"description\": \"The service that provides a reporter for the gathered metrics\",\n+                                \"displayName\": \"Metric Reporter Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n+                                \"name\": \"metric reporter service\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"process group id\": {\n+                                \"description\": \"The id of the process group to report. If not specified, metrics of the root process groupare reported.\",\n+                                \"displayName\": \"Process Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n+                                \"name\": \"process group id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Password\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"metrics\",\n+                            \"reporting\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"type\": \"org.apache.nifi.metrics.reporting.task.MetricsReportingTask\",\n+                        \"typeDescription\": \"This reporting task reports a set of metrics regarding the JVM and the NiFi instanceto a reporter. The reporter is provided by a MetricReporterService. It can be optionally used for a specificprocess group if a property with the group id is provided.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-scripting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access ticket cache\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Ticket Cache File\": {\n-                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n-                                \"displayName\": \"Kerberos Ticket Cache File\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Ticket Cache File\",\n-                                \"required\": true,\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Cache\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Principal\",\n-                            \"Security\",\n-                            \"Ticket\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lookup\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. Please note, that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jolt-record-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jolt-record-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"jolt-record-custom-class\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Specification\",\n-                                        \"propertyName\": \"jolt-record-spec\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-record-custom-class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-record-custom-modules\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Specification\",\n-                                        \"propertyName\": \"jolt-record-spec\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"jolt-record-custom-modules\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"jolt-record-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"jolt-record-spec\": {\n-                                \"description\": \"Jolt Specification for transform of record data. This value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-record-spec\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-transform\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Change the cardinality of input elements to create the output.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Apply default values to the output.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when field name is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Remove values from input data to create the output.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Shift input data to create the output.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Sort input field name values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transformation DSL\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-transform\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-transform-cache-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-transform-cache-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"record\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lookup\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n-                        \"typeDescription\": \"Applies a list of Jolt specifications to the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-provenance-repository-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf. Please note that due to a bug in Jython that remains unresolved, it is not possible to use Jython to write a script for this service in Python.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be set on the Hadoop configuration after loading any provided configuration files.\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Hadoop configuration property.\",\n-                                \"value\": \"The value of the given Hadoop configuration property.\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Connection URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Driver Class Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database User\": {\n-                                \"description\": \"The user for the database\",\n-                                \"displayName\": \"Database User\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Total Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it get's dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Validation-query\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/phoenix-client.jar'. NOTE: It is required that the resources specified by this property provide the classes from hadoop-common, such as Configuration and UserGroupInformation.\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-driver-locations\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.\",\n-                                \"displayName\": \"Max Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The number of milliseconds to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hadoop-config-resources\": {\n-                                \"description\": \"A file, or comma separated list of files, which contain the Hadoop configuration (core-site.xml, etc.). Without this, Hadoop will search the classpath, or will revert to a default configuration. Note that to enable authentication with Kerberos, the appropriate properties must be set in the configuration files.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hadoop-config-resources\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hadoop\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"recordFactory\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.HadoopDBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides a Database Connection Pooling Service for Hadoop related JDBC services. This service requires that the Database Driver Location(s) contains some version of a hadoop-common JAR, or a shaded JAR that shades hadoop-common.\",\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"HBase Cache Table Name\": {\n-                                \"description\": \"Name of the table on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Cache Table Name\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Cache Table Name\",\n-                                \"required\": true,\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"HBase Client Service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HBase Client Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"HBase Column Family\": {\n-                                \"defaultValue\": \"f\",\n-                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Column Family\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Family\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HBase Column Qualifier\": {\n-                                \"defaultValue\": \"q\",\n-                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n-                                \"displayName\": \"HBase Column Qualifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Qualifier\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n-                                \"required\": false,\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hbase-cache-visibility-expression\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n-                                \"displayName\": \"Visibility Expression\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hbase-cache-visibility-expression\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.hbase.HBase_1_1_2_ClientService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"hbase\",\n-                            \"map\",\n-                            \"state\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"ruby\",\n+                            \"script\",\n+                            \"writer\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ClientMapCacheService\",\n-                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_1_1_2_ClientService controller to communicate with HBase.\",\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name of an HBase configuration property.\",\n-                                \"value\": \"The value of the given HBase configuration property.\"\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"HBase Client Retries\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"HBase Client Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Client Retries\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Files\": {\n-                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n-                                \"displayName\": \"Hadoop Configuration Files\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Files\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Phoenix Client JAR Location\": {\n-                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n-                                \"displayName\": \"Phoenix Client JAR Location\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Phoenix Client JAR Location\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Port\": {\n-                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Client Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Client Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Quorum\": {\n-                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Quorum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Quorum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper ZNode Parent\": {\n-                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper ZNode Parent\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper ZNode Parent\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hbase\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"record\",\n+                            \"record sink\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ClientService\",\n-                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 1.1.x client. Although this service was originally built with the 1.1.2 client and has 1_1_2 in it's name, the client library has since been upgraded to 1.1.13 to leverage bug fixes. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n+                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-charset\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-list-return-type\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Return the row as a list of the column qualifiers (keys)\",\n-                                        \"displayName\": \"List of keys\",\n-                                        \"value\": \"key_list\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Return the row as a list of the values associated with each column qualifier.\",\n-                                        \"displayName\": \"List of values\",\n-                                        \"value\": \"value_list\"\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"key_list\",\n-                                \"description\": \"Choose whether to return a list of the keys or a list of the values for the supplied row key.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-list-return-type\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-return-cols\": {\n-                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n-                                \"displayName\": \"Columns\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-return-cols\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"hb-lu-table-name\": {\n-                                \"description\": \"The name of the table where look ups will be run.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hbase-client-service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hbase-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.rules.engine.RulesEngineService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ListLookupService\",\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"rules\",\n+                            \"rules engine\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.rules.engine.script.ScriptedRulesEngine\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RulesEngineService for custom firing of rules depending on the supplied facts. The script must set a variable 'rulesEngine' to an implementation of RulesEngineService.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hb-lu-return-cols\": {\n-                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n-                                \"displayName\": \"Columns\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-return-cols\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-table-name\": {\n-                                \"description\": \"The name of the table where look ups will be run.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-table-name\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hbase-client-service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hbase-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.rules.PropertyContextActionHandler\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"hbase\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"service\"\n+                            \"action\",\n+                            \"action handler\",\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"rules\",\n+                            \"rules engine\",\n+                            \"script\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_RecordLookupService\",\n-                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n+                        \"type\": \"org.apache.nifi.rules.handlers.script.ScriptedActionHandler\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted ActionHandler for custom firing of rules depending on the supplied facts. The script must set a variable 'actionHandler' to an implementation of ActionHandler.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19529,134 +20041,171 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n-                                \"displayName\": \"Query\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"lua 5.2 [Luaj Luaj-jse 3.0.1]\",\n+                                        \"displayName\": \"lua DEPRECATED\",\n+                                        \"value\": \"lua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Clojure\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"FlowFiles that were successfully processed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"FlowFiles that failed to be processed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\"\n+                            \"clojure\",\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n-                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n-                                \"name\": \"elasticsearch.delete.took\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n-                                \"name\": \"elasticsearch.delete.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n+                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19666,180 +20215,150 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"get-es-attribute-name\": {\n-                                \"defaultValue\": \"elasticsearch.doc\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"get-es-destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n-                                \"displayName\": \"Attribute Name\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"get-es-attribute-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"get-es-destination\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n-                                        \"displayName\": \"FlowFile Attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-es-destination\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"get-es-id\": {\n-                                \"description\": \"The _id of the document to retrieve.\",\n-                                \"displayName\": \"Document Id\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"get-es-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Fetched documents are routed to this relationship.\",\n-                                \"name\": \"document\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n-                                \"name\": \"not_found\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n                         ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"ruby\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n-                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"elasticsearch.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"elasticsearch.type\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n-                                \"name\": \"elasticsearch.get.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n+                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -19848,279 +20367,205 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n                                 \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"get\",\n-                            \"json\",\n-                            \"query\",\n-                            \"read\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -20129,1435 +20574,1286 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"scroll\\\" to page results.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" to page sorted results.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n                                 \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n+                            \"groovy\",\n+                            \"group\",\n+                            \"jython\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n+                                \"name\": \"partition\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The number of the page (request) in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"The value of the Bulk request header\"\n-                            },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-dynamic_templates\": {\n-                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-dynamic_templates\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-error-documents\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this configuration property is true, the response from Elasticsearch will be examined for failed documents and the FlowFile(s) associated with the failed document(s) will be sent to the \\\"errors\\\" relationship with \\\"elasticsearch.bulk.error\\\" attributes.\",\n-                                \"displayName\": \"Output Error Documents\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-error-documents\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"put-es-json-id-attr\": {\n-                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n-                                \"displayName\": \"Identifier Attribute\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-id-attr\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-not_found-is-error\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Error Documents\",\n-                                        \"propertyName\": \"put-es-json-error-documents\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated FlowFiles will be routed to the \\\"success\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-not_found-is-error\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-script\": {\n-                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n-                                \"displayName\": \"Script\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-script\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-json-scripted-upsert\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-scripted-upsert\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-output-error-responses\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to send over in a single batch.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-log-error-responses\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ExecuteScript\",\n+                            \"org.apache.nifi.processors.standard.LookupRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"If a \\\"Output Error Documents\\\" is set, any FlowFile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"modify\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"transform\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n-                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n-                                \"name\": \"elasticsearch.put.error\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"The value of the Bulk request header\"\n-                            },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-output-error-responses\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ECMAScript\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lua\",\n+                                        \"value\": \"lua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ruby\",\n+                                        \"value\": \"ruby\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp\": {\n-                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n-                                \"displayName\": \"@timestamp Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n+                                \"name\": \"Script Engine\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-date-format\": {\n-                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-date-format\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"put-es-record-at-timestamp-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n-                                \"displayName\": \"@timestamp Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"invalid\"\n                             },\n-                            \"put-es-record-at-timestamp-time-format\": {\n-                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-time-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"put-es-record-at-timestamp-timestamp-format\": {\n-                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"jython\",\n+                            \"python\",\n+                            \"record\",\n+                            \"script\",\n+                            \"validate\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to send over in a single batch.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n-                            \"put-es-record-dynamic-templates-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates Record Path\",\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-dynamic-templates-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-error-writer\": {\n-                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful_records\\\" relationship.\",\n-                                \"displayName\": \"Result Record Writer\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-error-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"put-es-record-id-path\": {\n-                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n-                                \"displayName\": \"ID Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-id-path\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ECMAScript ECMA - 262 Edition 5.1 [Oracle Nashorn 1.8.0_422]\",\n+                                        \"displayName\": \"ECMAScript DEPRECATED\",\n+                                        \"value\": \"ECMAScript\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 3.0.17 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"python 2.7 [jython 2.7.3]\",\n+                                        \"displayName\": \"python\",\n+                                        \"value\": \"python\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ruby jruby 9.4.2.0 [JSR 223 JRuby Engine 9.4.2.0]\",\n+                                        \"displayName\": \"ruby DEPRECATED\",\n+                                        \"value\": \"ruby\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ECMAScript\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op-path\": {\n-                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n-                                \"displayName\": \"Index Operation Record Path\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op-path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n-                                \"displayName\": \"Index Record Path\",\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"javascript\",\n+                            \"jruby\",\n+                            \"js\",\n+                            \"jython\",\n+                            \"lua\",\n+                            \"luaj\",\n+                            \"python\",\n+                            \"reporting\",\n+                            \"ruby\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n+                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-client-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-email-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"The supporting ews-java-api library is no longer maintained\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-log-error-responses\": {\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"delete.messages\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-not_found-is-error\": {\n+                            \"ews-autodiscover\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Result Record Writer\",\n-                                        \"propertyName\": \"put-es-record-error-writer\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful_records\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n+                                \"description\": \"Whether or not to use the Exchange email address to Autodiscover the EWS endpoint URL.\",\n+                                \"displayName\": \"Auto Discover URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-not_found-is-error\",\n+                                \"name\": \"ews-autodiscover\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ews-exclude-headers\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"Comma delimited list specifying which headers from the original message to exclude in the exported email message. Blank means don't exclude any headers.\",\n+                                \"displayName\": \"Original Headers to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ews-exclude-headers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-reader\": {\n-                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ews-include-headers\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"Comma delimited list specifying which headers from the original message to include in the exported email message. Blank means copy all headers. Some headers can cause problems with message parsing, specifically the 'Content-Type' header.\",\n+                                \"displayName\": \"Original Headers to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"ews-include-headers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"put-es-record-retain-at-timestamp-field\": {\n+                            \"ews-mark-as-read\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n-                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n-                                \"displayName\": \"Retain @timestamp (Record Path)\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n+                                \"displayName\": \"Mark Messages as Read\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ews-mark-as-read\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ews-url\": {\n+                                \"description\": \"URL of the EWS Endpoint. Required if Autodiscover is false.\",\n+                                \"displayName\": \"EWS URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ews-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-retain-id-field\": {\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fetch.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mail-ews-version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Exchange2007_SP1\",\n+                                        \"value\": \"Exchange2007_SP1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Exchange2010\",\n+                                        \"value\": \"Exchange2010\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"ID Record Path\",\n-                                        \"propertyName\": \"put-es-record-id-path\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Exchange2010_SP1\",\n+                                        \"value\": \"Exchange2010_SP1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Exchange2010_SP2\",\n+                                        \"value\": \"Exchange2010_SP2\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n-                                \"displayName\": \"Retain ID (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-id-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-script-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n-                                \"displayName\": \"Script Record Path\",\n+                                \"defaultValue\": \"Exchange2010_SP2\",\n+                                \"description\": \"What version of Exchange Server the server is running.\",\n+                                \"displayName\": \"Exchange Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-script-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mail-ews-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-scripted-upsert-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert Record Path\",\n+                            \"password\": {\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-scripted-upsert-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"put-es-record-type-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n-                                \"displayName\": \"Type Record Path\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful_records\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"Consume\",\n+                            \"EWS\",\n+                            \"Email\",\n+                            \"Exchange\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n-                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n-                                \"name\": \"elasticsearch.put.error\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.error.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.success.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumeEWS\",\n+                        \"typeDescription\": \"Consumes messages from Microsoft Exchange using Exchange Web Services. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Mark Messages as Read\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n+                                \"displayName\": \"Mark Messages as Read\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"Mark Messages as Read\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Use SSL\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n+                                \"displayName\": \"Use SSL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Use SSL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"scroll\\\" to page results.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" to page sorted results.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}.\",\n-                                \"displayName\": \"Query\",\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-rest-query\",\n+                                \"name\": \"host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    },\n+                            \"password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n-                                    }\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"port\": {\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Imap\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the page (request) in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21565,1011 +21861,479 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n-                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n-                                \"name\": \"elasticsearch.update.took\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n-                                \"name\": \"elasticsearch.update.error\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-0-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n+                            \"password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"port\": {\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\",\n+                            \"POP3\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_0\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.x topic.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Flowfiles that could not be parsed\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.attachment.parent.filename \"\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.attachment.parent.uuid\"\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            {\n+                                \"description\": \"The mime type of the attachment.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"CAPTURED_HEADERS\": {\n+                                \"defaultValue\": \"x-mailer\",\n+                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n+                                \"displayName\": \"Additional Header List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"name\": \"CAPTURED_HEADERS\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"STRICT_ADDRESS_PARSING\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n+                                        \"displayName\": \"Strict Address Parsing\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n+                                        \"displayName\": \"Non-Strict Address Parsing\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n+                                \"displayName\": \"Email Address Parsing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"STRICT_ADDRESS_PARSING\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Extraction was successful\",\n+                                \"name\": \"success\"\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n+                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Each individual BCC recipient (if available)\",\n+                                \"name\": \"email.headers.bcc.*\"\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"Each individual CC recipient (if available)\",\n+                                \"name\": \"email.headers.cc.*\"\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n+                                \"name\": \"email.headers.from.*\"\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The value of the Message-ID header (if available)\",\n+                                \"name\": \"email.headers.message-id\"\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The Received-Date of the message (if available)\",\n+                                \"name\": \"email.headers.received_date\"\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Date the message was sent\",\n+                                \"name\": \"email.headers.sent_date\"\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                            {\n+                                \"description\": \"Subject of the message (if available)\",\n+                                \"name\": \"email.headers.subject\"\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Each individual TO recipient (if available)\",\n+                                \"name\": \"email.headers.to.*\"\n                             },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Number of attachments of the message\",\n+                                \"name\": \"email.attachment_count\"\n                             }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"2.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.tnef.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.tnef.attachment.parent.uuid\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -22577,9867 +22341,9532 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n+                            \"CLIENT_AUTH\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n+                                \"name\": \"CLIENT_AUTH\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"SMTP_HOSTNAME\": {\n+                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n+                                \"displayName\": \"SMTP hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"SMTP_HOSTNAME\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n+                                \"displayName\": \"Maximum number of SMTP connection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum number of bytes the server will accept.\",\n+                                \"displayName\": \"SMTP Maximum Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"SMTP_PORT\": {\n+                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"SMTP_PORT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            \"SMTP_TIMEOUT\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n+                                \"displayName\": \"SMTP connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n+                                \"name\": \"SMTP_TIMEOUT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"SSL_CONTEXT_SERVICE\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"SSL_CONTEXT_SERVICE\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"2.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"email\",\n+                            \"listen\",\n+                            \"smtp\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_0.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n+                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n+                                \"description\": \"The value used during HELO\",\n+                                \"name\": \"smtp.helo\"\n                             },\n                             {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n+                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.serial\"\n                             },\n                             {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n+                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.principal\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"The source IP and port of the SMTP connection\",\n+                                \"name\": \"smtp.src\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n+                                \"name\": \"smtp.from\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n+                                \"name\": \"smtp.recipient.*\"\n+                            },\n+                            {\n+                                \"description\": \"Mime type of the message\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-splunk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"Application\": {\n+                                \"description\": \"The Splunk Application to query.\",\n+                                \"displayName\": \"Application\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Application\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ack.wait.time\": {\n+                            \"Connection Timeout\": {\n                                 \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"description\": \"Max wait time for connection to the Splunk server.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"Earliest Time\": {\n+                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Earliest Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n+                                \"name\": \"Earliest Time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"Latest Time\": {\n+                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Latest Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Latest Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n+                            \"Output Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"ATOM\",\n+                                        \"value\": \"ATOM\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"CSV\",\n+                                        \"value\": \"CSV\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"JSON_COLS\",\n+                                        \"value\": \"JSON_COLS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JSON_ROWS\",\n+                                        \"value\": \"JSON_ROWS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"JSON\",\n+                                \"description\": \"The output mode for the results.\",\n+                                \"displayName\": \"Output Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"Output Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8089\",\n+                                \"description\": \"The port of the Splunk server.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Query\": {\n+                                \"defaultValue\": \"search * | head 100\",\n+                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"Query\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-key-field\": {\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n+                            \"Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from the Splunk server.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Read Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                            \"Scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Scheme\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Time Field Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n+                                        \"displayName\": \"Event Time\",\n+                                        \"value\": \"Event Time\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n+                                        \"displayName\": \"Index Time\",\n+                                        \"value\": \"Index Time\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Event Time\",\n+                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n+                                \"displayName\": \"Time Field Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Time Field Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"Time Range Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n+                                        \"displayName\": \"Managed from Beginning\",\n+                                        \"value\": \"Managed from Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n+                                        \"displayName\": \"Managed from Current\",\n+                                        \"value\": \"Managed from Current\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n+                                        \"displayName\": \"Provided\",\n+                                        \"value\": \"Provided\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"Provided\",\n+                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n+                                \"displayName\": \"Time Range Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Time Range Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n+                            \"Time Zone\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Abidjan\",\n+                                        \"value\": \"Africa/Abidjan\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Accra\",\n+                                        \"value\": \"Africa/Accra\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Addis_Ababa\",\n+                                        \"value\": \"Africa/Addis_Ababa\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Algiers\",\n+                                        \"value\": \"Africa/Algiers\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Asmara\",\n+                                        \"value\": \"Africa/Asmara\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"Africa/Asmera\",\n+                                        \"value\": \"Africa/Asmera\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Bamako\",\n+                                        \"value\": \"Africa/Bamako\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Bangui\",\n+                                        \"value\": \"Africa/Bangui\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Banjul\",\n+                                        \"value\": \"Africa/Banjul\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_0.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-0-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Bissau\",\n+                                        \"value\": \"Africa/Bissau\"\n+                                    },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Blantyre\",\n+                                        \"value\": \"Africa/Blantyre\"\n                                     },\n                                     {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Brazzaville\",\n+                                        \"value\": \"Africa/Brazzaville\"\n+                                    },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bujumbura\",\n+                                        \"value\": \"Africa/Bujumbura\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Cairo\",\n+                                        \"value\": \"Africa/Cairo\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Casablanca\",\n+                                        \"value\": \"Africa/Casablanca\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ceuta\",\n+                                        \"value\": \"Africa/Ceuta\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"displayName\": \"Africa/Conakry\",\n+                                        \"value\": \"Africa/Conakry\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"Africa/Dakar\",\n+                                        \"value\": \"Africa/Dakar\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n+                                        \"value\": \"Africa/Dar_es_Salaam\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Djibouti\",\n+                                        \"value\": \"Africa/Djibouti\"\n+                                    },\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Douala\",\n+                                        \"value\": \"Africa/Douala\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/El_Aaiun\",\n+                                        \"value\": \"Africa/El_Aaiun\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Freetown\",\n+                                        \"value\": \"Africa/Freetown\"\n+                                    },\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Gaborone\",\n+                                        \"value\": \"Africa/Gaborone\"\n                                     },\n                                     {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Harare\",\n+                                        \"value\": \"Africa/Harare\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Johannesburg\",\n+                                        \"value\": \"Africa/Johannesburg\"\n+                                    },\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Juba\",\n+                                        \"value\": \"Africa/Juba\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kampala\",\n+                                        \"value\": \"Africa/Kampala\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Khartoum\",\n+                                        \"value\": \"Africa/Khartoum\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kigali\",\n+                                        \"value\": \"Africa/Kigali\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Kinshasa\",\n+                                        \"value\": \"Africa/Kinshasa\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Lagos\",\n+                                        \"value\": \"Africa/Lagos\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Libreville\",\n+                                        \"value\": \"Africa/Libreville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Lome\",\n+                                        \"value\": \"Africa/Lome\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Luanda\",\n+                                        \"value\": \"Africa/Luanda\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Lubumbashi\",\n+                                        \"value\": \"Africa/Lubumbashi\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"Africa/Lusaka\",\n+                                        \"value\": \"Africa/Lusaka\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"Africa/Malabo\",\n+                                        \"value\": \"Africa/Malabo\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Maputo\",\n+                                        \"value\": \"Africa/Maputo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Maseru\",\n+                                        \"value\": \"Africa/Maseru\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"2.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_0.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-doc-id\": {\n-                                \"description\": \"The identifier of the document to be fetched\",\n-                                \"displayName\": \"Document Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-doc-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-index\": {\n-                                \"description\": \"The name of the index to read from.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch-es-type\": {\n-                                \"description\": \"The type of document/fetch (if unset, the first document matching the identifier across _all types will be retrieved). This should be unset, '_doc' or '_source' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"fetch-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"not found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"fetch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"read\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.FetchElasticsearchHttp\",\n-                        \"typeDescription\": \"Retrieves a document from Elasticsearch using the specified connection properties and the identifier of the document to retrieve. Note that the full body of the document will be read into memory before being written to a Flow File for transfer.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of flow files to put to the database in a single transaction. Note that the contents of the flow files will be stored in memory until the bulk operation is performed. Also the results should be returned in the same order the flow files were received.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-es-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-id-attr\": {\n-                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n-                                \"displayName\": \"Identifier Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-id-attr\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-index\": {\n-                                \"description\": \"The name of the index to insert into\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-type\": {\n-                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"elasticsearch\",\n-                            \"http\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"update\",\n-                            \"upsert\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttp\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp\": {\n-                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n-                                \"displayName\": \"@timestamp Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-at-timestamp-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n-                                \"displayName\": \"@timestamp Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-id-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the identifier for the document. If the Index Operation is \\\"index\\\" or \\\"create\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the field's value must be non-empty.\",\n-                                \"displayName\": \"Identifier Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-id-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index\": {\n-                                \"description\": \"The name of the index to insert into\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, index, update, upsert, delete)\",\n-                                \"displayName\": \"Index Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-log-all-errors\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Mbabane\",\n+                                        \"value\": \"Africa/Mbabane\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Mogadishu\",\n+                                        \"value\": \"Africa/Mogadishu\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mapping for the index it is being inserted into. If this is set to true, the processor will log the failure reason for the every failed record. When set to false only the first error in the batch will be logged.\",\n-                                \"displayName\": \"Log all errors in batch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-all-errors\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"put-es-record-record-writer\": {\n-                                \"description\": \"After sending a batch of records, Elasticsearch will report if individual records failed to insert. As an example, this can happen if the record doesn't match the mappingfor the index it is being inserted into. This property specifies the Controller Service to use for writing out those individual records sent to 'failure'. If this is not set, then the whole FlowFile will be routed to failure (including any records which may have been inserted successfully). Note that this will only be used if Elasticsearch reports that individual records failed and that in the event that the entire FlowFile fails (e.g. in the event ES is down), the FF will be routed to failure without being interpreted by this record writer. If there is an error while attempting to route the failures, the entire FlowFile will be routed to Failure. Also if every record failed individually, the entire FlowFile will be routed to Failure without being parsed by the writer.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"put-es-record-type\": {\n-                                \"description\": \"The type of this document (required by Elasticsearch versions < 7.0 for indexing and searching). This must be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"suppress-nulls\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Monrovia\",\n+                                        \"value\": \"Africa/Monrovia\"\n+                                    },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Nairobi\",\n+                                        \"value\": \"Africa/Nairobi\"\n                                     },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ndjamena\",\n+                                        \"value\": \"Africa/Ndjamena\"\n                                     },\n                                     {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress-nulls\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to Elasticsearch are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"elasticsearch\",\n-                            \"http\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchHttpRecord\",\n-                        \"typeDescription\": \"Writes the records from a FlowFile into to Elasticsearch, using the specified parameters such as the index to insert into and the type of the document, as well as the operation type (index, upsert, delete, etc.). Note: The Bulk API is used to send the records. This means that the entire contents of the incoming flow file are read into memory, and each record is transformed into a JSON document which is added to a single HTTP request body. For very large flow files (files with a large number of records, e.g.), this could cause memory usage issues.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records found by Elasticsearch to have errors. This is only populated on the 'failure' relationship.\",\n-                                \"name\": \"failure.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-index\": {\n-                                \"description\": \"The name of the index to read from. If the property is unset or set to _all, the query will match across all indexes.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-limit\": {\n-                                \"description\": \"If set, limits the number of results that will be returned.\",\n-                                \"displayName\": \"Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-query\": {\n-                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-sort\": {\n-                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"query-es-target\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Niamey\",\n+                                        \"value\": \"Africa/Niamey\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Flow file content\",\n-                                        \"value\": \"Flow file content\"\n+                                        \"displayName\": \"Africa/Nouakchott\",\n+                                        \"value\": \"Africa/Nouakchott\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Flow file attributes\",\n-                                        \"value\": \"Flow file attributes\"\n+                                        \"displayName\": \"Africa/Ouagadougou\",\n+                                        \"value\": \"Africa/Ouagadougou\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Porto-Novo\",\n+                                        \"value\": \"Africa/Porto-Novo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Sao_Tome\",\n+                                        \"value\": \"Africa/Sao_Tome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Timbuktu\",\n+                                        \"value\": \"Africa/Timbuktu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Tripoli\",\n+                                        \"value\": \"Africa/Tripoli\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Tunis\",\n+                                        \"value\": \"Africa/Tunis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Windhoek\",\n+                                        \"value\": \"Africa/Windhoek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Adak\",\n+                                        \"value\": \"America/Adak\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anchorage\",\n+                                        \"value\": \"America/Anchorage\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anguilla\",\n+                                        \"value\": \"America/Anguilla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Antigua\",\n+                                        \"value\": \"America/Antigua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Araguaina\",\n+                                        \"value\": \"America/Araguaina\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n+                                        \"value\": \"America/Argentina/Buenos_Aires\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Catamarca\",\n+                                        \"value\": \"America/Argentina/Catamarca\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n+                                        \"value\": \"America/Argentina/ComodRivadavia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Cordoba\",\n+                                        \"value\": \"America/Argentina/Cordoba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Jujuy\",\n+                                        \"value\": \"America/Argentina/Jujuy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/La_Rioja\",\n+                                        \"value\": \"America/Argentina/La_Rioja\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Mendoza\",\n+                                        \"value\": \"America/Argentina/Mendoza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n+                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Salta\",\n+                                        \"value\": \"America/Argentina/Salta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Juan\",\n+                                        \"value\": \"America/Argentina/San_Juan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Luis\",\n+                                        \"value\": \"America/Argentina/San_Luis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Tucuman\",\n+                                        \"value\": \"America/Argentina/Tucuman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Ushuaia\",\n+                                        \"value\": \"America/Argentina/Ushuaia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Aruba\",\n+                                        \"value\": \"America/Aruba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Asuncion\",\n+                                        \"value\": \"America/Asuncion\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atikokan\",\n+                                        \"value\": \"America/Atikokan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atka\",\n+                                        \"value\": \"America/Atka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia\",\n+                                        \"value\": \"America/Bahia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia_Banderas\",\n+                                        \"value\": \"America/Bahia_Banderas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Barbados\",\n+                                        \"value\": \"America/Barbados\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belem\",\n+                                        \"value\": \"America/Belem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belize\",\n+                                        \"value\": \"America/Belize\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Blanc-Sablon\",\n+                                        \"value\": \"America/Blanc-Sablon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boa_Vista\",\n+                                        \"value\": \"America/Boa_Vista\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bogota\",\n+                                        \"value\": \"America/Bogota\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boise\",\n+                                        \"value\": \"America/Boise\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Buenos_Aires\",\n+                                        \"value\": \"America/Buenos_Aires\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cambridge_Bay\",\n+                                        \"value\": \"America/Cambridge_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Campo_Grande\",\n+                                        \"value\": \"America/Campo_Grande\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cancun\",\n+                                        \"value\": \"America/Cancun\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Caracas\",\n+                                        \"value\": \"America/Caracas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Catamarca\",\n+                                        \"value\": \"America/Catamarca\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayenne\",\n+                                        \"value\": \"America/Cayenne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayman\",\n+                                        \"value\": \"America/Cayman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Chicago\",\n+                                        \"value\": \"America/Chicago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Chihuahua\",\n+                                        \"value\": \"America/Chihuahua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ciudad_Juarez\",\n+                                        \"value\": \"America/Ciudad_Juarez\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Coral_Harbour\",\n+                                        \"value\": \"America/Coral_Harbour\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cordoba\",\n+                                        \"value\": \"America/Cordoba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Costa_Rica\",\n+                                        \"value\": \"America/Costa_Rica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Creston\",\n+                                        \"value\": \"America/Creston\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cuiaba\",\n+                                        \"value\": \"America/Cuiaba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Curacao\",\n+                                        \"value\": \"America/Curacao\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Danmarkshavn\",\n+                                        \"value\": \"America/Danmarkshavn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson\",\n+                                        \"value\": \"America/Dawson\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson_Creek\",\n+                                        \"value\": \"America/Dawson_Creek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Denver\",\n+                                        \"value\": \"America/Denver\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Detroit\",\n+                                        \"value\": \"America/Detroit\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dominica\",\n+                                        \"value\": \"America/Dominica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Edmonton\",\n+                                        \"value\": \"America/Edmonton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Eirunepe\",\n+                                        \"value\": \"America/Eirunepe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/El_Salvador\",\n+                                        \"value\": \"America/El_Salvador\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ensenada\",\n+                                        \"value\": \"America/Ensenada\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Nelson\",\n+                                        \"value\": \"America/Fort_Nelson\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Wayne\",\n+                                        \"value\": \"America/Fort_Wayne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fortaleza\",\n+                                        \"value\": \"America/Fortaleza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Glace_Bay\",\n+                                        \"value\": \"America/Glace_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Godthab\",\n+                                        \"value\": \"America/Godthab\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Goose_Bay\",\n+                                        \"value\": \"America/Goose_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grand_Turk\",\n+                                        \"value\": \"America/Grand_Turk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grenada\",\n+                                        \"value\": \"America/Grenada\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guadeloupe\",\n+                                        \"value\": \"America/Guadeloupe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guatemala\",\n+                                        \"value\": \"America/Guatemala\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guayaquil\",\n+                                        \"value\": \"America/Guayaquil\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guyana\",\n+                                        \"value\": \"America/Guyana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Halifax\",\n+                                        \"value\": \"America/Halifax\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Havana\",\n+                                        \"value\": \"America/Havana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Hermosillo\",\n+                                        \"value\": \"America/Hermosillo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Indianapolis\",\n+                                        \"value\": \"America/Indiana/Indianapolis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Knox\",\n+                                        \"value\": \"America/Indiana/Knox\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Marengo\",\n+                                        \"value\": \"America/Indiana/Marengo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Petersburg\",\n+                                        \"value\": \"America/Indiana/Petersburg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Tell_City\",\n+                                        \"value\": \"America/Indiana/Tell_City\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Vevay\",\n+                                        \"value\": \"America/Indiana/Vevay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Vincennes\",\n+                                        \"value\": \"America/Indiana/Vincennes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Winamac\",\n+                                        \"value\": \"America/Indiana/Winamac\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indianapolis\",\n+                                        \"value\": \"America/Indianapolis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Inuvik\",\n+                                        \"value\": \"America/Inuvik\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Iqaluit\",\n+                                        \"value\": \"America/Iqaluit\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Jamaica\",\n+                                        \"value\": \"America/Jamaica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Jujuy\",\n+                                        \"value\": \"America/Jujuy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Juneau\",\n+                                        \"value\": \"America/Juneau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Louisville\",\n+                                        \"value\": \"America/Kentucky/Louisville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Monticello\",\n+                                        \"value\": \"America/Kentucky/Monticello\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Knox_IN\",\n+                                        \"value\": \"America/Knox_IN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kralendijk\",\n+                                        \"value\": \"America/Kralendijk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/La_Paz\",\n+                                        \"value\": \"America/La_Paz\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Lima\",\n+                                        \"value\": \"America/Lima\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Los_Angeles\",\n+                                        \"value\": \"America/Los_Angeles\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Louisville\",\n+                                        \"value\": \"America/Louisville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Lower_Princes\",\n+                                        \"value\": \"America/Lower_Princes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Maceio\",\n+                                        \"value\": \"America/Maceio\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Managua\",\n+                                        \"value\": \"America/Managua\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Manaus\",\n+                                        \"value\": \"America/Manaus\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Marigot\",\n+                                        \"value\": \"America/Marigot\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Martinique\",\n+                                        \"value\": \"America/Martinique\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Matamoros\",\n+                                        \"value\": \"America/Matamoros\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mazatlan\",\n+                                        \"value\": \"America/Mazatlan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mendoza\",\n+                                        \"value\": \"America/Mendoza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Menominee\",\n+                                        \"value\": \"America/Menominee\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Merida\",\n+                                        \"value\": \"America/Merida\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Metlakatla\",\n+                                        \"value\": \"America/Metlakatla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Mexico_City\",\n+                                        \"value\": \"America/Mexico_City\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Miquelon\",\n+                                        \"value\": \"America/Miquelon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Moncton\",\n+                                        \"value\": \"America/Moncton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Monterrey\",\n+                                        \"value\": \"America/Monterrey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montevideo\",\n+                                        \"value\": \"America/Montevideo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montreal\",\n+                                        \"value\": \"America/Montreal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montserrat\",\n+                                        \"value\": \"America/Montserrat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nassau\",\n+                                        \"value\": \"America/Nassau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/New_York\",\n+                                        \"value\": \"America/New_York\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nipigon\",\n+                                        \"value\": \"America/Nipigon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nome\",\n+                                        \"value\": \"America/Nome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Noronha\",\n+                                        \"value\": \"America/Noronha\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Beulah\",\n+                                        \"value\": \"America/North_Dakota/Beulah\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Center\",\n+                                        \"value\": \"America/North_Dakota/Center\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n+                                        \"value\": \"America/North_Dakota/New_Salem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nuuk\",\n+                                        \"value\": \"America/Nuuk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ojinaga\",\n+                                        \"value\": \"America/Ojinaga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Panama\",\n+                                        \"value\": \"America/Panama\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Pangnirtung\",\n+                                        \"value\": \"America/Pangnirtung\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Paramaribo\",\n+                                        \"value\": \"America/Paramaribo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Phoenix\",\n+                                        \"value\": \"America/Phoenix\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port-au-Prince\",\n+                                        \"value\": \"America/Port-au-Prince\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port_of_Spain\",\n+                                        \"value\": \"America/Port_of_Spain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Acre\",\n+                                        \"value\": \"America/Porto_Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Velho\",\n+                                        \"value\": \"America/Porto_Velho\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Puerto_Rico\",\n+                                        \"value\": \"America/Puerto_Rico\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Punta_Arenas\",\n+                                        \"value\": \"America/Punta_Arenas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rainy_River\",\n+                                        \"value\": \"America/Rainy_River\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rankin_Inlet\",\n+                                        \"value\": \"America/Rankin_Inlet\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Recife\",\n+                                        \"value\": \"America/Recife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Regina\",\n+                                        \"value\": \"America/Regina\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Resolute\",\n+                                        \"value\": \"America/Resolute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rio_Branco\",\n+                                        \"value\": \"America/Rio_Branco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rosario\",\n+                                        \"value\": \"America/Rosario\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santa_Isabel\",\n+                                        \"value\": \"America/Santa_Isabel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santarem\",\n+                                        \"value\": \"America/Santarem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santiago\",\n+                                        \"value\": \"America/Santiago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santo_Domingo\",\n+                                        \"value\": \"America/Santo_Domingo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sao_Paulo\",\n+                                        \"value\": \"America/Sao_Paulo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Scoresbysund\",\n+                                        \"value\": \"America/Scoresbysund\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Shiprock\",\n+                                        \"value\": \"America/Shiprock\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sitka\",\n+                                        \"value\": \"America/Sitka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Barthelemy\",\n+                                        \"value\": \"America/St_Barthelemy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Johns\",\n+                                        \"value\": \"America/St_Johns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Kitts\",\n+                                        \"value\": \"America/St_Kitts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Lucia\",\n+                                        \"value\": \"America/St_Lucia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Thomas\",\n+                                        \"value\": \"America/St_Thomas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Vincent\",\n+                                        \"value\": \"America/St_Vincent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Swift_Current\",\n+                                        \"value\": \"America/Swift_Current\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tegucigalpa\",\n+                                        \"value\": \"America/Tegucigalpa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thule\",\n+                                        \"value\": \"America/Thule\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thunder_Bay\",\n+                                        \"value\": \"America/Thunder_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tijuana\",\n+                                        \"value\": \"America/Tijuana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Toronto\",\n+                                        \"value\": \"America/Toronto\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tortola\",\n+                                        \"value\": \"America/Tortola\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Vancouver\",\n+                                        \"value\": \"America/Vancouver\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Virgin\",\n+                                        \"value\": \"America/Virgin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Whitehorse\",\n+                                        \"value\": \"America/Whitehorse\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Winnipeg\",\n+                                        \"value\": \"America/Winnipeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yakutat\",\n+                                        \"value\": \"America/Yakutat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yellowknife\",\n+                                        \"value\": \"America/Yellowknife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Casey\",\n+                                        \"value\": \"Antarctica/Casey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Davis\",\n+                                        \"value\": \"Antarctica/Davis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/DumontDUrville\",\n+                                        \"value\": \"Antarctica/DumontDUrville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Macquarie\",\n+                                        \"value\": \"Antarctica/Macquarie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Mawson\",\n+                                        \"value\": \"Antarctica/Mawson\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/McMurdo\",\n+                                        \"value\": \"Antarctica/McMurdo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Palmer\",\n+                                        \"value\": \"Antarctica/Palmer\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Rothera\",\n+                                        \"value\": \"Antarctica/Rothera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/South_Pole\",\n+                                        \"value\": \"Antarctica/South_Pole\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Syowa\",\n+                                        \"value\": \"Antarctica/Syowa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Troll\",\n+                                        \"value\": \"Antarctica/Troll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Vostok\",\n+                                        \"value\": \"Antarctica/Vostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Arctic/Longyearbyen\",\n+                                        \"value\": \"Arctic/Longyearbyen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aden\",\n+                                        \"value\": \"Asia/Aden\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Almaty\",\n+                                        \"value\": \"Asia/Almaty\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Amman\",\n+                                        \"value\": \"Asia/Amman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Anadyr\",\n+                                        \"value\": \"Asia/Anadyr\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtau\",\n+                                        \"value\": \"Asia/Aqtau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtobe\",\n+                                        \"value\": \"Asia/Aqtobe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashgabat\",\n+                                        \"value\": \"Asia/Ashgabat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashkhabad\",\n+                                        \"value\": \"Asia/Ashkhabad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Atyrau\",\n+                                        \"value\": \"Asia/Atyrau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baghdad\",\n+                                        \"value\": \"Asia/Baghdad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bahrain\",\n+                                        \"value\": \"Asia/Bahrain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baku\",\n+                                        \"value\": \"Asia/Baku\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bangkok\",\n+                                        \"value\": \"Asia/Bangkok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Barnaul\",\n+                                        \"value\": \"Asia/Barnaul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Beirut\",\n+                                        \"value\": \"Asia/Beirut\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bishkek\",\n+                                        \"value\": \"Asia/Bishkek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Brunei\",\n+                                        \"value\": \"Asia/Brunei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Calcutta\",\n+                                        \"value\": \"Asia/Calcutta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chita\",\n+                                        \"value\": \"Asia/Chita\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Choibalsan\",\n+                                        \"value\": \"Asia/Choibalsan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chongqing\",\n+                                        \"value\": \"Asia/Chongqing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chungking\",\n+                                        \"value\": \"Asia/Chungking\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Colombo\",\n+                                        \"value\": \"Asia/Colombo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dacca\",\n+                                        \"value\": \"Asia/Dacca\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Damascus\",\n+                                        \"value\": \"Asia/Damascus\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dhaka\",\n+                                        \"value\": \"Asia/Dhaka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dili\",\n+                                        \"value\": \"Asia/Dili\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dubai\",\n+                                        \"value\": \"Asia/Dubai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dushanbe\",\n+                                        \"value\": \"Asia/Dushanbe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Famagusta\",\n+                                        \"value\": \"Asia/Famagusta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Gaza\",\n+                                        \"value\": \"Asia/Gaza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Harbin\",\n+                                        \"value\": \"Asia/Harbin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hebron\",\n+                                        \"value\": \"Asia/Hebron\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n+                                        \"value\": \"Asia/Ho_Chi_Minh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hong_Kong\",\n+                                        \"value\": \"Asia/Hong_Kong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hovd\",\n+                                        \"value\": \"Asia/Hovd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Irkutsk\",\n+                                        \"value\": \"Asia/Irkutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Istanbul\",\n+                                        \"value\": \"Asia/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jakarta\",\n+                                        \"value\": \"Asia/Jakarta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jayapura\",\n+                                        \"value\": \"Asia/Jayapura\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jerusalem\",\n+                                        \"value\": \"Asia/Jerusalem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kabul\",\n+                                        \"value\": \"Asia/Kabul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kamchatka\",\n+                                        \"value\": \"Asia/Kamchatka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Karachi\",\n+                                        \"value\": \"Asia/Karachi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kashgar\",\n+                                        \"value\": \"Asia/Kashgar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kathmandu\",\n+                                        \"value\": \"Asia/Kathmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Katmandu\",\n+                                        \"value\": \"Asia/Katmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Khandyga\",\n+                                        \"value\": \"Asia/Khandyga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kolkata\",\n+                                        \"value\": \"Asia/Kolkata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Krasnoyarsk\",\n+                                        \"value\": \"Asia/Krasnoyarsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n+                                        \"value\": \"Asia/Kuala_Lumpur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuching\",\n+                                        \"value\": \"Asia/Kuching\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuwait\",\n+                                        \"value\": \"Asia/Kuwait\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macao\",\n+                                        \"value\": \"Asia/Macao\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macau\",\n+                                        \"value\": \"Asia/Macau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Magadan\",\n+                                        \"value\": \"Asia/Magadan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Makassar\",\n+                                        \"value\": \"Asia/Makassar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Manila\",\n+                                        \"value\": \"Asia/Manila\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Muscat\",\n+                                        \"value\": \"Asia/Muscat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Nicosia\",\n+                                        \"value\": \"Asia/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novokuznetsk\",\n+                                        \"value\": \"Asia/Novokuznetsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novosibirsk\",\n+                                        \"value\": \"Asia/Novosibirsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Omsk\",\n+                                        \"value\": \"Asia/Omsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Oral\",\n+                                        \"value\": \"Asia/Oral\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Phnom_Penh\",\n+                                        \"value\": \"Asia/Phnom_Penh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pontianak\",\n+                                        \"value\": \"Asia/Pontianak\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pyongyang\",\n+                                        \"value\": \"Asia/Pyongyang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qatar\",\n+                                        \"value\": \"Asia/Qatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qostanay\",\n+                                        \"value\": \"Asia/Qostanay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qyzylorda\",\n+                                        \"value\": \"Asia/Qyzylorda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Rangoon\",\n+                                        \"value\": \"Asia/Rangoon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Riyadh\",\n+                                        \"value\": \"Asia/Riyadh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Saigon\",\n+                                        \"value\": \"Asia/Saigon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Sakhalin\",\n+                                        \"value\": \"Asia/Sakhalin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Samarkand\",\n+                                        \"value\": \"Asia/Samarkand\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Seoul\",\n+                                        \"value\": \"Asia/Seoul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Shanghai\",\n+                                        \"value\": \"Asia/Shanghai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Singapore\",\n+                                        \"value\": \"Asia/Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Srednekolymsk\",\n+                                        \"value\": \"Asia/Srednekolymsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Taipei\",\n+                                        \"value\": \"Asia/Taipei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tashkent\",\n+                                        \"value\": \"Asia/Tashkent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tbilisi\",\n+                                        \"value\": \"Asia/Tbilisi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tehran\",\n+                                        \"value\": \"Asia/Tehran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tel_Aviv\",\n+                                        \"value\": \"Asia/Tel_Aviv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimbu\",\n+                                        \"value\": \"Asia/Thimbu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimphu\",\n+                                        \"value\": \"Asia/Thimphu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tokyo\",\n+                                        \"value\": \"Asia/Tokyo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tomsk\",\n+                                        \"value\": \"Asia/Tomsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ujung_Pandang\",\n+                                        \"value\": \"Asia/Ujung_Pandang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulaanbaatar\",\n+                                        \"value\": \"Asia/Ulaanbaatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulan_Bator\",\n+                                        \"value\": \"Asia/Ulan_Bator\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Urumqi\",\n+                                        \"value\": \"Asia/Urumqi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ust-Nera\",\n+                                        \"value\": \"Asia/Ust-Nera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vientiane\",\n+                                        \"value\": \"Asia/Vientiane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vladivostok\",\n+                                        \"value\": \"Asia/Vladivostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yakutsk\",\n+                                        \"value\": \"Asia/Yakutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yangon\",\n+                                        \"value\": \"Asia/Yangon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yekaterinburg\",\n+                                        \"value\": \"Asia/Yekaterinburg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yerevan\",\n+                                        \"value\": \"Asia/Yerevan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Azores\",\n+                                        \"value\": \"Atlantic/Azores\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Bermuda\",\n+                                        \"value\": \"Atlantic/Bermuda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Canary\",\n+                                        \"value\": \"Atlantic/Canary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Cape_Verde\",\n+                                        \"value\": \"Atlantic/Cape_Verde\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faeroe\",\n+                                        \"value\": \"Atlantic/Faeroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faroe\",\n+                                        \"value\": \"Atlantic/Faroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n+                                        \"value\": \"Atlantic/Jan_Mayen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Madeira\",\n+                                        \"value\": \"Atlantic/Madeira\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Reykjavik\",\n+                                        \"value\": \"Atlantic/Reykjavik\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/South_Georgia\",\n+                                        \"value\": \"Atlantic/South_Georgia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/St_Helena\",\n+                                        \"value\": \"Atlantic/St_Helena\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Stanley\",\n+                                        \"value\": \"Atlantic/Stanley\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/ACT\",\n+                                        \"value\": \"Australia/ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Adelaide\",\n+                                        \"value\": \"Australia/Adelaide\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Brisbane\",\n+                                        \"value\": \"Australia/Brisbane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Broken_Hill\",\n+                                        \"value\": \"Australia/Broken_Hill\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Canberra\",\n+                                        \"value\": \"Australia/Canberra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Currie\",\n+                                        \"value\": \"Australia/Currie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Darwin\",\n+                                        \"value\": \"Australia/Darwin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Eucla\",\n+                                        \"value\": \"Australia/Eucla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Hobart\",\n+                                        \"value\": \"Australia/Hobart\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/LHI\",\n+                                        \"value\": \"Australia/LHI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lindeman\",\n+                                        \"value\": \"Australia/Lindeman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lord_Howe\",\n+                                        \"value\": \"Australia/Lord_Howe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Melbourne\",\n+                                        \"value\": \"Australia/Melbourne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/NSW\",\n+                                        \"value\": \"Australia/NSW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/North\",\n+                                        \"value\": \"Australia/North\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Perth\",\n+                                        \"value\": \"Australia/Perth\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Queensland\",\n+                                        \"value\": \"Australia/Queensland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/South\",\n+                                        \"value\": \"Australia/South\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Sydney\",\n+                                        \"value\": \"Australia/Sydney\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Tasmania\",\n+                                        \"value\": \"Australia/Tasmania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Victoria\",\n+                                        \"value\": \"Australia/Victoria\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/West\",\n+                                        \"value\": \"Australia/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Yancowinna\",\n+                                        \"value\": \"Australia/Yancowinna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/Acre\",\n+                                        \"value\": \"Brazil/Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/DeNoronha\",\n+                                        \"value\": \"Brazil/DeNoronha\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/East\",\n+                                        \"value\": \"Brazil/East\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/West\",\n+                                        \"value\": \"Brazil/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CET\",\n+                                        \"value\": \"CET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST6CDT\",\n+                                        \"value\": \"CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Atlantic\",\n+                                        \"value\": \"Canada/Atlantic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Central\",\n+                                        \"value\": \"Canada/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Eastern\",\n+                                        \"value\": \"Canada/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Mountain\",\n+                                        \"value\": \"Canada/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Newfoundland\",\n+                                        \"value\": \"Canada/Newfoundland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Pacific\",\n+                                        \"value\": \"Canada/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Saskatchewan\",\n+                                        \"value\": \"Canada/Saskatchewan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Yukon\",\n+                                        \"value\": \"Canada/Yukon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/Continental\",\n+                                        \"value\": \"Chile/Continental\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/EasterIsland\",\n+                                        \"value\": \"Chile/EasterIsland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Cuba\",\n+                                        \"value\": \"Cuba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EET\",\n+                                        \"value\": \"EET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST5EDT\",\n+                                        \"value\": \"EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Egypt\",\n+                                        \"value\": \"Egypt\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Eire\",\n+                                        \"value\": \"Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT\",\n+                                        \"value\": \"Etc/GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+0\",\n+                                        \"value\": \"Etc/GMT+0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+1\",\n+                                        \"value\": \"Etc/GMT+1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+10\",\n+                                        \"value\": \"Etc/GMT+10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+11\",\n+                                        \"value\": \"Etc/GMT+11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+12\",\n+                                        \"value\": \"Etc/GMT+12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+2\",\n+                                        \"value\": \"Etc/GMT+2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+3\",\n+                                        \"value\": \"Etc/GMT+3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+4\",\n+                                        \"value\": \"Etc/GMT+4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+5\",\n+                                        \"value\": \"Etc/GMT+5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+6\",\n+                                        \"value\": \"Etc/GMT+6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+7\",\n+                                        \"value\": \"Etc/GMT+7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+8\",\n+                                        \"value\": \"Etc/GMT+8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+9\",\n+                                        \"value\": \"Etc/GMT+9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-0\",\n+                                        \"value\": \"Etc/GMT-0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-1\",\n+                                        \"value\": \"Etc/GMT-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-10\",\n+                                        \"value\": \"Etc/GMT-10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-11\",\n+                                        \"value\": \"Etc/GMT-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-12\",\n+                                        \"value\": \"Etc/GMT-12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-13\",\n+                                        \"value\": \"Etc/GMT-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-14\",\n+                                        \"value\": \"Etc/GMT-14\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-2\",\n+                                        \"value\": \"Etc/GMT-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-3\",\n+                                        \"value\": \"Etc/GMT-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-4\",\n+                                        \"value\": \"Etc/GMT-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-5\",\n+                                        \"value\": \"Etc/GMT-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-6\",\n+                                        \"value\": \"Etc/GMT-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-7\",\n+                                        \"value\": \"Etc/GMT-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-8\",\n+                                        \"value\": \"Etc/GMT-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-9\",\n+                                        \"value\": \"Etc/GMT-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT0\",\n+                                        \"value\": \"Etc/GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Greenwich\",\n+                                        \"value\": \"Etc/Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UCT\",\n+                                        \"value\": \"Etc/UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UTC\",\n+                                        \"value\": \"Etc/UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Universal\",\n+                                        \"value\": \"Etc/Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Zulu\",\n+                                        \"value\": \"Etc/Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Amsterdam\",\n+                                        \"value\": \"Europe/Amsterdam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Andorra\",\n+                                        \"value\": \"Europe/Andorra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Astrakhan\",\n+                                        \"value\": \"Europe/Astrakhan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Athens\",\n+                                        \"value\": \"Europe/Athens\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belfast\",\n+                                        \"value\": \"Europe/Belfast\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belgrade\",\n+                                        \"value\": \"Europe/Belgrade\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Berlin\",\n+                                        \"value\": \"Europe/Berlin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bratislava\",\n+                                        \"value\": \"Europe/Bratislava\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Brussels\",\n+                                        \"value\": \"Europe/Brussels\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bucharest\",\n+                                        \"value\": \"Europe/Bucharest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Budapest\",\n+                                        \"value\": \"Europe/Budapest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Busingen\",\n+                                        \"value\": \"Europe/Busingen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Chisinau\",\n+                                        \"value\": \"Europe/Chisinau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Copenhagen\",\n+                                        \"value\": \"Europe/Copenhagen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Dublin\",\n+                                        \"value\": \"Europe/Dublin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Gibraltar\",\n+                                        \"value\": \"Europe/Gibraltar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Guernsey\",\n+                                        \"value\": \"Europe/Guernsey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Helsinki\",\n+                                        \"value\": \"Europe/Helsinki\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Isle_of_Man\",\n+                                        \"value\": \"Europe/Isle_of_Man\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Istanbul\",\n+                                        \"value\": \"Europe/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Jersey\",\n+                                        \"value\": \"Europe/Jersey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kaliningrad\",\n+                                        \"value\": \"Europe/Kaliningrad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kiev\",\n+                                        \"value\": \"Europe/Kiev\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kirov\",\n+                                        \"value\": \"Europe/Kirov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kyiv\",\n+                                        \"value\": \"Europe/Kyiv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Lisbon\",\n+                                        \"value\": \"Europe/Lisbon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ljubljana\",\n+                                        \"value\": \"Europe/Ljubljana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/London\",\n+                                        \"value\": \"Europe/London\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Luxembourg\",\n+                                        \"value\": \"Europe/Luxembourg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Madrid\",\n+                                        \"value\": \"Europe/Madrid\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Malta\",\n+                                        \"value\": \"Europe/Malta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Mariehamn\",\n+                                        \"value\": \"Europe/Mariehamn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Minsk\",\n+                                        \"value\": \"Europe/Minsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Monaco\",\n+                                        \"value\": \"Europe/Monaco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Moscow\",\n+                                        \"value\": \"Europe/Moscow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Nicosia\",\n+                                        \"value\": \"Europe/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Oslo\",\n+                                        \"value\": \"Europe/Oslo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Paris\",\n+                                        \"value\": \"Europe/Paris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Podgorica\",\n+                                        \"value\": \"Europe/Podgorica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Prague\",\n+                                        \"value\": \"Europe/Prague\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Riga\",\n+                                        \"value\": \"Europe/Riga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Rome\",\n+                                        \"value\": \"Europe/Rome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Samara\",\n+                                        \"value\": \"Europe/Samara\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/San_Marino\",\n+                                        \"value\": \"Europe/San_Marino\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sarajevo\",\n+                                        \"value\": \"Europe/Sarajevo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Saratov\",\n+                                        \"value\": \"Europe/Saratov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Simferopol\",\n+                                        \"value\": \"Europe/Simferopol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Skopje\",\n+                                        \"value\": \"Europe/Skopje\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sofia\",\n+                                        \"value\": \"Europe/Sofia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Stockholm\",\n+                                        \"value\": \"Europe/Stockholm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tallinn\",\n+                                        \"value\": \"Europe/Tallinn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tirane\",\n+                                        \"value\": \"Europe/Tirane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tiraspol\",\n+                                        \"value\": \"Europe/Tiraspol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ulyanovsk\",\n+                                        \"value\": \"Europe/Ulyanovsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Uzhgorod\",\n+                                        \"value\": \"Europe/Uzhgorod\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vaduz\",\n+                                        \"value\": \"Europe/Vaduz\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vatican\",\n+                                        \"value\": \"Europe/Vatican\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vienna\",\n+                                        \"value\": \"Europe/Vienna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vilnius\",\n+                                        \"value\": \"Europe/Vilnius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Volgograd\",\n+                                        \"value\": \"Europe/Volgograd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Warsaw\",\n+                                        \"value\": \"Europe/Warsaw\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zagreb\",\n+                                        \"value\": \"Europe/Zagreb\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zaporozhye\",\n+                                        \"value\": \"Europe/Zaporozhye\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zurich\",\n+                                        \"value\": \"Europe/Zurich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB\",\n+                                        \"value\": \"GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB-Eire\",\n+                                        \"value\": \"GB-Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT\",\n+                                        \"value\": \"GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT0\",\n+                                        \"value\": \"GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Greenwich\",\n+                                        \"value\": \"Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Hongkong\",\n+                                        \"value\": \"Hongkong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iceland\",\n+                                        \"value\": \"Iceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Antananarivo\",\n+                                        \"value\": \"Indian/Antananarivo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Chagos\",\n+                                        \"value\": \"Indian/Chagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Christmas\",\n+                                        \"value\": \"Indian/Christmas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Cocos\",\n+                                        \"value\": \"Indian/Cocos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Comoro\",\n+                                        \"value\": \"Indian/Comoro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Kerguelen\",\n+                                        \"value\": \"Indian/Kerguelen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mahe\",\n+                                        \"value\": \"Indian/Mahe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Maldives\",\n+                                        \"value\": \"Indian/Maldives\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mauritius\",\n+                                        \"value\": \"Indian/Mauritius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mayotte\",\n+                                        \"value\": \"Indian/Mayotte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Reunion\",\n+                                        \"value\": \"Indian/Reunion\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iran\",\n+                                        \"value\": \"Iran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Israel\",\n+                                        \"value\": \"Israel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Jamaica\",\n+                                        \"value\": \"Jamaica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Japan\",\n+                                        \"value\": \"Japan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Kwajalein\",\n+                                        \"value\": \"Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Libya\",\n+                                        \"value\": \"Libya\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MET\",\n+                                        \"value\": \"MET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST7MDT\",\n+                                        \"value\": \"MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaNorte\",\n+                                        \"value\": \"Mexico/BajaNorte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaSur\",\n+                                        \"value\": \"Mexico/BajaSur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/General\",\n+                                        \"value\": \"Mexico/General\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ\",\n+                                        \"value\": \"NZ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ-CHAT\",\n+                                        \"value\": \"NZ-CHAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Navajo\",\n+                                        \"value\": \"Navajo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRC\",\n+                                        \"value\": \"PRC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST8PDT\",\n+                                        \"value\": \"PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Apia\",\n+                                        \"value\": \"Pacific/Apia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Auckland\",\n+                                        \"value\": \"Pacific/Auckland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Bougainville\",\n+                                        \"value\": \"Pacific/Bougainville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chatham\",\n+                                        \"value\": \"Pacific/Chatham\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chuuk\",\n+                                        \"value\": \"Pacific/Chuuk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Easter\",\n+                                        \"value\": \"Pacific/Easter\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Efate\",\n+                                        \"value\": \"Pacific/Efate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Enderbury\",\n+                                        \"value\": \"Pacific/Enderbury\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fakaofo\",\n+                                        \"value\": \"Pacific/Fakaofo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fiji\",\n+                                        \"value\": \"Pacific/Fiji\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Funafuti\",\n+                                        \"value\": \"Pacific/Funafuti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Galapagos\",\n+                                        \"value\": \"Pacific/Galapagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Gambier\",\n+                                        \"value\": \"Pacific/Gambier\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guadalcanal\",\n+                                        \"value\": \"Pacific/Guadalcanal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guam\",\n+                                        \"value\": \"Pacific/Guam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Honolulu\",\n+                                        \"value\": \"Pacific/Honolulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Johnston\",\n+                                        \"value\": \"Pacific/Johnston\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kanton\",\n+                                        \"value\": \"Pacific/Kanton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kiritimati\",\n+                                        \"value\": \"Pacific/Kiritimati\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kosrae\",\n+                                        \"value\": \"Pacific/Kosrae\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kwajalein\",\n+                                        \"value\": \"Pacific/Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Majuro\",\n+                                        \"value\": \"Pacific/Majuro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Marquesas\",\n+                                        \"value\": \"Pacific/Marquesas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Midway\",\n+                                        \"value\": \"Pacific/Midway\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Nauru\",\n+                                        \"value\": \"Pacific/Nauru\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Niue\",\n+                                        \"value\": \"Pacific/Niue\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Norfolk\",\n+                                        \"value\": \"Pacific/Norfolk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Noumea\",\n+                                        \"value\": \"Pacific/Noumea\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pago_Pago\",\n+                                        \"value\": \"Pacific/Pago_Pago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Palau\",\n+                                        \"value\": \"Pacific/Palau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pitcairn\",\n+                                        \"value\": \"Pacific/Pitcairn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pohnpei\",\n+                                        \"value\": \"Pacific/Pohnpei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Ponape\",\n+                                        \"value\": \"Pacific/Ponape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Port_Moresby\",\n+                                        \"value\": \"Pacific/Port_Moresby\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Rarotonga\",\n+                                        \"value\": \"Pacific/Rarotonga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Saipan\",\n+                                        \"value\": \"Pacific/Saipan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Samoa\",\n+                                        \"value\": \"Pacific/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tahiti\",\n+                                        \"value\": \"Pacific/Tahiti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tarawa\",\n+                                        \"value\": \"Pacific/Tarawa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tongatapu\",\n+                                        \"value\": \"Pacific/Tongatapu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Truk\",\n+                                        \"value\": \"Pacific/Truk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wake\",\n+                                        \"value\": \"Pacific/Wake\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wallis\",\n+                                        \"value\": \"Pacific/Wallis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Yap\",\n+                                        \"value\": \"Pacific/Yap\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Poland\",\n+                                        \"value\": \"Poland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Portugal\",\n+                                        \"value\": \"Portugal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ROK\",\n+                                        \"value\": \"ROK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Singapore\",\n+                                        \"value\": \"Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4\",\n+                                        \"value\": \"SystemV/AST4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4ADT\",\n+                                        \"value\": \"SystemV/AST4ADT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6\",\n+                                        \"value\": \"SystemV/CST6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6CDT\",\n+                                        \"value\": \"SystemV/CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5\",\n+                                        \"value\": \"SystemV/EST5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5EDT\",\n+                                        \"value\": \"SystemV/EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/HST10\",\n+                                        \"value\": \"SystemV/HST10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7\",\n+                                        \"value\": \"SystemV/MST7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7MDT\",\n+                                        \"value\": \"SystemV/MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8\",\n+                                        \"value\": \"SystemV/PST8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8PDT\",\n+                                        \"value\": \"SystemV/PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9\",\n+                                        \"value\": \"SystemV/YST9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9YDT\",\n+                                        \"value\": \"SystemV/YST9YDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Turkey\",\n+                                        \"value\": \"Turkey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UCT\",\n+                                        \"value\": \"UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Alaska\",\n+                                        \"value\": \"US/Alaska\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Aleutian\",\n+                                        \"value\": \"US/Aleutian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Arizona\",\n+                                        \"value\": \"US/Arizona\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Central\",\n+                                        \"value\": \"US/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/East-Indiana\",\n+                                        \"value\": \"US/East-Indiana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Eastern\",\n+                                        \"value\": \"US/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Hawaii\",\n+                                        \"value\": \"US/Hawaii\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Indiana-Starke\",\n+                                        \"value\": \"US/Indiana-Starke\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Michigan\",\n+                                        \"value\": \"US/Michigan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Mountain\",\n+                                        \"value\": \"US/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Pacific\",\n+                                        \"value\": \"US/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Samoa\",\n+                                        \"value\": \"US/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Universal\",\n+                                        \"value\": \"Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W-SU\",\n+                                        \"value\": \"W-SU\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WET\",\n+                                        \"value\": \"WET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Zulu\",\n+                                        \"value\": \"Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST\",\n+                                        \"value\": \"EST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HST\",\n+                                        \"value\": \"HST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST\",\n+                                        \"value\": \"MST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACT\",\n+                                        \"value\": \"ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AET\",\n+                                        \"value\": \"AET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AGT\",\n+                                        \"value\": \"AGT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ART\",\n+                                        \"value\": \"ART\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AST\",\n+                                        \"value\": \"AST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BET\",\n+                                        \"value\": \"BET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BST\",\n+                                        \"value\": \"BST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAT\",\n+                                        \"value\": \"CAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CNT\",\n+                                        \"value\": \"CNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST\",\n+                                        \"value\": \"CST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CTT\",\n+                                        \"value\": \"CTT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EAT\",\n+                                        \"value\": \"EAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ECT\",\n+                                        \"value\": \"ECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IET\",\n+                                        \"value\": \"IET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IST\",\n+                                        \"value\": \"IST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JST\",\n+                                        \"value\": \"JST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MIT\",\n+                                        \"value\": \"MIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NET\",\n+                                        \"value\": \"NET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NST\",\n+                                        \"value\": \"NST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLT\",\n+                                        \"value\": \"PLT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNT\",\n+                                        \"value\": \"PNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRT\",\n+                                        \"value\": \"PRT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST\",\n+                                        \"value\": \"PST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SST\",\n+                                        \"value\": \"SST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VST\",\n+                                        \"value\": \"VST\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Flow file content\",\n-                                \"description\": \"Indicates where the results should be placed.  In the case of 'Flow file content', the JSON response will be written as the content of the flow file.  In the case of 'Flow file attributes', the original flow file (if applicable) will be cloned for each result, and all return fields will be placed in a flow file attribute of the same name, but prefixed by 'es.result.'\",\n-                                \"displayName\": \"Target\",\n+                                \"defaultValue\": \"UTC\",\n+                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n+                                \"displayName\": \"Time Zone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"query-es-target\",\n+                                \"name\": \"Time Zone\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"query-es-type\": {\n-                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n+                            \"Token\": {\n+                                \"description\": \"The token to pass to Splunk.\",\n+                                \"displayName\": \"Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"query-es-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"routing-query-info-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Always route Query Info\",\n-                                        \"displayName\": \"Always\",\n-                                        \"value\": \"ALWAYS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Never route Query Info\",\n-                                        \"displayName\": \"Never\",\n-                                        \"value\": \"NEVER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Route Query Info if the Query returns no hits\",\n-                                        \"displayName\": \"No Hits\",\n-                                        \"value\": \"NOHIT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Always append Query Info as attributes, using the existing relationships (does not add the Query Info relationship).\",\n-                                        \"displayName\": \"Append as Attributes\",\n-                                        \"value\": \"APPEND_AS_ATTRIBUTES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NEVER\",\n-                                \"description\": \"Specifies when to generate and route Query Info after a successful query\",\n-                                \"displayName\": \"Routing Strategy for Query Info\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-query-info-strategy\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the document cannot be fetched but attempting the operation again may succeed. Note that if the processor has no incoming connections, flow files may still be sent to this relationship based on the processor properties and the results of the fetch operation.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n+                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n                             \"get\",\n-                            \"http\",\n-                            \"query\",\n-                            \"read\"\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.QueryElasticsearchHttp\",\n-                        \"typeDescription\": \"Queries Elasticsearch using the specified connection properties. Note that the full body of each page of documents will be read into memory before being written to Flow Files for transfer.  Also note that the Elasticsearch max_result_window index setting is the upper bound on the number of records that can be retrieved using this query.  To retrieve more records, use the ScrollElasticsearchHttp processor.\",\n+                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n+                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits for a query\",\n-                                \"name\": \"es.query.hitcount\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document identifier\",\n-                                \"name\": \"es.id\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch query that was built\",\n-                                \"name\": \"es.query.url\"\n+                                \"description\": \"The query that performed to produce the FlowFile.\",\n+                                \"name\": \"splunk.query\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n+                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n+                                \"name\": \"splunk.earliest.time\"\n                             },\n                             {\n-                                \"description\": \"If Target is 'Flow file attributes', the JSON attributes of each result will be placed into corresponding attributes with this prefix.\",\n-                                \"name\": \"es.result.*\"\n+                                \"description\": \"The value of the latest time that was used when performing the query.\",\n+                                \"name\": \"splunk.latest.time\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-nar\",\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A URL query parameter\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Password\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the destination.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n+                                \"displayName\": \"Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port on the destination.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TCP\",\n+                                \"description\": \"The protocol for communication.\",\n+                                \"displayName\": \"Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n                             \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be sent over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Elasticsearch cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"elasticsearch-http-connect-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for the connection to the Elasticsearch REST API.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"logs\",\n+                            \"splunk\",\n+                            \"tcp\",\n+                            \"udp\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n+                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-connect-timeout\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"elasticsearch-http-proxy-host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-host\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"elasticsearch-http-proxy-port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-proxy-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"elasticsearch-http-response-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for a response from the Elasticsearch REST API.\",\n-                                \"displayName\": \"Response Timeout\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-response-timeout\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"elasticsearch-http-url\": {\n-                                \"description\": \"Elasticsearch URL which will be connected to, including scheme (http, e.g.), host, and port. The default port for the REST API is 9200.\",\n-                                \"displayName\": \"Elasticsearch URL\",\n+                            \"Scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"elasticsearch-http-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Security Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-password\": {\n-                                \"description\": \"Proxy Password\",\n-                                \"displayName\": \"Proxy Password\",\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-password\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-username\": {\n-                                \"description\": \"Proxy Username\",\n-                                \"displayName\": \"Proxy Username\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-username\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-fields\": {\n-                                \"description\": \"A comma-separated list of fields to retrieve from the document. If the Fields property is left blank, then the entire document's source will be retrieved.\",\n-                                \"displayName\": \"Fields\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-fields\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-index\": {\n-                                \"description\": \"The name of the index to read from. If the property is set to _all, the query will match across all indexes.\",\n-                                \"displayName\": \"Index\",\n+                            \"content-type\": {\n+                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-index\",\n-                                \"required\": true,\n+                                \"name\": \"content-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-query\": {\n-                                \"description\": \"The Lucene-style query to run against ElasticSearch (e.g., genre:blues AND -artist:muddy)\",\n-                                \"displayName\": \"Query\",\n+                            \"host\": {\n+                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-query\",\n-                                \"required\": true,\n+                                \"name\": \"host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-scroll\": {\n-                                \"defaultValue\": \"1m\",\n-                                \"description\": \"The scroll duration is how long each search context is kept in memory.\",\n-                                \"displayName\": \"Scroll Duration\",\n+                            \"index\": {\n+                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-scroll\",\n-                                \"required\": true,\n+                                \"name\": \"index\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"Determines how many documents to return per page during scrolling.\",\n-                                \"displayName\": \"Page Size\",\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"request-channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-sort\": {\n-                                \"description\": \"A sort parameter (e.g., timestamp:asc). If the Sort property is left blank, then the results will be retrieved in document order.\",\n-                                \"displayName\": \"Sort\",\n+                            \"source\": {\n+                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-sort\",\n+                                \"name\": \"source\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scroll-es-type\": {\n-                                \"description\": \"The type of document (if unset, the query will be against all types in the _index). This should be unset or '_doc' for Elasticsearch 7.0+.\",\n-                                \"displayName\": \"Type\",\n+                            \"source-type\": {\n+                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scroll-es-type\",\n+                                \"name\": \"source-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After each successful scroll page, the latest scroll_id is persisted in scrollId as input for the next scroll call.  Once the entire query is complete, finishedQuery state will be set to true, and the processor will not execute unless this is cleared.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are read from Elasticsearch are routed to this relationship.\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be read from Elasticsearch are routed to this relationship. Note that only incoming flow files will be routed to failure.\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"get\",\n                             \"http\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.ScrollElasticsearchHttp\",\n-                        \"typeDescription\": \"Scrolls through an Elasticsearch query using the specified connection properties. This processor is intended to be run on the primary node, and is designed for scrolling through huge result sets, as in the case of a reindex.  The state must be cleared before another query can be run.  Each page of results is returned, wrapped in a JSON object like so: { \\\"hits\\\" : [ <doc1>, <doc2>, <docn> ] }.  Note that the full body of each page of documents will be read into memory before being written to a Flow File for transfer.\",\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n+                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"es.index\"\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"es.type\"\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateful-analysis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-stateful-analysis-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Sub-window length\": {\n-                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n-                                \"displayName\": \"Sub-window length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Sub-window length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time window\": {\n-                                \"description\": \"The time window on which to calculate the rolling window.\",\n-                                \"displayName\": \"Time window\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time window\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value to track\": {\n-                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n-                                \"displayName\": \"Value to track\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value to track\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n-                                \"name\": \"set state fail\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"data science\",\n-                            \"rolling\",\n-                            \"state\",\n-                            \"window\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n-                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The rolling window value (sum of all the values stored).\",\n-                                \"name\": \"rolling_window_value\"\n-                            },\n-                            {\n-                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_count\"\n                             },\n-                            {\n-                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_mean\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cybersecurity-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cybersecurity-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"ATTRIBUTE_NAME\": {\n-                                \"defaultValue\": \"fuzzyhash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n-                                \"displayName\": \"Hash Attribute Name\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ATTRIBUTE_NAME\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HASH_ALGORITHM\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n-                                        \"displayName\": \"ssdeep\",\n-                                        \"value\": \"ssdeep\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n-                                        \"displayName\": \"tlsh\",\n-                                        \"value\": \"tlsh\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"description\": \"The hashing algorithm utilised\",\n-                                \"displayName\": \"Hashing Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_ALGORITHM\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HASH_LIST_FILE\": {\n-                                \"description\": \"Path to the file containing hashes to be validated against\",\n-                                \"displayName\": \"Hash List Source File\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_LIST_FILE\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"MATCHING_MODE\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send FlowFile to matched after the first match above threshold\",\n-                                        \"displayName\": \"single\",\n-                                        \"value\": \"single\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Iterate full list of hashes before deciding to send FlowFile to matched or unmatched\",\n-                                        \"displayName\": \"multi-match\",\n-                                        \"value\": \"multi-match\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"Defines if the Processor should try to match as many entries as possible (multi-match) or if it should stop after the first match (single)\",\n-                                \"displayName\": \"Matching Mode\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MATCHING_MODE\",\n-                                \"required\": true,\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"MATCH_THRESHOLD\": {\n-                                \"description\": \"The similarity score must exceed or be equal to in order formatch to be considered true. Refer to Additional Information for differences between TLSH and SSDEEP scores and how they relate to this property.\",\n-                                \"displayName\": \"Match Threshold\",\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MATCH_THRESHOLD\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be matched, e.g. (lacks the attribute) will be sent to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be matched to an existing hash will be sent to this Relationship.\",\n-                                \"name\": \"not-found\"\n                             },\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully matched to an existing hash will be sent to this Relationship.\",\n-                                \"name\": \"found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"cyber-security\",\n-                            \"fuzzy-hashing\",\n-                            \"hashing\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n-                        \"typeDescription\": \"Compares an attribute containing a Fuzzy Hash against a file containing a list of fuzzy hashes, appending an attribute to the FlowFile in case of a successful match.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The match that resembles the attribute specified by the <Hash Attribute Name> property. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n-                                \"name\": \"XXXX.N.match\"\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The similarity score between this flowfileand its match of the same number N. Note that: 'XXX' gets replaced with the <Hash Attribute Name>\",\n-                                \"name\": \"XXXX.N.similarity\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cybersecurity-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"ATTRIBUTE_NAME\": {\n-                                \"defaultValue\": \"fuzzyhash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute that should hold the Fuzzy Hash Value\",\n-                                \"displayName\": \"Hash Attribute Name\",\n+                            \"max-query-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n+                                \"displayName\": \"Maximum Query Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ATTRIBUTE_NAME\",\n+                                \"name\": \"max-query-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HASH_ALGORITHM\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Uses ssdeep / SpamSum 'context triggered piecewise hash'.\",\n-                                        \"displayName\": \"ssdeep\",\n-                                        \"value\": \"ssdeep\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses TLSH (Trend 'Locality Sensitive Hash'). Note: FlowFile Content must be at least 512 characters long\",\n-                                        \"displayName\": \"tlsh\",\n-                                        \"value\": \"tlsh\"\n-                                    }\n-                                ],\n-                                \"description\": \"The hashing algorithm utilised\",\n-                                \"displayName\": \"Hashing Algorithm\",\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"request-channel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ttl\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n+                                \"displayName\": \"Maximum Waiting Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HASH_ALGORITHM\",\n+                                \"name\": \"ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n+                            },\n+                            {\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cybersecurity.CompareFuzzyHash\",\n-                            \"org.apache.nifi.processors.standard.HashContent\"\n+                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that is successfully hashed will be sent to this Relationship.\",\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n+                                \"name\": \"unacknowledged\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n+                                \"name\": \"undetermined\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cyber-security\",\n-                            \"fuzzy-hashing\",\n-                            \"hashing\"\n+                            \"acknowledgement\",\n+                            \"http\",\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cybersecurity.FuzzyHashContent\",\n-                        \"typeDescription\": \"Calculates a fuzzy/locality-sensitive hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property.Note: this processor only offers non-cryptographic hash algorithms. And it should be not be seen as a replacement to the HashContent processor.Note: The underlying library loads the entirety of the streamed content into and performs result evaluations in memory. Accordingly, it is important to consider the anticipated profile of content being evaluated by this processor and the hardware supporting it especially when working against large files.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n-                                \"name\": \"<Hash Attribute Name>\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n+                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n+                        \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-hwx-schema-registry-nar\",\n+            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-confluent-platform-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hwx-schema-registry-nar\",\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This controller service is deprecated and will be removed in NiFi 2.x.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"request.header.*\",\n+                                \"value\": \"String literal, may not be empty\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"basic-auth-password\": {\n-                                \"dependencies\": [\n+                            \"authentication-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"basic-auth-username\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASIC\",\n+                                        \"value\": \"BASIC\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"The username to use for basic authentication when the Schema Registry is behind a proxy such as Apache Knox.\",\n-                                \"displayName\": \"Basic Authentication Username\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth-username\",\n+                                \"name\": \"authentication-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"cache-expiration\": {\n                                 \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Hortonworks Schema Registry again in order to obtain the schema.\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n                                 \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"cache-size\": {\n                                 \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Hortonworks Schema Registry\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n                                 \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"ssl-context\": {\n+                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password for the kerberos principal when not using the kerberos credentials service\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The kerberos principal to authenticate with when not using the kerberos credentials service\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"url\": {\n+                                \"defaultValue\": \"http://localhost:8081\",\n+                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n+                                \"displayName\": \"Schema Registry URLs\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"name\": \"url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for communicating with Schema Registry.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"username\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"url\": {\n-                                \"description\": \"URL of the schema registry that this Controller Service should connect to, including version. For example, http://localhost:9090/api/v1\",\n-                                \"displayName\": \"Schema Registry URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"url\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n                                 \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n                             \"avro\",\n-                            \"hortonworks\",\n-                            \"hwx\",\n+                            \"confluent\",\n+                            \"kafka\",\n                             \"registry\",\n                             \"schema\"\n                         ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.hortonworks.HortonworksSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry Service that interacts with a Hortonworks Schema Registry, available at https://github.com/hortonworks/registry\",\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-record-serialization-services-nar\",\n+            \"artifact\": \"nifi-provenance-repository-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-hadoop-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be set on the Hadoop configuration after loading any provided configuration files.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Hadoop configuration property.\",\n+                                \"value\": \"The value of the given Hadoop configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Connection URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n-                                        \"displayName\": \"Use Embedded Avro Schema\",\n-                                        \"value\": \"embedded-avro-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"embedded-avro-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"The user for the database\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Total Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it get's dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Validation-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/phoenix-client.jar'. NOTE: It is required that the resources specified by this property provide the classes from hadoop-common, such as Configuration and UserGroupInformation.\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.\",\n+                                \"displayName\": \"Max Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The number of milliseconds to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hadoop-config-resources\": {\n+                                \"description\": \"A file, or comma separated list of files, which contain the Hadoop configuration (core-site.xml, etc.). Without this, Hadoop will search the classpath, or will revert to a default configuration. Note that to enable authentication with Kerberos, the appropriate properties must be set in the configuration files.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hadoop-config-resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"comma\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"hadoop\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n-                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n+                        \"type\": \"org.apache.nifi.dbcp.HadoopDBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides a Database Connection Pooling Service for Hadoop related JDBC services. This service requires that the Database Driver Location(s) contains some version of a hadoop-common JAR, or a shaded JAR that shades hadoop-common.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateful-analysis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-stateful-analysis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n-                                        \"displayName\": \"Embed Avro Schema\",\n-                                        \"value\": \"avro-embedded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"avro-embedded\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                            \"Sub-window length\": {\n+                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n+                                \"displayName\": \"Sub-window length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Sub-window length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"Time window\": {\n+                                \"description\": \"The time window on which to calculate the rolling window.\",\n+                                \"displayName\": \"Time window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"Time window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n+                            \"Value to track\": {\n+                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n+                                \"displayName\": \"Value to track\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Value to track\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n+                                \"name\": \"set state fail\"\n                             },\n-                            \"encoder-pool-size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n-                                \"displayName\": \"Encoder Pool Size\",\n+                            {\n+                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"data science\",\n+                            \"rolling\",\n+                            \"state\",\n+                            \"window\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n+                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The rolling window value (sum of all the values stored).\",\n+                                \"name\": \"rolling_window_value\"\n+                            },\n+                            {\n+                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_count\"\n+                            },\n+                            {\n+                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_mean\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"authentication-charset\": {\n+                                \"defaultValue\": \"US-ASCII\",\n+                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n+                                \"displayName\": \"Authentication Header Charset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"encoder-pool-size\",\n+                                \"name\": \"authentication-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"connection-attempt-timeout\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The number of times to try and establish a connection.\",\n+                                \"displayName\": \"Connection Attempt Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection-attempt-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"connection-timeout\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"description\": \"The timeout to connect the WebSocket URI.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-authorization\": {\n+                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n+                                \"displayName\": \"Custom Authorization\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"custom-authorization\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"input-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-binary-message-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"max-text-message-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"proxy-host\": {\n+                                \"description\": \"The host name of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"proxy-port\": {\n+                                \"description\": \"The port number of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"session-maintenance-interval\": {\n+                                \"defaultValue\": \"10 sec\",\n+                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n+                                \"displayName\": \"Session Maintenance Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"session-maintenance-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"user-name\": {\n+                                \"description\": \"The user name for Basic Authentication.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"user-password\": {\n+                                \"description\": \"The user password for Basic Authentication.\",\n+                                \"displayName\": \"User Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"websocket-uri\": {\n+                                \"description\": \"The WebSocket URI this client connects to.\",\n+                                \"displayName\": \"WebSocket URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"websocket-uri\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"client\"\n                         ],\n-                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n+                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"accept-empty-extensions\": {\n+                            \"auth-path-spec\": {\n+                                \"defaultValue\": \"/*\",\n+                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n+                                \"displayName\": \"Basic Authentication Path Spec\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"auth-path-spec\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"auth-roles\": {\n+                                \"defaultValue\": \"**\",\n+                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n+                                \"displayName\": \"Basic Authentication Roles\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"auth-roles\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"basic-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\n+                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n+                                \"displayName\": \"Enable Basic Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"accept-empty-extensions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"datetime-representation\": {\n-                                \"defaultValue\": \"en-US\",\n-                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n-                                \"displayName\": \"DateTime Locale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"datetime-representation\",\n+                                \"name\": \"basic-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"inference-strategy\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Includes only CEF header fields into the inferred schema.\",\n-                                        \"displayName\": \"Headers only\",\n-                                        \"value\": \"headers-only\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Includes the CEF header and extension fields to the schema, but not the custom extensions.\",\n-                                        \"displayName\": \"Headers and extensions\",\n-                                        \"value\": \"headers-and-extensions\"\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"no\"\n                                     },\n                                     {\n-                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields as string values.\",\n-                                        \"displayName\": \"With custom extensions as strings\",\n-                                        \"value\": \"custom-extensions-as-string\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"want\"\n                                     },\n                                     {\n-                                        \"description\": \"Includes all fields into the inferred schema, involving custom extension fields with inferred data types. The inference works based on the values in the FlowFile. In some scenarios this might result unsatisfiable behaviour. In these cases it is suggested to use \\\"With custom extensions as strings\\\" Inference Strategy or predefined schema.\",\n-                                        \"displayName\": \"With custom extensions inferred\",\n-                                        \"value\": \"custom-extensions-inferred\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom-extensions-inferred\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"need\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the set of fields should be included in the schema and the way the fields are being interpreted.\",\n-                                \"displayName\": \"Inference Strategy\",\n+                                \"defaultValue\": \"no\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"SSL Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inference-strategy\",\n+                                \"name\": \"client-authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"invalid-message-field\": {\n-                                \"description\": \"Used when a line in the FlowFile cannot be parsed by the CEF parser. If set, instead of failing to process the FlowFile, a record is being added with one field. This record contains one field with the name specified by the property and the raw message as value.\",\n-                                \"displayName\": \"Invalid Field\",\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invalid-message-field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"input-buffer-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"raw-message-field\": {\n-                                \"description\": \"If set the raw message will be added to the record using the property value as field name. This is not the same as the \\\"rawEvent\\\" extension field!\",\n-                                \"displayName\": \"Raw Message Field\",\n+                            \"listen-port\": {\n+                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n+                                \"displayName\": \"Listen Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"raw-message-field\",\n-                                \"required\": false,\n+                                \"name\": \"listen-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"login-service\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n+                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n+                                        \"displayName\": \"HashLoginService\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"hash\",\n+                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n+                                \"displayName\": \"Login Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"login-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"max-binary-message-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-text-message-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"users-properties-file\": {\n+                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n+                                \"displayName\": \"Users Properties File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"users-properties-file\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"1.22.0\"\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"server\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n+                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal.\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cef\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n                         ],\n-                        \"type\": \"org.apache.nifi.cef.CEFReader\",\n-                        \"typeDescription\": \"Parses CEF (Common Event Format) events, returning each row as a record. This reader allows for inferring a schema based on the first event in the FlowFile or providing an explicit schema for interpreting the values.\",\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Password\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access ticket cache\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                            \"Kerberos Ticket Cache File\": {\n+                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n+                                \"displayName\": \"Kerberos Ticket Cache File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Ticket Cache File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"1.22.0\"\n                             },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Cache\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Principal\",\n+                            \"Security\",\n+                            \"Ticket\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-tcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-tcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Sets a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute to set\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"connection-attempt-timeout\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The number of times to try and establish a connection, before using a backup host if available. This same attempt count would be used for a backup host as well.\",\n+                                \"displayName\": \"Connection Attempt Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"name\": \"connection-attempt-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n+                            \"end-of-message-byte\": {\n+                                \"defaultValue\": \"13\",\n+                                \"description\": \"Byte value which denotes end of message. Must be specified as integer within the valid byte range (-128 thru 127). For example, '13' = Carriage return and '10' = New line. Default '13'.\",\n+                                \"displayName\": \"End of message delimiter byte\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n+                                \"name\": \"end-of-message-byte\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Skip Header Line\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the first line of CSV should be considered a Header or should be considered a record. If the Schema Access Strategy indicates that the columns must be defined in the header, then this property will be ignored, since the header must always be present and won't be processed as a Record. Otherwise, if 'true', then the first line of CSV data will not be processed as a record and if 'false',then the first line will be interpreted as a record.\",\n-                                \"displayName\": \"Treat First Line as Header\",\n+                            \"endpoint-list\": {\n+                                \"description\": \"A comma delimited list of the endpoints to connect to. The format should be <server_address>:<port>. Only one server will be connected to at a time, the others will be used as fail overs.\",\n+                                \"displayName\": \"Endpoint List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Skip Header Line\",\n+                                \"name\": \"endpoint-list\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"receive-buffer-size\": {\n+                                \"defaultValue\": \"16MB\",\n+                                \"description\": \"The size of the buffer to receive data in. Default 16384 (16MB).\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"receive-buffer-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"reconnect-interval\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The number of seconds to wait before attempting to reconnect to the endpoint.\",\n+                                \"displayName\": \"Reconnect interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n+                                \"name\": \"reconnect-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The relationship that all incomplete messages from the endpoint will be sent to. Incomplete message is the message that doesn't end with 'End of message delimiter byte'. This can happen when 'Receive Buffer Size' is smaller then the incoming message. If that happens that the subsequent message that completes the previous incomplete message will also end up in this relationship, after which subsequent 'complete' messages will go to 'success'.\",\n+                                \"name\": \"Partial\"\n                             },\n-                            \"Trim Fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                            {\n+                                \"description\": \"The relationship that all sucessful messages from the endpoint will be sent to.\",\n+                                \"name\": \"Success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"poll\",\n+                            \"source\",\n+                            \"tcp\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gettcp.GetTCP\",\n+                        \"typeDescription\": \"Connects over TCP to the provided endpoint(s). Received data will be written as content to the FlowFile\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The address of the source endpoint the message came from\",\n+                                \"name\": \"source.endpoint\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hubspot-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hubspot-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"10 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Trim double quote\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"30 sec\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"rfc-4180\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not to trim starting and ending double quotes. For example: with trim string '\\\"test\\\"' would be parsed to 'test', without trim would be parsed to '\\\"test\\\"'.If set to 'false' it means full compliance with RFC-4180. Default value is true, with trim.\",\n-                                \"displayName\": \"Trim double quote\",\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n+                                \"displayName\": \"Incremental Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim double quote\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n+                            \"incremental-initial-start-time\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"incremental-initial-start-time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-reader-csv-parser\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Apache Commons CSV library.\",\n-                                        \"displayName\": \"Apache Commons CSV\",\n-                                        \"value\": \"commons-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n-                                        \"displayName\": \"Jackson CSV\",\n-                                        \"value\": \"jackson-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"commons-csv\",\n-                                \"description\": \"Specifies which parser to use to read CSV records. NOTE: Different parsers may support different subsets of functionality and may also exhibit different levels of performance.\",\n-                                \"displayName\": \"CSV Parser\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csv-reader-csv-parser\",\n+                                \"name\": \"is-incremental\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csvutils-allow-duplicate-header-names\": {\n+                            \"object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n+                                        \"displayName\": \"Companies\",\n+                                        \"value\": \"/crm/v3/objects/companies\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n+                                        \"displayName\": \"Contacts\",\n+                                        \"value\": \"/crm/v3/objects/contacts\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n+                                        \"displayName\": \"Deals\",\n+                                        \"value\": \"/crm/v3/objects/deals\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n+                                        \"displayName\": \"Line Items\",\n+                                        \"value\": \"/crm/v3/objects/line_items\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"/crm/v3/objects/products\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/crm/v3/objects/tickets\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n+                                        \"displayName\": \"Quotes\",\n+                                        \"value\": \"/crm/v3/objects/quotes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n+                                        \"displayName\": \"Calls\",\n+                                        \"value\": \"/crm/v3/objects/calls\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get emails on CRM records.\",\n+                                        \"displayName\": \"Emails\",\n+                                        \"value\": \"/crm/v3/objects/emails\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get meetings on CRM records.\",\n+                                        \"displayName\": \"Meetings\",\n+                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get notes on CRM records.\",\n+                                        \"displayName\": \"Notes\",\n+                                        \"value\": \"/crm/v3/objects/notes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get tasks on CRM records.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"/crm/v3/objects/tasks\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether duplicate header names are allowed. Header names are case-sensitive, for example \\\"name\\\" and \\\"Name\\\" are treated as separate fields. Handling of duplicate header names is CSV Parser specific (where applicable):\\n* Apache Commons CSV - duplicate headers will result in column data \\\"shifting\\\" right with new fields created for \\\"unknown_field_index_X\\\" where \\\"X\\\" is the CSV column index number\\n* Jackson CSV - duplicate headers will be de-duplicated with the field value being that of the right-most duplicate CSV column\",\n-                                \"displayName\": \"Allow Duplicate Header Names\",\n+                                \"description\": \"The HubSpot Object Type requested\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-allow-duplicate-header-names\",\n+                                \"name\": \"object-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"result-limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"csvutils-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n-                                \"displayName\": \"Character Set\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-character-set\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ignore-csv-header\": {\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"hubspot\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n+                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"application-default-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If the first line of a CSV is a header, and the configured schema does not match the fields named in the header line, this controls how the Reader will interpret the fields. If this property is true, then the field names mapped to each column are driven only by the configured schema and any fields not in the schema will be ignored. If this property is false, then the field names found in the CSV Header will be used as the names of the fields.\",\n-                                \"displayName\": \"Ignore CSV Header Column Names\",\n+                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n+                                \"displayName\": \"Use Application Default Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-csv-header\",\n+                                \"name\": \"application-default-credentials\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"compute-engine-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The first non-comment line of the CSV file is a header line that contains the names of the columns. The schema will be derived by using the column names in the header and assuming that all columns are of type String.\",\n-                                        \"displayName\": \"Use String Fields From Header\",\n-                                        \"value\": \"csv-header-derived\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n+                                \"displayName\": \"Use Compute Engine Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"name\": \"compute-engine-credentials\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"service-account-json\": {\n+                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n+                                \"displayName\": \"Service Account JSON\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"service-account-json\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"service-account-json-file\": {\n+                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n+                                \"displayName\": \"Service Account JSON File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-account-json-file\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-gcp-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"comma\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n+                            \"credentials\",\n+                            \"gcp\",\n+                            \"provider\"\n                         ],\n-                        \"type\": \"org.apache.nifi.csv.CSVReader\",\n-                        \"typeDescription\": \"Parses CSV-formatted data, returning each row in the CSV file as a separate record. This reader allows for inferring a schema based on the first line of the CSV, if a 'header line' is present, or providing an explicit schema for interpreting the values. See Controller Service's Usage for further documentation.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"bq.append.record.count\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n+                                \"displayName\": \"Append Record Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.append.record.count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"name\": \"bq.dataset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"bq.record.reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n+                                \"name\": \"bq.record.reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"bq.skip.invalid.rows\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n+                                \"displayName\": \"Skip Invalid Rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.skip.invalid.rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.transfer.type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Use streaming record handling strategy\",\n+                                        \"displayName\": \"STREAM\",\n+                                        \"value\": \"STREAM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use batching record handling strategy\",\n+                                        \"displayName\": \"BATCH\",\n+                                        \"value\": \"BATCH\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                                \"defaultValue\": \"STREAM\",\n+                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n+                                \"displayName\": \"Transfer Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.transfer.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Header Line\": {\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n+                        \"typeDescription\": \"Unified processor for batch and stream flow files content to a Google BigQuery table via the Storage Write API.The processor is record based so the used schema is driven by the RecordReader. Attributes that are not matched to the target schemaare skipped. Exactly once delivery semantics are achieved via stream offsets. The Storage Write API is more efficient than the older insertAll method because it uses gRPC streaming rather than REST over HTTP\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"bq.avro.use.logical.types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n-                                \"displayName\": \"Include Header Line\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If format is set to Avro and if this option is set to true, you can interpret logical types into their corresponding types (such as TIMESTAMP) instead of only using their raw types (such as INTEGER).\",\n+                                \"displayName\": \"Avro Input - Use Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Header Line\",\n+                                \"name\": \"bq.avro.use.logical.types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Trailing Delimiter\": {\n+                            \"bq.csv.allow.jagged.rows\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n-                                \"displayName\": \"Include Trailing Delimiter\",\n+                                \"description\": \"Set whether BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default, rows with missing trailing columns are considered bad records.\",\n+                                \"displayName\": \"CSV Input - Allow Jagged Rows\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Trailing Delimiter\",\n+                                \"name\": \"bq.csv.allow.jagged.rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n+                            \"bq.csv.allow.quoted.new.lines\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether BigQuery should allow quoted data sections that contain newline characters in a CSV file. By default quoted newline are not allowed.\",\n+                                \"displayName\": \"CSV Input - Allow Quoted New Lines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"name\": \"bq.csv.allow.quoted.new.lines\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"bq.csv.charset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Sets the character encoding of the data.\",\n+                                \"displayName\": \"CSV Input - Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"bq.csv.charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n+                            \"bq.csv.delimiter\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"Sets the separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence \\\"\\t\\\" to specify a tab separator. The default value is a comma (',').\",\n+                                \"displayName\": \"CSV Input - Field Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                            \"bq.csv.quote\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"description\": \"Sets the value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('\\\"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the Allow Quoted New Lines property to true.\",\n+                                \"displayName\": \"CSV Input - Quote\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.quote\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"bq.csv.skip.leading.rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.\",\n+                                \"displayName\": \"CSV Input - Skip Leading Rows\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.csv.skip.leading.rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.dataset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"bq.load.create_disposition\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Configures the job to create the table if it does not exist.\",\n+                                        \"displayName\": \"CREATE_IF_NEEDED\",\n+                                        \"value\": \"CREATE_IF_NEEDED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Configures the job to fail with a not-found error if the table does not exist.\",\n+                                        \"displayName\": \"CREATE_NEVER\",\n+                                        \"value\": \"CREATE_NEVER\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"CREATE_IF_NEEDED\",\n+                                \"description\": \"Sets whether the job is allowed to create new tables\",\n+                                \"displayName\": \"Create Disposition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"bq.load.create_disposition\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                            \"bq.load.ignore_unknown\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n+                                \"displayName\": \"Ignore Unknown Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"name\": \"bq.load.ignore_unknown\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csvutils-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode/decode the CSV file\",\n-                                \"displayName\": \"Character Set\",\n+                            \"bq.load.max_badrecords\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. By default no bad record is ignored.\",\n+                                \"displayName\": \"Max Bad Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-character-set\",\n+                                \"name\": \"bq.load.max_badrecords\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"bq.load.type\": {\n+                                \"description\": \"Data type of the file to be loaded. Possible values: AVRO, NEWLINE_DELIMITED_JSON, CSV.\",\n+                                \"displayName\": \"Load file type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.load.type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.load.write_disposition\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"Configures the job to fail with a duplicate error if the table already exists.\",\n+                                        \"displayName\": \"WRITE_EMPTY\",\n+                                        \"value\": \"WRITE_EMPTY\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"Configures the job to append data to the table if it already exists.\",\n+                                        \"displayName\": \"WRITE_APPEND\",\n+                                        \"value\": \"WRITE_APPEND\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"Configures the job to overwrite the table data if table already exists.\",\n+                                        \"displayName\": \"WRITE_TRUNCATE\",\n+                                        \"value\": \"WRITE_TRUNCATE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"WRITE_EMPTY\",\n+                                \"description\": \"Sets the action that should occur if the destination table already exists.\",\n+                                \"displayName\": \"Write Disposition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"bq.load.write_disposition\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"bq.readtimeout\": {\n+                                \"defaultValue\": \"5 minutes\",\n+                                \"description\": \"Load Job Time Out\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"bq.readtimeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.table.schema\": {\n+                                \"description\": \"BigQuery schema in JSON format\",\n+                                \"displayName\": \"Table Schema\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"bq.table.schema\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Batch loads flow files content to a Google BigQuery table.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Time load job creation\",\n+                                \"name\": \"bq.job.stat.creation_time\"\n+                            },\n+                            {\n+                                \"description\": \"Time load job ended\",\n+                                \"name\": \"bq.job.stat.end_time\"\n+                            },\n+                            {\n+                                \"description\": \"Time load job started\",\n+                                \"name\": \"bq.job.stat.start_time\"\n+                            },\n+                            {\n+                                \"description\": \"API Link to load job\",\n+                                \"name\": \"bq.job.link\"\n+                            },\n+                            {\n+                                \"description\": \"ID of the BigQuery job\",\n+                                \"name\": \"bq.job.id\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error message\",\n+                                \"name\": \"bq.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error reason\",\n+                                \"name\": \"bq.error.reason\"\n+                            },\n+                            {\n+                                \"description\": \"Load job error location\",\n+                                \"name\": \"bq.error.location\"\n+                            },\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"bq.dataset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"bq.load.ignore_unknown\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n+                                \"displayName\": \"Ignore Unknown Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n+                                \"name\": \"bq.load.ignore_unknown\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"bq.record.reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n+                                \"name\": \"bq.record.reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"bq.skip.invalid.rows\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n+                                \"displayName\": \"Skip Invalid Rows\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"name\": \"bq.skip.invalid.rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"tab\",\n-                            \"tsv\",\n-                            \"writer\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.csv.CSVRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet as CSV data. The first line written will be the column names (unless the 'Include Header Line' property is false). All subsequent lines will be the values corresponding to the record fields.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Load data into Google BigQuery table using the streaming API. This processor is not intended to load large flow files as it will load the full content into memory. If you need to insert large flow files, consider using PutBigQueryBatch instead.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Grok Expression\": {\n-                                \"description\": \"Specifies the format of a log line in Grok format. This allows the Record Reader to understand how to parse each log line. The property supports one or more Grok expressions. The Reader attempts to parse input lines according to the configured order of the expressions.If a line in the log file does not match any expressions, the line will be assumed to belong to the previous log message.If other Grok patterns are referenced by this expression, they need to be supplied in the Grok Pattern File property.\",\n-                                \"displayName\": \"Grok Expressions\",\n+                            \"drive-file-id\": {\n+                                \"defaultValue\": \"${drive.id}\",\n+                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details to obtain Drive ID.\",\n+                                \"displayName\": \"File ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"drive-file-id\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Grok Pattern File\": {\n-                                \"description\": \"Grok Patterns to use for parsing logs. If not specified, a built-in default Pattern file will be used. If specified, all patterns specified will override the default patterns. See the Controller Service's Additional Details for a list of pre-defined patterns.\",\n-                                \"displayName\": \"Grok Patterns\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Grok Pattern File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"no-match-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will be appended to the last field of the prior message.\",\n-                                        \"displayName\": \"Append to Previous Message\",\n-                                        \"value\": \"append-to-previous-message\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will be skipped.\",\n-                                        \"displayName\": \"Skip Line\",\n-                                        \"value\": \"skip-line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The line of text that does not match the Grok Expression will only be added to the _raw field.\",\n-                                        \"displayName\": \"Raw Line\",\n-                                        \"value\": \"raw-line\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"append-to-previous-message\",\n-                                \"description\": \"If a line of text is encountered and it does not match the given Grok Expression, and it is not part of a stack trace, this property specifies how the text should be processed.\",\n-                                \"displayName\": \"No Match Behavior\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"no-match-behavior\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"schema-access-strategy\": {\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"drive\",\n+                            \"fetch\",\n+                            \"google\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema will be derived using the field names present in all configured Grok Expressions. All schema fields will have a String type and will be marked as nullable. The schema will also include a `stackTrace` field, and a `_raw` field containing the input line string.\",\n-                                        \"displayName\": \"Use String Fields From Grok Expression\",\n-                                        \"value\": \"string-fields-from-grok-expression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string-fields-from-grok-expression\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n+                                \"displayName\": \"Folder ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"recursive-search\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"recursive-search\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"grok\",\n-                            \"logfiles\",\n-                            \"logs\",\n-                            \"logstash\",\n-                            \"parse\",\n-                            \"pattern\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"regex\",\n-                            \"text\",\n-                            \"unstructured\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.grok.GrokReader\",\n-                        \"typeDescription\": \"Provides a mechanism for reading unstructured text data, such as log files, and structuring the data so that it can be processed. The service is configured using Grok patterns. The service reads from a stream of data and splits each message that it finds into a separate Record, each containing the fields that are configured. If a line in the input does not match the expected message pattern, the line of text is either considered to be part of the previous message or is skipped, depending on the configuration, with the exception of stack traces. A stack trace that is found at the end of a log message is considered to be part of the previous message but is added to the 'stackTrace' field of the Record. If a record has no stack trace, it will have a NULL value for the stackTrace field (assuming that the schema does in fact include a stackTrace field of type String). Assuming that the schema includes a '_raw' field of type String, the raw message will be included in the Record.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                        \"typeDescription\": \"Lists concrete files (shortcuts are ignored) in a Google Drive folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"User-defined properties identify how to extract specific fields from a JSON object in order to create a Record\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The field name for the record.\",\n-                                \"value\": \"A JSONPath Expression that will be evaluated against each JSON record. The result of the JSONPath will be the value of the field whose name is the same as the property name.\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"chunked-upload-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"chunked-upload-threshold\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     },\n                                     {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n+                                \"name\": \"filename\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonTreeReader\"\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.json.JsonPathReader\",\n-                        \"typeDescription\": \"Parses JSON records and evaluates user-defined JSON Path's against each JSON object. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. User-defined properties define the fields that should be extracted from the JSON in order to form the fields of a Record. Any JSON field that is not extracted via a JSONPath will not be returned in the JSON Records.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n+                        \"typeDescription\": \"Puts content to a Google Drive Folder.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Pretty Print JSON\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the JSON should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print JSON\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, BZIP2, ZSTD, XZ-LZMA2, LZMA, Snappy, and Snappy Framed\",\n-                                \"displayName\": \"Compression Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"gzip\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"compression-format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level to use; this is valid only when using GZIP compression. A lower value results in faster processing but less compression; a value of 0 indicates no compression but simply archiving\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"output-grouping\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Output records as a JSON array\",\n-                                        \"displayName\": \"Array\",\n-                                        \"value\": \"output-array\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Output records with one JSON object per line, delimited by a newline character\",\n-                                        \"displayName\": \"One Line Per Object\",\n-                                        \"value\": \"output-oneline\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"output-array\",\n-                                \"description\": \"Specifies how the writer should output the JSON records (as an array or one object per line, e.g.) Note that if 'One Line Per Object' is selected, then Pretty Print JSON must be false.\",\n-                                \"displayName\": \"Output Grouping\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-grouping\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"suppress-nulls\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress-nulls\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"row\",\n-                            \"serialize\",\n-                            \"writer\"\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"pubsub\"\n                         ],\n-                        \"type\": \"org.apache.nifi.json.JsonRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the results of a RecordSet as either a JSON Array or one JSON object per line. If using Array output, then even if the RecordSet consists of a single row, it will be written as an array with a single element. If using One Line Per Object output, the JSON objects cannot be pretty-printed.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.ackId\"\n+                            },\n+                            {\n+                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.messageSize\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-application-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Applies the schema for the whole JSON.\",\n-                                        \"displayName\": \"Whole JSON\",\n-                                        \"value\": \"WHOLE_JSON\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Applies the schema for the selected part starting from the \\\"Starting Field Name\\\".\",\n-                                        \"displayName\": \"Selected Part\",\n-                                        \"value\": \"SELECTED_PART\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SELECTED_PART\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"schema-text-property\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the schema is defined for the whole JSON or for the selected part starting from \\\"Starting Field Name\\\".\",\n-                                \"displayName\": \"Schema Application Strategy\",\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-application-strategy\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"starting-field-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                \"displayName\": \"Starting Field Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"starting-field-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Begins processing from the root node.\",\n-                                        \"displayName\": \"Root Node\",\n-                                        \"value\": \"ROOT_NODE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Skips forward to the given nested JSON field (array or object) to begin processing.\",\n-                                        \"displayName\": \"Nested Field\",\n-                                        \"value\": \"NESTED_FIELD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ROOT_NODE\",\n-                                \"description\": \"Start processing from the root node or from a specified nested node.\",\n-                                \"displayName\": \"Starting Field Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonPathReader\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"json\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"tree\"\n+                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n                         ],\n-                        \"type\": \"org.apache.nifi.json.JsonTreeReader\",\n-                        \"typeDescription\": \"Parses JSON into individual Record objects. While the reader expects each record to be well-formed JSON, the content of a FlowFile may consist of many records, each as a well-formed JSON array or JSON object with optional whitespace between them, such as the common 'JSON-per-line' format. If an array is encountered, each element in that array will be treated as a separate record. If the schema that is configured contains a field that is not present in the JSON, a null value will be used. If the JSON contains a field that is not present in the schema, that field will be skipped. See the Usage of the Controller Service for more information and examples.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the RecordReader\",\n-                                \"value\": \"A RecordReaderFactory controller service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Service to Use\": {\n-                                \"defaultValue\": \"${recordreader.name}\",\n-                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n-                                \"displayName\": \"Service to Use\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n+                                \"name\": \"retry\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.RecordSetWriterLookup\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.ReaderLookup\",\n-                        \"typeDescription\": \"Provides a RecordReaderFactory that can be used to dynamically select another RecordReaderFactory. This will allow multiple RecordReaderFactories to be defined and registered, and then selected dynamically at runtime by referencing a FlowFile attribute in the Service to Use property.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the RecordSetWriter\",\n-                                \"value\": \"A RecordSetWriterFactory controller service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Service to Use\": {\n-                                \"defaultValue\": \"${recordsetwriter.name}\",\n-                                \"description\": \"Specifies the name of the user-defined property whose associated Controller Service should be used.\",\n-                                \"displayName\": \"Service to Use\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.ReaderLookup\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RecordSetWriterLookup\",\n-                        \"typeDescription\": \"Provides a RecordSetWriterFactory that can be used to dynamically select another RecordSetWriterFactory. This will allow multiple RecordSetWriterFactory's to be defined and registered, and then selected dynamically at runtime by tagging FlowFiles with the attributes and referencing those attributes in the Service to Use property.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n+                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"max-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of Schemas to cache.\",\n-                                \"displayName\": \"Maximum Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"record\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.schema.inference.VolatileSchemaCache\",\n-                        \"typeDescription\": \"Provides a Schema Cache that evicts elements based on a Least-Recently-Used algorithm. This cache is not persisted, so any restart of NiFi will result in the cache being cleared. Additionally, the cache will be cleared any time that the Controller Service is stopped and restarted.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"syslog-5424-reader-raw-message\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n-                                \"displayName\": \"Raw message\",\n+                            \"gcp-bytes-outstanding\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n+                                \"displayName\": \"Bytes Outstanding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-bytes-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"logfiles\",\n-                            \"logs\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"syslog\",\n-                            \"syslog 5424\",\n-                            \"text\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.syslog.Syslog5424Reader\",\n-                        \"typeDescription\": \"Provides a mechanism for reading RFC 5424 compliant Syslog data, such as log files, and structuring the data so that it can be processed.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            },\n+                            \"gcp-messages-outstanding\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The number of messages that may be outstanding to the client.\",\n+                                \"displayName\": \"Messages Outstanding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-messages-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"syslog-5424-reader-raw-message\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the record will have a _raw field containing the raw message\",\n-                                \"displayName\": \"Raw message\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"syslog-5424-reader-raw-message\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"logfiles\",\n-                            \"logs\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"syslog\",\n-                            \"text\"\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"pubsub\"\n                         ],\n-                        \"type\": \"org.apache.nifi.syslog.SyslogReader\",\n-                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164. In the case of RFC5424 formatted messages, structured data is not supported, and will be returned as part of the message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n+                                \"name\": \"gcp.pubsub.ordering.key\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n-                                \"displayName\": \"Character Set\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"gcp-batch-bytes\": {\n+                                \"defaultValue\": \"3 MB\",\n+                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size property, whichever condition is met first.\",\n+                                \"displayName\": \"Batch Bytes Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-batch-bytes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text\": {\n-                                \"description\": \"The text to use when writing the results. This property will evaluate the Expression Language using any of the fields available in a Record.\",\n-                                \"displayName\": \"Text\",\n+                            \"gcp-ordering-key\": {\n+                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n+                                \"displayName\": \"Ordering Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text\",\n+                                \"name\": \"gcp-ordering-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-pubsub-topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"el\",\n-                            \"expression\",\n-                            \"freeform\",\n-                            \"language\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"serialize\",\n-                            \"text\",\n-                            \"writer\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"type\": \"org.apache.nifi.text.FreeFormTextRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet as free-form text. The configured text is able to make use of the Expression Language to reference each of the fields that are available in a Record, as well as the attributes in the FlowFile and variables. If there is a name collision, the field name/value is used before attributes or variables. Each record in the RecordSet will be separated by a single newline character.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"event\",\n-                            \"log\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"windows\",\n-                            \"xml\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n-                        \"type\": \"org.apache.nifi.windowsevent.WindowsEventLogReader\",\n-                        \"typeDescription\": \"Reads Windows Event Log data as XML content having been generated by ConsumeWindowsEventLog, ParseEvtx, etc. (see Additional Details) and creates Record object(s). If the root tag of the input XML is 'Events', the child content is expected to be a series of 'Event' tags, each of which will constitute a single record. If the root tag is 'Event', the content is expected to be a single 'Event' and thus a single record. No other root tags are valid. Only events of type 'System' are currently supported.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n+                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute_prefix\": {\n-                                \"description\": \"If this property is set, the name of attributes will be prepended with a prefix when they are added to a record.\",\n-                                \"displayName\": \"Attribute Prefix\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attribute_prefix\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"content_field_name\": {\n-                                \"description\": \"If tags with content (e. g. <field>content</field>) are defined as nested records in the schema, the name of the tag will be used as name for the record and the value of this property will be used as name for the field. If tags with content shall be parsed together with attributes (e. g. <field attribute=\\\"123\\\">content</field>), they have to be defined as records. In such a case, the name of the tag will be used as the name for the record and  the value of this property will be used as the name for the field holding the original content. The name of the attribute will be used to create a new record field, the content of which will be the value of the attribute. For more information, see the 'Additional Details...' section of the XMLReader controller service's documentation.\",\n-                                \"displayName\": \"Field Name for Content\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"content_field_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"parse_xml_attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"When 'Schema Access Strategy' is 'Infer Schema' and this property is 'true' then XML attributes are parsed and added to the record as new fields. When the schema is inferred but this property is 'false', XML attributes and their values are ignored.\",\n-                                \"displayName\": \"Parse XML Attributes\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parse_xml_attributes\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record_format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Each FlowFile will consist of a single record without any sort of \\\"wrapper\\\".\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Each FlowFile will consist of zero or more records. The outer-most XML element is expected to be a \\\"wrapper\\\" and will be ignored.\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Whether to treat a FlowFile as a single Record or an array of multiple Records is determined by the value of the 'xml.stream.is.array' attribute. If the value of the attribute is 'true' (case-insensitive), then the XML Reader will treat the FlowFile as a series of Records with the outer element being ignored. If the value of the attribute is 'false' (case-insensitive), then the FlowFile is treated as a single Record and no wrapper element is assumed. If the attribute is missing or its value is anything other than 'true' or 'false', then an Exception will be thrown and no records will be parsed.\",\n-                                        \"displayName\": \"Use attribute 'xml.stream.is.array'\",\n-                                        \"value\": \"${xml.stream.is.array}\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This property defines whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\". Because XML does not provide for a way to read a series of XML documents from a stream directly, it is common to combine many XML documents by concatenating them and then wrapping the entire XML blob  with a \\\"wrapper element\\\". This property dictates whether the reader expects a FlowFile to consist of a single Record or a series of Records with a \\\"wrapper element\\\" that will be ignored.\",\n-                                \"displayName\": \"Expect Records as Array\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"record_format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile contains 3 Attributes that will be used to lookup a Schema from the configured Schema Registry: 'schema.identifier', 'schema.version', and 'schema.protocol.version'\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, found at https://github.com/hortonworks/registry\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile contains a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This is based on version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Content-Encoded Schema Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n+                                \"displayName\": \"Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"gcs-generation\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-inference-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to use when inferring the schema. If not populated, the schema will be inferred each time. However, if a cache is specified, the cache will first be consulted and if the applicable schema can be found, it will be used instead of inferring the schema.\",\n-                                \"displayName\": \"Schema Inference Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-inference-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"xml\"\n+                            \"delete\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.xml.XMLReader\",\n-                        \"typeDescription\": \"Reads XML content and creates Record objects. Records are expected in the second level of XML data, embedded in an enclosing root tag.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character set to use when writing the data to the FlowFile\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Write Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"array_tag_name\": {\n-                                \"description\": \"Name of the tag used by property \\\"Wrap Elements of Arrays\\\" to write arrays\",\n-                                \"displayName\": \"Array Tag Name\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"array_tag_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"array_wrapping\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used as the tag name to wrap elements of an array. The field name of the array field will be used for the tag name of the elements.\",\n-                                        \"displayName\": \"Use Property as Wrapper\",\n-                                        \"value\": \"use-property-as-wrapper\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the property \\\"Array Tag Name\\\" will be used for the tag name of the elements of an array. The field name of the array field will be used as the tag name to wrap elements.\",\n-                                        \"displayName\": \"Use Property for Elements\",\n-                                        \"value\": \"use-property-for-elements\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The elements of an array will not be wrapped\",\n-                                        \"displayName\": \"No Wrapping\",\n-                                        \"value\": \"no-wrapping\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no-wrapping\",\n-                                \"description\": \"Specifies how the writer wraps elements of fields of type array\",\n-                                \"displayName\": \"Wrap Elements of Arrays\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"array_wrapping\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"omit_xml_declaration\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not to include XML declaration\",\n-                                \"displayName\": \"Omit XML Declaration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"omit_xml_declaration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"pretty_print_xml\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n-                                \"displayName\": \"Pretty Print XML\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pretty_print_xml\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record_tag_name\": {\n-                                \"description\": \"Specifies the name of the XML record tag wrapping the record fields. If this is not set, the writer will use the record name in the schema.\",\n-                                \"displayName\": \"Name of Record Tag\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record_tag_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"root_tag_name\": {\n-                                \"description\": \"Specifies the name of the XML root tag wrapping the record set. This property has to be defined if the writer is supposed to write multiple records in a single FlowFile.\",\n-                                \"displayName\": \"Name of Root Tag\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"root_tag_name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n+                                \"displayName\": \"Object Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"name\": \"gcs-generation\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"gcs-object-range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"gcs-object-range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"gcs-object-range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"suppress_nulls\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will be written out as a null value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When a field has a value of null, it will be written out. However, if a field is defined in the schema and not present in the record, the field will not be written out.\",\n-                                        \"displayName\": \"Suppress Missing Values\",\n-                                        \"value\": \"suppress-missing\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress_nulls\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"row\",\n-                            \"serialize\",\n-                            \"writer\",\n-                            \"xml\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n-                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"app-config-file\": {\n-                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-config-file\",\n+                                \"name\": \"gcs-object-range-start\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"app-config-json\": {\n-                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config JSON\",\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"app-config-json\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"box-account-id\": {\n-                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n-                                \"displayName\": \"Account ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"box-account-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-box-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"box\",\n-                            \"client\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n-                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ambari-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-ambari-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Ambari\",\n-                                \"displayName\": \"Application ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Application ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics sent to Ambari\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Metrics Collector URL\": {\n-                                \"defaultValue\": \"http://localhost:6188/ws/v1/timeline/metrics\",\n-                                \"description\": \"The URL of the Ambari Metrics Collector Service\",\n-                                \"displayName\": \"Metrics Collector URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Metrics Collector URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"Process Group ID\": {\n-                                \"description\": \"If specified, the reporting task will send metrics about this process group only. If not, the root process group is used and global metrics are sent.\",\n-                                \"displayName\": \"Process Group ID\",\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Process Group ID\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"ambari\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.ambari.AmbariReportingTask\",\n-                        \"typeDescription\": \"Publishes metrics from NiFi to Ambari Metrics Service (AMS). Due to how the Ambari Metrics Service works, this reporting task should be scheduled to run every 60 seconds. Each iteration it will send the metrics from the previous iteration, and calculate the current metrics to be sent on next iteration. Scheduling this reporting task at a frequency other than 60 seconds may produce unexpected results.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"websocket-client-controller-service\": {\n-                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n-                                \"displayName\": \"WebSocket Client ControllerService\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-controller-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"websocket-client-id\": {\n-                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n-                                \"displayName\": \"WebSocket Client Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"fetch\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"server-url-path\": {\n-                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n-                                \"displayName\": \"Server URL Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-url-path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n                             },\n-                            \"websocket-server-controller-service\": {\n-                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n-                                \"displayName\": \"WebSocket Server ControllerService\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-server-controller-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"websocket-controller-service-id\": {\n-                                \"defaultValue\": \"${websocket.controller.service.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket ControllerService Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-controller-service-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"websocket-endpoint-id\": {\n-                                \"defaultValue\": \"${websocket.endpoint.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket Endpoint Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-endpoint-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"websocket-message-type\": {\n-                                \"defaultValue\": \"TEXT\",\n-                                \"description\": \"The type of message content: TEXT or BINARY\",\n-                                \"displayName\": \"WebSocket Message Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-message-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n                             },\n-                            \"websocket-session-id\": {\n-                                \"defaultValue\": \"${websocket.session.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n-                                \"displayName\": \"WebSocket Session Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-session-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n                             {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"WebSocket\",\n-                            \"publish\",\n-                            \"send\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n-                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n                             },\n                             {\n-                                \"description\": \"Detail of the failure.\",\n-                                \"name\": \"websocket.failure.detail\"\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-key-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-key-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"key\": {\n-                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"key-file\": {\n-                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key File\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-file\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"PEM\",\n-                            \"PKCS8\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n-                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n-                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-charset\": {\n-                                \"defaultValue\": \"US-ASCII\",\n-                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n-                                \"displayName\": \"Authentication Header Charset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"authentication-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection-attempt-timeout\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The number of times to try and establish a connection.\",\n-                                \"displayName\": \"Connection Attempt Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection-attempt-timeout\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"connection-timeout\": {\n-                                \"defaultValue\": \"3 sec\",\n-                                \"description\": \"The timeout to connect the WebSocket URI.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"window\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n+                                        \"propertyName\": \"et-initial-listing-target\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection-timeout\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-authorization\": {\n-                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n-                                \"displayName\": \"Custom Authorization\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"custom-authorization\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-host\": {\n-                                \"description\": \"The host name of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Host\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-host\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-port\": {\n-                                \"description\": \"The port number of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Port\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"proxy-port\",\n+                                \"name\": \"gcp-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"session-maintenance-interval\": {\n-                                \"defaultValue\": \"10 sec\",\n-                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n-                                \"displayName\": \"Session Maintenance Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"session-maintenance-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"user-name\": {\n-                                \"description\": \"The user name for Basic Authentication.\",\n-                                \"displayName\": \"User Name\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-name\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password for Basic Authentication.\",\n-                                \"displayName\": \"User Password\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user-password\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"websocket-uri\": {\n-                                \"description\": \"The WebSocket URI this client connects to.\",\n-                                \"displayName\": \"WebSocket URI\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"websocket-uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"1.22.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"client\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n-                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"auth-path-spec\": {\n-                                \"defaultValue\": \"/*\",\n-                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n-                                \"displayName\": \"Basic Authentication Path Spec\",\n+                            \"gcs-bucket\": {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"auth-path-spec\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"auth-roles\": {\n-                                \"defaultValue\": \"**\",\n-                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n-                                \"displayName\": \"Basic Authentication Roles\",\n+                            \"gcs-prefix\": {\n+                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n+                                \"displayName\": \"Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"auth-roles\",\n+                                \"name\": \"gcs-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"basic-auth\": {\n+                            \"gcs-use-generations\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n-                                \"displayName\": \"Enable Basic Authentication\",\n+                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n+                                \"displayName\": \"Use Generations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth\",\n+                                \"name\": \"gcs-use-generations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"no\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"want\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"need\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"SSL Client Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"listen-port\": {\n-                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n-                                \"displayName\": \"Listen Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"listen-port\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"login-service\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n-                                        \"displayName\": \"HashLoginService\",\n-                                        \"value\": \"hash\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hash\",\n-                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n-                                \"displayName\": \"Login Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"login-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"users-properties-file\": {\n-                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n-                                \"displayName\": \"Users Properties File\",\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"users-properties-file\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"server\"\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"list\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n-                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                        \"typeDescription\": \"Retrieves a listing of objects from an GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n+                            },\n+                            {\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n+                            },\n+                            {\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n+                            },\n+                            {\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n+                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"gcp-proxy-host\": {\n+                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n+                                \"displayName\": \"Proxy host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n+                                \"name\": \"gcp-proxy-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Concern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n+                            \"gcp-proxy-port\": {\n+                                \"description\": \"Proxy port number\",\n+                                \"displayName\": \"Proxy port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-delete-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Delete only the first document that matches the query.\",\n-                                        \"displayName\": \"Delete One\",\n-                                        \"value\": \"one\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Delete every document that matches the query.\",\n-                                        \"displayName\": \"Delete Many\",\n-                                        \"value\": \"many\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n-                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n-                                        \"value\": \"attr\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"one\",\n-                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n-                                \"displayName\": \"Delete Mode\",\n+                            \"gcp-proxy-user-name\": {\n+                                \"description\": \"HTTP Proxy Username\",\n+                                \"displayName\": \"HTTP Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-delete-mode\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-fail-on-no-delete\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fail when no documents are deleted.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not fail when nothing is deleted.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n-                                \"displayName\": \"Fail When Nothing Is Deleted\",\n+                            \"gcp-proxy-user-password\": {\n+                                \"description\": \"HTTP Proxy Password\",\n+                                \"displayName\": \"HTTP Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-fail-on-no-delete\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"gcp-proxy-user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-content-disposition-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n+                                        \"displayName\": \"Inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n+                                        \"displayName\": \"Attachment\",\n+                                        \"value\": \"attachment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n+                                \"displayName\": \"Content Disposition Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n-                                \"name\": \"mongodb.delete.mode\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"mongo\",\n-                            \"mongodb\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n-                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"gcs-content-disposition-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n+                            \"gcs-content-type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"Content Type for the file, i.e. text/plain\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n+                                \"name\": \"gcs-content-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"name\": \"gcs-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n+                            \"gcs-object-acl\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n+                                        \"displayName\": \"All Authenticated Users\",\n+                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Authenticated Read\",\n+                                        \"value\": \"AUTHENTICATED_READ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Full Control\",\n+                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Read Only\",\n+                                        \"value\": \"BUCKET_OWNER_READ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n+                                        \"displayName\": \"Private\",\n+                                        \"value\": \"PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n+                                        \"displayName\": \"Project Private\",\n+                                        \"value\": \"PROJECT_PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n+                                        \"displayName\": \"Public Read Only\",\n+                                        \"value\": \"PUBLIC_READ\"\n+                                    }\n+                                ],\n+                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n+                                \"displayName\": \"Object ACL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcs-object-acl\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n+                            \"gcs-object-crc32c\": {\n+                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n+                                \"displayName\": \"CRC32C Checksum\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n+                                \"name\": \"gcs-object-crc32c\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n+                            \"gcs-object-md5\": {\n+                                \"description\": \"MD5 Hash (encoded in Base64) of the file for server-side validation.\",\n+                                \"displayName\": \"MD5 Hash\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n+                                \"name\": \"gcs-object-md5\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"get-mongo-send-empty\": {\n+                            \"gcs-overwrite-object\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n-                                \"displayName\": \"Send Empty Result\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-send-empty\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"json-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n+                                \"displayName\": \"Overwrite Object\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"name\": \"gcs-overwrite-object\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"results-per-flowfile\": {\n-                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"results-per-flowfile\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"gzip.content.enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n+                                \"displayName\": \"GZIP Compression Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n+                                \"name\": \"gzip.content.enabled\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"use-pretty-printing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n-                                \"displayName\": \"Pretty Print Results JSON\",\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-pretty-printing\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"mongodb\",\n-                            \"read\"\n+                            \"archive\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n-                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n+                        \"typeDescription\": \"Puts flow files to a Google Cloud Bucket.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n+                            },\n+                            {\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n+                            },\n+                            {\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n+                            },\n+                            {\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32446,1214 +31875,194 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"get-mongo-record-writer-factory\": {\n-                                \"description\": \"The record writer to use to write the result sets.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongodb-schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongodb-schema-name\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"json\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n-                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n-                            },\n-                            {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the data is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"insert\",\n-                                        \"value\": \"insert\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"update\",\n-                                        \"value\": \"update\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"insert\",\n-                                \"description\": \"Indicates whether the processor should insert or update content\",\n-                                \"displayName\": \"Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Update Query Key\": {\n-                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n-                                \"displayName\": \"Update Query Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Update Query Key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Upsert\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n-                                \"displayName\": \"Upsert\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Upsert\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Concern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"put-mongo-update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With whole document\",\n-                                        \"value\": \"doc\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With operators enabled\",\n-                                        \"value\": \"operators\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"doc\",\n-                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n-                                \"displayName\": \"Update Mode\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-mongo-update-mode\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"putmongo-update-query\": {\n-                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n-                                \"displayName\": \"Update Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putmongo-update-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Concern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Concern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bypass-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Bypass schema validation during insert/upsert\",\n-                                \"displayName\": \"Bypass Validation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bypass-validation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"insert_count\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert_count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"ordered\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Perform ordered or unordered operations\",\n-                                \"displayName\": \"Ordered\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ordered\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"update-key-fields\": {\n-                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n-                                \"displayName\": \"Update Key Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-key-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Updates only the first document that matches the query.\",\n-                                        \"displayName\": \"Update One\",\n-                                        \"value\": \"one\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Updates every document that matches the query.\",\n-                                        \"displayName\": \"Update Many\",\n-                                        \"value\": \"many\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n-                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"one\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Update Key Fields\",\n-                                        \"propertyName\": \"update-key-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n-                                \"displayName\": \"Update Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-mode\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n-                                \"name\": \"mongodb.update.mode\"\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of elements returned from the server in one batch.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo URI\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Mongo URI\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"allow-disk-use\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n-                                \"displayName\": \"Allow Disk Use\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-disk-use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"json-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-agg-query\": {\n-                                \"description\": \"The aggregation query to be executed.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-agg-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"results-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"results-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-client-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n-                                \"name\": \"results\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"aggregate\",\n-                            \"aggregation\",\n-                            \"mongo\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n-                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"delete-gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"delete-gridfs-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gridfs\",\n-                            \"mongodb\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n-                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33662,151 +32071,109 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n-                                \"displayName\": \"File Name\",\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n+                                \"name\": \"json-payload\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-query\",\n+                                \"name\": \"output-bucket\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-operation-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n-                                        \"displayName\": \"Full Query Fetch\",\n-                                        \"value\": \"all-at-once\"\n-                                    },\n-                                    {\n-                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n-                                        \"displayName\": \"Stream Query Results\",\n-                                        \"value\": \"streaming\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all-at-once\",\n-                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n-                                \"displayName\": \"Operation Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-operation-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"name\": \"vision-feature-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gridfs\",\n-                            \"mongo\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n-                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n-                                \"name\": \"gridfs.file.metadata\"\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33815,7863 +32182,3581 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"putgridfs-chunk-size\": {\n-                                \"defaultValue\": \"256 KB\",\n-                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n-                                \"displayName\": \"Chunk Size\",\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-chunk-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"putgridfs-enforce-uniqueness\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No uniqueness will be enforced.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Both the filename and hash must be unique.\",\n-                                        \"displayName\": \"Both\",\n-                                        \"value\": \"both\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Only the filename must be unique.\",\n-                                        \"displayName\": \"Name\",\n-                                        \"value\": \"name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Only the file hash must be unique.\",\n-                                        \"displayName\": \"Hash\",\n-                                        \"value\": \"hash\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n-                                \"displayName\": \"Enforce Uniqueness\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"putgridfs-enforce-uniqueness\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"putgridfs-hash-attribute\": {\n-                                \"defaultValue\": \"hash.value\",\n-                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n-                                \"displayName\": \"Hash Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"putgridfs-hash-attribute\",\n+                                \"name\": \"json-payload\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-properties-prefix\": {\n-                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n-                                \"displayName\": \"File Properties Prefix\",\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-properties-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"file\",\n-                            \"gridfs\",\n-                            \"mongo\",\n-                            \"put\",\n-                            \"store\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n-                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-salesforce-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n-                                \"name\": \"objectType\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"put\",\n-                            \"salesforce\",\n-                            \"sobject\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n-                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Salesforce.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"age-delay\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n-                                \"displayName\": \"Age Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"age-delay\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"age-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n-                                \"displayName\": \"Age Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"age-field\",\n+                                \"name\": \"output-bucket\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"create-zero-record-files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n-                                \"displayName\": \"Create Zero Record FlowFiles\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-zero-record-files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-soql-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify the SOQL query to run.\",\n-                                \"displayName\": \"Custom SOQL Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"custom-soql-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-where-condition\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n-                                \"displayName\": \"Custom WHERE Condition\",\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"custom-where-condition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"field-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n-                                \"displayName\": \"Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"field-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"initial-age-filter\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n-                                \"displayName\": \"Initial Age Start Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"initial-age-filter\",\n+                                \"name\": \"vision-feature-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"query-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provide query by properties.\",\n-                                        \"displayName\": \"Property Based Query\",\n-                                        \"value\": \"property-based-query\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provide custom SOQL query.\",\n-                                        \"displayName\": \"Custom Query\",\n-                                        \"value\": \"custom-query\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"property-based-query\",\n-                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n-                                \"displayName\": \"Query Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"query-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sobject-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Salesforce sObject to be queried\",\n-                                \"displayName\": \"sObject Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sobject-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"query\",\n-                            \"salesforce\",\n-                            \"sobject\",\n-                            \"soql\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n-                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the total number of records in the FlowFile.\",\n-                                \"name\": \"total.record.count\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ccda-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-ccda-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"Parsing XML elements to FlowFile attributes is not recommend and should be replaced with record-oriented handling\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"skip-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate CDA message values\",\n-                                \"displayName\": \"Skip Validation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as CDA and its contents extracted as attributes.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as CDA or its contents extracted as attributes.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"CCDA\",\n-                            \"attributes\",\n-                            \"extract\",\n-                            \"healthcare\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.ccda.ExtractCCDAAttributes\",\n-                        \"typeDescription\": \"Extracts information from an Consolidated CDA formatted FlowFile and provides individual attributes as FlowFile attributes. The attributes are named as <Parent> <dot> <Key>. If the Parent is repeating, the naming will be <Parent> <underscore> <Parent Index> <dot> <Key>. For example, section.act_07.observation.name=Essential hypertension\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-metrics-reporting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-metrics-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The charset used by the graphite server\",\n-                                \"displayName\": \"Charset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"host\": {\n-                                \"description\": \"The hostname of the carbon listener\",\n-                                \"displayName\": \"Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"metric name prefix\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"A prefix that will be used for all metric names sent by reporters provided by this service.\",\n-                                \"displayName\": \"Metric Name Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"metric name prefix\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"port\": {\n-                                \"description\": \"The port on which carbon listens\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"graphite\",\n-                            \"metrics\",\n-                            \"reporting\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.GraphiteMetricReporterService\",\n-                        \"typeDescription\": \"A controller service that provides metric reporters for graphite. Used by MetricsReportingTask.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-metrics-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"metric reporter service\": {\n-                                \"description\": \"The service that provides a reporter for the gathered metrics\",\n-                                \"displayName\": \"Metric Reporter Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"metric reporter service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.metrics.reporting.reporter.service.MetricReporterService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"process group id\": {\n-                                \"description\": \"The id of the process group to report. If not specified, metrics of the root process groupare reported.\",\n-                                \"displayName\": \"Process Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"process group id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"metrics\",\n-                            \"reporting\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.metrics.reporting.task.MetricsReportingTask\",\n-                        \"typeDescription\": \"This reporting task reports a set of metrics regarding the JVM and the NiFi instanceto a reporter. The reporter is provided by a MetricReporterService. It can be optionally used for a specificprocess group if a property with the group id is provided.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-network-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"FIELDS_DESTINATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile attributes\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n-                                \"name\": \"udp.port\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original raw content\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"byte\",\n-                            \"datagram\",\n-                            \"netflow\",\n-                            \"network\",\n-                            \"packet\",\n-                            \"v5\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n-                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n-                                \"name\": \"netflowv5.header.*\"\n-                            },\n-                            {\n-                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n-                                \"name\": \"netflowv5.record.*\"\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-hadoop-nar\",\n+            \"artifact\": \"nifi-couchbase-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RECORD\",\n-                                        \"value\": \"RECORD\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLOCK\",\n-                                        \"value\": \"BLOCK\"\n-                                    }\n-                                ],\n-                                \"description\": \"Type of compression to use when creating Sequence File\",\n-                                \"displayName\": \"Compression type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Generated Sequence Files are sent to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming files that failed to generate a Sequence File are sent to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"create\",\n-                            \"hadoop\",\n-                            \"sequence file\",\n-                            \"sequencefile\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.CreateHadoopSequenceFile\",\n-                        \"typeDescription\": \"Creates Hadoop Sequence Files from incoming flow files\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"file_or_directory\": {\n-                                \"description\": \"The HDFS file or directory to delete. A wildcard expression may be used to only delete certain files\",\n-                                \"displayName\": \"Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file_or_directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"recursive\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Remove contents of a non-empty directory recursively\",\n-                                \"displayName\": \"Recursive\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When an incoming flowfile is used then if there are no errors invoking delete the flowfile will route here.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When an incoming flowfile is used and there is a failure while deleting then the flowfile will route here.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"delete\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"remove\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.DeleteHDFS\",\n-                        \"typeDescription\": \"Deletes one or more files or directories from HDFS. The path can be provided as an attribute from an incoming FlowFile, or a statically set path that is periodically removed. If this processor has an incoming connection, itwill ignore running on a periodic basis and instead rely on incoming FlowFiles to trigger a delete. Note that you may use a wildcard character to match multiple files or directories. If there are no incoming connections no flowfiles will be transfered to any output relationships.  If there is an incoming flowfile then provided there are no detected failures it will be transferred to success otherwise it will be sent to false. If knowledge of globbed files deleted is necessary use ListHDFS first to produce a specific list of files to delete. \",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"HDFS file to be deleted. If multiple files are deleted, then only the last filename is set.\",\n-                                \"name\": \"hdfs.filename\"\n-                            },\n-                            {\n-                                \"description\": \"HDFS Path specified in the delete request. If multiple paths are deleted, then only the last path is set.\",\n-                                \"name\": \"hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file to be deleted.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            },\n-                            {\n-                                \"description\": \"HDFS error message related to the hdfs.error.code\",\n-                                \"name\": \"hdfs.error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Filename\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The name of the HDFS file to retrieve\",\n-                                \"displayName\": \"HDFS Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HDFS Filename\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the HDFS file\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieve due to a communications failure. This generally indicates that the Fetch should be tried again.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"hcfs\",\n-                            \"hdfs\",\n-                            \"ingest\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                        \"typeDescription\": \"Retrieves a file from HDFS. The content of the incoming FlowFile is replaced by the content of the file in HDFS. The file in HDFS is left intact without any changes being made to it.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from HDFS\",\n-                                \"name\": \"hdfs.failure.reason\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            }\n-                        ]\n-                    },\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n+                        \"artifact\": \"nifi-couchbase-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Filter Match Name Only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n-                                \"displayName\": \"Filter Match Name Only\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Match Name Only\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Source File\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n-                                \"displayName\": \"Keep Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait between performing directory listings\",\n-                                \"displayName\": \"Polling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"fetch\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                        \"typeDescription\": \"Fetch files from Hadoop Distributed File System (HDFS) into FlowFiles. This Processor will delete the file from HDFS after fetching it.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n-                            },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-batch-size\": {\n-                                \"description\": \"Number of records to put into an output flowfile when 'Destination' is set to 'Content' and 'Group Results' is set to 'None'\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Details of given HDFS object will be stored in attributes of flowfile. WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases.\",\n-                                        \"displayName\": \"Attributes\",\n-                                        \"value\": \"gethdfsfileinfo-dest-attr\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Details of given HDFS object will be stored in a content in JSON format\",\n-                                        \"displayName\": \"Content\",\n-                                        \"value\": \"gethdfsfileinfo-dest-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"gethdfsfileinfo-dest-content\",\n-                                \"description\": \"Sets the destination for the resutls. When set to 'Content', attributes of flowfile won't be used for storing results. \",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-dir-filter\": {\n-                                \"description\": \"Regex. Only directories whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n-                                \"displayName\": \"Directory Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-dir-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-file-exclude-filter\": {\n-                                \"description\": \"Regex. Files whose names match the given regular expression will not be picked up. If not provided, any filter won't be apply (performance considerations).\",\n-                                \"displayName\": \"Exclude Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-file-exclude-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-file-filter\": {\n-                                \"description\": \"Regex. Only files whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n-                                \"displayName\": \"File Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-file-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-full-path\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"A directory to start listing from, or a file's full path.\",\n-                                \"displayName\": \"Full path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gethdfsfileinfo-full-path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-group\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Group all results into a single flowfile.\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"gethdfsfileinfo-group-all\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Group HDFS objects by their parent directories only. Processor will generate flowfile for each directory (if recursive). If 'Recurse Subdirectories' property set to 'false', then will have the same effect as 'All'\",\n-                                        \"displayName\": \"Parent Directory\",\n-                                        \"value\": \"gethdfsfileinfo-group-parent-dir\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Don't group results. Generate flowfile per each HDFS object.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"gethdfsfileinfo-group-none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"gethdfsfileinfo-group-all\",\n-                                \"description\": \"Groups HDFS objects\",\n-                                \"displayName\": \"Group Results\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-group\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-ignore-dotted-dirs\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, directories whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Directories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-ignore-dotted-dirs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-ignore-dotted-files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-ignore-dotted-files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gethdfsfileinfo-recurse-subdirs\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gethdfsfileinfo-recurse-subdirs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n+                                \"description\": \"Specify bucket password if necessary. Couchbase Server 5.0 or later should use 'User Name' and 'User Password' instead.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All successfully generated FlowFiles are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If no objects are found, original FlowFile are transferred to this relationship\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"All failed attempts to access HDFS will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Original FlowFiles are transferred to this relationship\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSFileInfo\",\n-                        \"typeDescription\": \"Retrieves a listing of files and directories from HDFS. This processor creates a FlowFile(s) that represents the HDFS file/dir with relevant information. Main purpose of this processor to provide functionality similar to HDFS Client, i.e. count, du, ls, test, etc. Unlike ListHDFS, this processor is stateless, supports incoming connections and provides information on a dir level. \",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file/dir found on HDFS.\",\n-                                \"name\": \"hdfs.objectName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the absolute path of the object's parent directory on HDFS. For example, if an object is a directory 'foo', under directory '/bar' then 'hdfs.objectName' will have value 'foo', and 'hdfs.path' will be '/bar'\",\n-                                \"name\": \"hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The type of an object. Possible values: directory, file, link\",\n-                                \"name\": \"hdfs.type\"\n-                            },\n-                            {\n-                                \"description\": \"The user that owns the object in HDFS\",\n-                                \"name\": \"hdfs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the object in HDFS\",\n-                                \"name\": \"hdfs.group\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the object in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n-                                \"name\": \"hdfs.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"In case of files: The number of bytes in the file in HDFS.  In case of dirs: Retuns storage space consumed by directory. \",\n-                                \"name\": \"hdfs.length\"\n-                            },\n-                            {\n-                                \"description\": \"In case of type='directory' will represent total count of files under this dir. Won't be populated to other types of HDFS objects. \",\n-                                \"name\": \"hdfs.count.files\"\n-                            },\n-                            {\n-                                \"description\": \"In case of type='directory' will represent total count of directories under this dir (including itself). Won't be populated to other types of HDFS objects. \",\n-                                \"name\": \"hdfs.count.dirs\"\n-                            },\n-                            {\n-                                \"description\": \"The number of HDFS replicas for the file\",\n-                                \"name\": \"hdfs.replication\"\n-                            },\n-                            {\n-                                \"description\": \"The permissions for the object in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"hdfs.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The status contains comma separated list of file/dir paths, which couldn't be listed/accessed. Status won't be set if no errors occured.\",\n-                                \"name\": \"hdfs.status\"\n-                            },\n-                            {\n-                                \"description\": \"When destination is 'attribute', will be populated with full tree of HDFS directory in JSON format.WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases\",\n-                                \"name\": \"hdfs.full.tree\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n+                                \"name\": \"Bucket Password for BUCKET_NAME\",\n+                                \"value\": \"bucket password\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Filter Match Name Only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n-                                \"displayName\": \"Filter Match Name Only\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Match Name Only\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Content\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"VALUE ONLY\",\n-                                        \"value\": \"VALUE ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KEY VALUE PAIR\",\n-                                        \"value\": \"KEY VALUE PAIR\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"VALUE ONLY\",\n-                                \"description\": \"Indicate if the content is to be both the key and value of the Sequence File, or just the value.\",\n-                                \"displayName\": \"FlowFile Content\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Content\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n+                            \"Connection String\": {\n+                                \"description\": \"The hostnames or ip addresses of the bootstraping nodes and optional parameters. Syntax) couchbase://node1,node2,nodeN?param1=value1&param2=value2&paramN=valueN\",\n+                                \"displayName\": \"Connection String\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Source File\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n-                                \"displayName\": \"Keep Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n+                                \"name\": \"Connection String\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"user-name\": {\n+                                \"description\": \"The user name to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait between performing directory listings\",\n-                                \"displayName\": \"Polling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"fetch\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"sequence file\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSSequenceFile\",\n-                        \"typeDescription\": \"Fetch sequence files from Hadoop Distributed File System (HDFS) into FlowFiles\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The HDFS directory from which files should be read\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"This property is ignored.  State will be stored in the LOCAL or CLUSTER scope by the State Manager based on NiFi's configuration.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-filter-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Filtering will be applied to the names of directories and files.  If Recurse Subdirectories is set to true, only subdirectories with a matching name will be searched for files that match the regular expression defined in File Filter.\",\n-                                        \"displayName\": \"Directories and Files\",\n-                                        \"value\": \"filter-mode-directories-and-files\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Filtering will only be applied to the names of files.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files that match the regular expression defined in File Filter.\",\n-                                        \"displayName\": \"Files Only\",\n-                                        \"value\": \"filter-mode-files-only\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Filtering will be applied by evaluating the regular expression defined in File Filter against the full path of files with and without the scheme and authority.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files in which the full path of the file matches the regular expression defined in File Filter.  See 'Additional Details' for more information.\",\n-                                        \"displayName\": \"Full Path\",\n-                                        \"value\": \"filter-mode-full-path\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"filter-mode-directories-and-files\",\n-                                \"description\": \"Determines how the regular expression in  File Filter will be used when retrieving listings.\",\n-                                \"displayName\": \"File Filter Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-filter-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"maximum-file-age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored. Minimum value is 100ms.\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-file-age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"minimum-file-age\": {\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"minimum-file-age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of HDFS files, the latest timestamp of all the files listed and the latest timestamp of all the files transferred are both stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run, without having to store all of the actual filenames/paths which could lead to performance problems. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"hadoop\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                        \"typeDescription\": \"Retrieves a listing of files from HDFS. Each time a listing is performed, the files with the latest timestamp will be excluded and picked up during the next execution of the processor. This is done to ensure that we do not miss any files, or produce duplicates, in the cases where files with the same timestamp are written immediately before and after a single execution of the processor. For each file that is listed in HDFS, this processor creates a FlowFile that represents the HDFS file to be fetched in conjunction with FetchHDFS. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Unlike GetHDFS, this Processor does not delete any data from HDFS.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from HDFS.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the absolute path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The user that owns the file in HDFS\",\n-                                \"name\": \"hdfs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the file in HDFS\",\n-                                \"name\": \"hdfs.group\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n-                                \"name\": \"hdfs.lastModified\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes in the file in HDFS\",\n-                                \"name\": \"hdfs.length\"\n-                            },\n-                            {\n-                                \"description\": \"The number of HDFS replicas for hte file\",\n-                                \"name\": \"hdfs.replication\"\n-                            },\n-                            {\n-                                \"description\": \"The permissions for the file in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"hdfs.permissions\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Replaces the existing file if any.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Failed rename operation stops processing and routes to success.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Failing to rename a file routes to failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Operation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"move\",\n-                                        \"value\": \"move\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"copy\",\n-                                        \"value\": \"copy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"move\",\n-                                \"description\": \"The operation that will be performed on the source file\",\n-                                \"displayName\": \"HDFS Operation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HDFS Operation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Directory or File\": {\n-                                \"defaultValue\": \"${path}\",\n-                                \"description\": \"The HDFS directory from which files should be read, or a single file to read.\",\n-                                \"displayName\": \"Input Directory or File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Directory or File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Directory\": {\n-                                \"description\": \"The HDFS directory where the files will be moved to\",\n-                                \"displayName\": \"Output Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Output Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Group\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully renamed on HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be renamed on HDFS are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"move\",\n-                            \"moveHDFS\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.MoveHDFS\",\n-                        \"typeDescription\": \"Rename existing files or a directory of files (non-recursive) on Hadoop Distributed File System (HDFS).\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Block Size\": {\n-                                \"description\": \"Size of each block as written to HDFS. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"Block Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Block Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression codec\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No compression\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Default ZLIB compression\",\n-                                        \"displayName\": \"DEFAULT\",\n-                                        \"value\": \"DEFAULT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP compression\",\n-                                        \"displayName\": \"BZIP\",\n-                                        \"value\": \"BZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP compression\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4 compression\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy compression\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n-                                        \"displayName\": \"AUTOMATIC\",\n-                                        \"value\": \"AUTOMATIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Compression codec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression codec\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Replaces the existing file if any.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignores the flow file and routes it to success.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Penalizes the flow file and routes it to failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Appends to the existing file if any, creates a new file otherwise.\",\n-                                        \"displayName\": \"append\",\n-                                        \"value\": \"append\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The parent HDFS directory to which files should be written. The directory will be created if it doesn't exist.\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IO Buffer Size\": {\n-                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"IO Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IO Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Locality\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Directs the HDFS system to ignore locality rules so that data is distributed randomly throughout the cluster\",\n-                                \"displayName\": \"Ignore Locality\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Locality\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permissions umask\": {\n-                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop property \\\"fs.permissions.umask-mode\\\".  If this property and \\\"fs.permissions.umask-mode\\\" are undefined, the Hadoop default \\\"022\\\" will be used.  If the PutHDFS target folder has a default ACL defined, the umask property is ignored by HDFS.\",\n-                                \"displayName\": \"Permissions umask\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permissions umask\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Replication\": {\n-                                \"description\": \"Number of times that HDFS will replicate each file. This overrides the Hadoop Configuration\",\n-                                \"displayName\": \"Replication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"writing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor writes FlowFile data into a temporary file and renames it after completion. This prevents other processes from reading partially written files.\",\n-                                        \"displayName\": \"Write and rename\",\n-                                        \"value\": \"writeAndRename\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor writes FlowFile data directly to the destination file. In some cases this might cause reading partially written files.\",\n-                                        \"displayName\": \"Simple write\",\n-                                        \"value\": \"simpleWrite\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"writeAndRename\",\n-                                \"description\": \"Defines the approach for writing the FlowFile data.\",\n-                                \"displayName\": \"Writing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to HDFS are transferred to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to HDFS for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"HCFS\",\n-                            \"HDFS\",\n-                            \"copy\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.PutHDFS\",\n-                        \"typeDescription\": \"Write FlowFile data to Hadoop Distributed File System (HDFS)\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            },\n-                            {\n-                                \"description\": \"The result(true/false) indicates if the folder is created by the processor.\",\n-                                \"name\": \"target.dir.created\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hadoop-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Event Types to Filter On\": {\n-                                \"defaultValue\": \"append, close, create, metadata, rename, unlink\",\n-                                \"description\": \"A comma-separated list of event types to process. Valid event types are: append, close, create, metadata, rename, and unlink. Case does not matter.\",\n-                                \"displayName\": \"Event Types to Filter On\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Types to Filter On\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HDFS Path to Watch\": {\n-                                \"description\": \"The HDFS path to get event notifications for. This property accepts both expression language and regular expressions. This will be evaluated during the OnScheduled phase.\",\n-                                \"displayName\": \"HDFS Path to Watch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HDFS Path to Watch\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"IOException Retries During Event Polling\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"According to the HDFS admin API for event polling it is good to retry at least a few times. This number defines how many times the poll will be retried if it throws an IOException.\",\n-                                \"displayName\": \"IOException Retries During Event Polling\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"IOException Retries During Event Polling\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Hidden Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true and the final component of the path associated with a given event starts with a '.' then that event will not be processed.\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Poll Duration\": {\n-                                \"defaultValue\": \"1 second\",\n-                                \"description\": \"The time before the polling method returns with the next batch of events if they exist. It may exceed this amount of time by up to the time required for an RPC to the NameNode.\",\n-                                \"displayName\": \"Poll Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Poll Duration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n-                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last used transaction id is stored. This is used \",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A flow file with updated information about a specific event will be sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"events\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"inotify\",\n-                            \"notifications\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.hadoop.inotify.GetHDFSEvents\",\n-                        \"typeDescription\": \"This processor polls the notification events provided by the HdfsAdmin API. Since this uses the HdfsAdmin APIs it is required to run as an HDFS super user. Currently there are six types of events (append, close, create, metadata, rename, and unlink). Please see org.apache.hadoop.hdfs.inotify.Event documentation for full explanations of each event. This processor will poll for new events based on a defined duration. For each event received a new flow file will be created with the expected attributes and the event itself serialized to JSON and written to the flow file's content. For example, if event.type is APPEND then the content of the flow file will contain a JSON file containing the information about the append event. If successful the flow files are sent to the 'success' relationship. Be careful of where the generated flow files are stored. If the flow files are stored in one of processor's watch directories there will be a never ending flow of events. It is also important to be aware that this processor must consume all events. The filtering must happen within the processor. This is because the HDFS admin's event notifications API does not have filtering.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This is always application/json.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"This will specify the specific HDFS notification event type. Currently there are six types of events (append, close, create, metadata, rename, and unlink).\",\n-                                \"name\": \"hdfs.inotify.event.type\"\n-                            },\n-                            {\n-                                \"description\": \"The specific path that the event is tied to.\",\n-                                \"name\": \"hdfs.inotify.event.path\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-splunk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Application\": {\n-                                \"description\": \"The Splunk Application to query.\",\n-                                \"displayName\": \"Application\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to the Splunk server.\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Earliest Time\": {\n-                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Earliest Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Earliest Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Latest Time\": {\n-                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Latest Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Latest Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ATOM\",\n-                                        \"value\": \"ATOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CSV\",\n-                                        \"value\": \"CSV\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_COLS\",\n-                                        \"value\": \"JSON_COLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_ROWS\",\n-                                        \"value\": \"JSON_ROWS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"JSON\",\n-                                \"description\": \"The output mode for the results.\",\n-                                \"displayName\": \"Output Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8089\",\n-                                \"description\": \"The port of the Splunk server.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Query\": {\n-                                \"defaultValue\": \"search * | head 100\",\n-                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from the Splunk server.\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Security Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Field Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n-                                        \"displayName\": \"Event Time\",\n-                                        \"value\": \"Event Time\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n-                                        \"displayName\": \"Index Time\",\n-                                        \"value\": \"Index Time\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Event Time\",\n-                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n-                                \"displayName\": \"Time Field Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Field Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Range Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n-                                        \"displayName\": \"Managed from Beginning\",\n-                                        \"value\": \"Managed from Beginning\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n-                                        \"displayName\": \"Managed from Current\",\n-                                        \"value\": \"Managed from Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n-                                        \"displayName\": \"Provided\",\n-                                        \"value\": \"Provided\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Provided\",\n-                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n-                                \"displayName\": \"Time Range Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Range Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Time Zone\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Abidjan\",\n-                                        \"value\": \"Africa/Abidjan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Accra\",\n-                                        \"value\": \"Africa/Accra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Addis_Ababa\",\n-                                        \"value\": \"Africa/Addis_Ababa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Algiers\",\n-                                        \"value\": \"Africa/Algiers\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmara\",\n-                                        \"value\": \"Africa/Asmara\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmera\",\n-                                        \"value\": \"Africa/Asmera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bamako\",\n-                                        \"value\": \"Africa/Bamako\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bangui\",\n-                                        \"value\": \"Africa/Bangui\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Banjul\",\n-                                        \"value\": \"Africa/Banjul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bissau\",\n-                                        \"value\": \"Africa/Bissau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Blantyre\",\n-                                        \"value\": \"Africa/Blantyre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Brazzaville\",\n-                                        \"value\": \"Africa/Brazzaville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bujumbura\",\n-                                        \"value\": \"Africa/Bujumbura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Cairo\",\n-                                        \"value\": \"Africa/Cairo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Casablanca\",\n-                                        \"value\": \"Africa/Casablanca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ceuta\",\n-                                        \"value\": \"Africa/Ceuta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Conakry\",\n-                                        \"value\": \"Africa/Conakry\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dakar\",\n-                                        \"value\": \"Africa/Dakar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n-                                        \"value\": \"Africa/Dar_es_Salaam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Djibouti\",\n-                                        \"value\": \"Africa/Djibouti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Douala\",\n-                                        \"value\": \"Africa/Douala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/El_Aaiun\",\n-                                        \"value\": \"Africa/El_Aaiun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Freetown\",\n-                                        \"value\": \"Africa/Freetown\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Gaborone\",\n-                                        \"value\": \"Africa/Gaborone\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Harare\",\n-                                        \"value\": \"Africa/Harare\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Johannesburg\",\n-                                        \"value\": \"Africa/Johannesburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Juba\",\n-                                        \"value\": \"Africa/Juba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kampala\",\n-                                        \"value\": \"Africa/Kampala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Khartoum\",\n-                                        \"value\": \"Africa/Khartoum\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kigali\",\n-                                        \"value\": \"Africa/Kigali\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kinshasa\",\n-                                        \"value\": \"Africa/Kinshasa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lagos\",\n-                                        \"value\": \"Africa/Lagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Libreville\",\n-                                        \"value\": \"Africa/Libreville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lome\",\n-                                        \"value\": \"Africa/Lome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Luanda\",\n-                                        \"value\": \"Africa/Luanda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lubumbashi\",\n-                                        \"value\": \"Africa/Lubumbashi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lusaka\",\n-                                        \"value\": \"Africa/Lusaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Malabo\",\n-                                        \"value\": \"Africa/Malabo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maputo\",\n-                                        \"value\": \"Africa/Maputo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maseru\",\n-                                        \"value\": \"Africa/Maseru\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mbabane\",\n-                                        \"value\": \"Africa/Mbabane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mogadishu\",\n-                                        \"value\": \"Africa/Mogadishu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Monrovia\",\n-                                        \"value\": \"Africa/Monrovia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nairobi\",\n-                                        \"value\": \"Africa/Nairobi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ndjamena\",\n-                                        \"value\": \"Africa/Ndjamena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Niamey\",\n-                                        \"value\": \"Africa/Niamey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nouakchott\",\n-                                        \"value\": \"Africa/Nouakchott\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ouagadougou\",\n-                                        \"value\": \"Africa/Ouagadougou\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Porto-Novo\",\n-                                        \"value\": \"Africa/Porto-Novo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Sao_Tome\",\n-                                        \"value\": \"Africa/Sao_Tome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Timbuktu\",\n-                                        \"value\": \"Africa/Timbuktu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tripoli\",\n-                                        \"value\": \"Africa/Tripoli\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tunis\",\n-                                        \"value\": \"Africa/Tunis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Windhoek\",\n-                                        \"value\": \"Africa/Windhoek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Adak\",\n-                                        \"value\": \"America/Adak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anchorage\",\n-                                        \"value\": \"America/Anchorage\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anguilla\",\n-                                        \"value\": \"America/Anguilla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Antigua\",\n-                                        \"value\": \"America/Antigua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Araguaina\",\n-                                        \"value\": \"America/Araguaina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n-                                        \"value\": \"America/Argentina/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Catamarca\",\n-                                        \"value\": \"America/Argentina/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n-                                        \"value\": \"America/Argentina/ComodRivadavia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Cordoba\",\n-                                        \"value\": \"America/Argentina/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Jujuy\",\n-                                        \"value\": \"America/Argentina/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/La_Rioja\",\n-                                        \"value\": \"America/Argentina/La_Rioja\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Mendoza\",\n-                                        \"value\": \"America/Argentina/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n-                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Salta\",\n-                                        \"value\": \"America/Argentina/Salta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Juan\",\n-                                        \"value\": \"America/Argentina/San_Juan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Luis\",\n-                                        \"value\": \"America/Argentina/San_Luis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Tucuman\",\n-                                        \"value\": \"America/Argentina/Tucuman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Ushuaia\",\n-                                        \"value\": \"America/Argentina/Ushuaia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Aruba\",\n-                                        \"value\": \"America/Aruba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Asuncion\",\n-                                        \"value\": \"America/Asuncion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atikokan\",\n-                                        \"value\": \"America/Atikokan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atka\",\n-                                        \"value\": \"America/Atka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia\",\n-                                        \"value\": \"America/Bahia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia_Banderas\",\n-                                        \"value\": \"America/Bahia_Banderas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Barbados\",\n-                                        \"value\": \"America/Barbados\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belem\",\n-                                        \"value\": \"America/Belem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belize\",\n-                                        \"value\": \"America/Belize\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Blanc-Sablon\",\n-                                        \"value\": \"America/Blanc-Sablon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boa_Vista\",\n-                                        \"value\": \"America/Boa_Vista\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bogota\",\n-                                        \"value\": \"America/Bogota\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boise\",\n-                                        \"value\": \"America/Boise\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Buenos_Aires\",\n-                                        \"value\": \"America/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cambridge_Bay\",\n-                                        \"value\": \"America/Cambridge_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Campo_Grande\",\n-                                        \"value\": \"America/Campo_Grande\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cancun\",\n-                                        \"value\": \"America/Cancun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Caracas\",\n-                                        \"value\": \"America/Caracas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Catamarca\",\n-                                        \"value\": \"America/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayenne\",\n-                                        \"value\": \"America/Cayenne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayman\",\n-                                        \"value\": \"America/Cayman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chicago\",\n-                                        \"value\": \"America/Chicago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chihuahua\",\n-                                        \"value\": \"America/Chihuahua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ciudad_Juarez\",\n-                                        \"value\": \"America/Ciudad_Juarez\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Coral_Harbour\",\n-                                        \"value\": \"America/Coral_Harbour\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cordoba\",\n-                                        \"value\": \"America/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Costa_Rica\",\n-                                        \"value\": \"America/Costa_Rica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Creston\",\n-                                        \"value\": \"America/Creston\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cuiaba\",\n-                                        \"value\": \"America/Cuiaba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Curacao\",\n-                                        \"value\": \"America/Curacao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Danmarkshavn\",\n-                                        \"value\": \"America/Danmarkshavn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson\",\n-                                        \"value\": \"America/Dawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson_Creek\",\n-                                        \"value\": \"America/Dawson_Creek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Denver\",\n-                                        \"value\": \"America/Denver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Detroit\",\n-                                        \"value\": \"America/Detroit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dominica\",\n-                                        \"value\": \"America/Dominica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Edmonton\",\n-                                        \"value\": \"America/Edmonton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Eirunepe\",\n-                                        \"value\": \"America/Eirunepe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/El_Salvador\",\n-                                        \"value\": \"America/El_Salvador\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ensenada\",\n-                                        \"value\": \"America/Ensenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Nelson\",\n-                                        \"value\": \"America/Fort_Nelson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Wayne\",\n-                                        \"value\": \"America/Fort_Wayne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fortaleza\",\n-                                        \"value\": \"America/Fortaleza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Glace_Bay\",\n-                                        \"value\": \"America/Glace_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Godthab\",\n-                                        \"value\": \"America/Godthab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Goose_Bay\",\n-                                        \"value\": \"America/Goose_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grand_Turk\",\n-                                        \"value\": \"America/Grand_Turk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grenada\",\n-                                        \"value\": \"America/Grenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guadeloupe\",\n-                                        \"value\": \"America/Guadeloupe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guatemala\",\n-                                        \"value\": \"America/Guatemala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guayaquil\",\n-                                        \"value\": \"America/Guayaquil\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guyana\",\n-                                        \"value\": \"America/Guyana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Halifax\",\n-                                        \"value\": \"America/Halifax\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Havana\",\n-                                        \"value\": \"America/Havana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Hermosillo\",\n-                                        \"value\": \"America/Hermosillo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Indianapolis\",\n-                                        \"value\": \"America/Indiana/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Knox\",\n-                                        \"value\": \"America/Indiana/Knox\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Marengo\",\n-                                        \"value\": \"America/Indiana/Marengo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Petersburg\",\n-                                        \"value\": \"America/Indiana/Petersburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Tell_City\",\n-                                        \"value\": \"America/Indiana/Tell_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vevay\",\n-                                        \"value\": \"America/Indiana/Vevay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vincennes\",\n-                                        \"value\": \"America/Indiana/Vincennes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Winamac\",\n-                                        \"value\": \"America/Indiana/Winamac\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indianapolis\",\n-                                        \"value\": \"America/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Inuvik\",\n-                                        \"value\": \"America/Inuvik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Iqaluit\",\n-                                        \"value\": \"America/Iqaluit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jamaica\",\n-                                        \"value\": \"America/Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jujuy\",\n-                                        \"value\": \"America/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Juneau\",\n-                                        \"value\": \"America/Juneau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Louisville\",\n-                                        \"value\": \"America/Kentucky/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Monticello\",\n-                                        \"value\": \"America/Kentucky/Monticello\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Knox_IN\",\n-                                        \"value\": \"America/Knox_IN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kralendijk\",\n-                                        \"value\": \"America/Kralendijk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/La_Paz\",\n-                                        \"value\": \"America/La_Paz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lima\",\n-                                        \"value\": \"America/Lima\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Los_Angeles\",\n-                                        \"value\": \"America/Los_Angeles\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Louisville\",\n-                                        \"value\": \"America/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lower_Princes\",\n-                                        \"value\": \"America/Lower_Princes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Maceio\",\n-                                        \"value\": \"America/Maceio\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Managua\",\n-                                        \"value\": \"America/Managua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Manaus\",\n-                                        \"value\": \"America/Manaus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Marigot\",\n-                                        \"value\": \"America/Marigot\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Martinique\",\n-                                        \"value\": \"America/Martinique\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Matamoros\",\n-                                        \"value\": \"America/Matamoros\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mazatlan\",\n-                                        \"value\": \"America/Mazatlan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mendoza\",\n-                                        \"value\": \"America/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Menominee\",\n-                                        \"value\": \"America/Menominee\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Merida\",\n-                                        \"value\": \"America/Merida\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Metlakatla\",\n-                                        \"value\": \"America/Metlakatla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mexico_City\",\n-                                        \"value\": \"America/Mexico_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Miquelon\",\n-                                        \"value\": \"America/Miquelon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Moncton\",\n-                                        \"value\": \"America/Moncton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Monterrey\",\n-                                        \"value\": \"America/Monterrey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montevideo\",\n-                                        \"value\": \"America/Montevideo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montreal\",\n-                                        \"value\": \"America/Montreal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montserrat\",\n-                                        \"value\": \"America/Montserrat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nassau\",\n-                                        \"value\": \"America/Nassau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/New_York\",\n-                                        \"value\": \"America/New_York\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nipigon\",\n-                                        \"value\": \"America/Nipigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nome\",\n-                                        \"value\": \"America/Nome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Noronha\",\n-                                        \"value\": \"America/Noronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Beulah\",\n-                                        \"value\": \"America/North_Dakota/Beulah\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Center\",\n-                                        \"value\": \"America/North_Dakota/Center\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n-                                        \"value\": \"America/North_Dakota/New_Salem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nuuk\",\n-                                        \"value\": \"America/Nuuk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ojinaga\",\n-                                        \"value\": \"America/Ojinaga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Panama\",\n-                                        \"value\": \"America/Panama\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Pangnirtung\",\n-                                        \"value\": \"America/Pangnirtung\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Paramaribo\",\n-                                        \"value\": \"America/Paramaribo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Phoenix\",\n-                                        \"value\": \"America/Phoenix\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port-au-Prince\",\n-                                        \"value\": \"America/Port-au-Prince\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port_of_Spain\",\n-                                        \"value\": \"America/Port_of_Spain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Acre\",\n-                                        \"value\": \"America/Porto_Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Velho\",\n-                                        \"value\": \"America/Porto_Velho\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Puerto_Rico\",\n-                                        \"value\": \"America/Puerto_Rico\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Punta_Arenas\",\n-                                        \"value\": \"America/Punta_Arenas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rainy_River\",\n-                                        \"value\": \"America/Rainy_River\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rankin_Inlet\",\n-                                        \"value\": \"America/Rankin_Inlet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Recife\",\n-                                        \"value\": \"America/Recife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Regina\",\n-                                        \"value\": \"America/Regina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Resolute\",\n-                                        \"value\": \"America/Resolute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rio_Branco\",\n-                                        \"value\": \"America/Rio_Branco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rosario\",\n-                                        \"value\": \"America/Rosario\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santa_Isabel\",\n-                                        \"value\": \"America/Santa_Isabel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santarem\",\n-                                        \"value\": \"America/Santarem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santiago\",\n-                                        \"value\": \"America/Santiago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santo_Domingo\",\n-                                        \"value\": \"America/Santo_Domingo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sao_Paulo\",\n-                                        \"value\": \"America/Sao_Paulo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Scoresbysund\",\n-                                        \"value\": \"America/Scoresbysund\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Shiprock\",\n-                                        \"value\": \"America/Shiprock\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sitka\",\n-                                        \"value\": \"America/Sitka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Barthelemy\",\n-                                        \"value\": \"America/St_Barthelemy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Johns\",\n-                                        \"value\": \"America/St_Johns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Kitts\",\n-                                        \"value\": \"America/St_Kitts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Lucia\",\n-                                        \"value\": \"America/St_Lucia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Thomas\",\n-                                        \"value\": \"America/St_Thomas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Vincent\",\n-                                        \"value\": \"America/St_Vincent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Swift_Current\",\n-                                        \"value\": \"America/Swift_Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tegucigalpa\",\n-                                        \"value\": \"America/Tegucigalpa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thule\",\n-                                        \"value\": \"America/Thule\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thunder_Bay\",\n-                                        \"value\": \"America/Thunder_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tijuana\",\n-                                        \"value\": \"America/Tijuana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Toronto\",\n-                                        \"value\": \"America/Toronto\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tortola\",\n-                                        \"value\": \"America/Tortola\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Vancouver\",\n-                                        \"value\": \"America/Vancouver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Virgin\",\n-                                        \"value\": \"America/Virgin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Whitehorse\",\n-                                        \"value\": \"America/Whitehorse\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Winnipeg\",\n-                                        \"value\": \"America/Winnipeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yakutat\",\n-                                        \"value\": \"America/Yakutat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yellowknife\",\n-                                        \"value\": \"America/Yellowknife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Casey\",\n-                                        \"value\": \"Antarctica/Casey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Davis\",\n-                                        \"value\": \"Antarctica/Davis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/DumontDUrville\",\n-                                        \"value\": \"Antarctica/DumontDUrville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Macquarie\",\n-                                        \"value\": \"Antarctica/Macquarie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Mawson\",\n-                                        \"value\": \"Antarctica/Mawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/McMurdo\",\n-                                        \"value\": \"Antarctica/McMurdo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Palmer\",\n-                                        \"value\": \"Antarctica/Palmer\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Rothera\",\n-                                        \"value\": \"Antarctica/Rothera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/South_Pole\",\n-                                        \"value\": \"Antarctica/South_Pole\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Syowa\",\n-                                        \"value\": \"Antarctica/Syowa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Troll\",\n-                                        \"value\": \"Antarctica/Troll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Vostok\",\n-                                        \"value\": \"Antarctica/Vostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Arctic/Longyearbyen\",\n-                                        \"value\": \"Arctic/Longyearbyen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aden\",\n-                                        \"value\": \"Asia/Aden\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Almaty\",\n-                                        \"value\": \"Asia/Almaty\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Amman\",\n-                                        \"value\": \"Asia/Amman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Anadyr\",\n-                                        \"value\": \"Asia/Anadyr\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtau\",\n-                                        \"value\": \"Asia/Aqtau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtobe\",\n-                                        \"value\": \"Asia/Aqtobe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashgabat\",\n-                                        \"value\": \"Asia/Ashgabat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashkhabad\",\n-                                        \"value\": \"Asia/Ashkhabad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Atyrau\",\n-                                        \"value\": \"Asia/Atyrau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baghdad\",\n-                                        \"value\": \"Asia/Baghdad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bahrain\",\n-                                        \"value\": \"Asia/Bahrain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baku\",\n-                                        \"value\": \"Asia/Baku\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bangkok\",\n-                                        \"value\": \"Asia/Bangkok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Barnaul\",\n-                                        \"value\": \"Asia/Barnaul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Beirut\",\n-                                        \"value\": \"Asia/Beirut\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bishkek\",\n-                                        \"value\": \"Asia/Bishkek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Brunei\",\n-                                        \"value\": \"Asia/Brunei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Calcutta\",\n-                                        \"value\": \"Asia/Calcutta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chita\",\n-                                        \"value\": \"Asia/Chita\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Choibalsan\",\n-                                        \"value\": \"Asia/Choibalsan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chongqing\",\n-                                        \"value\": \"Asia/Chongqing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chungking\",\n-                                        \"value\": \"Asia/Chungking\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Colombo\",\n-                                        \"value\": \"Asia/Colombo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dacca\",\n-                                        \"value\": \"Asia/Dacca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Damascus\",\n-                                        \"value\": \"Asia/Damascus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dhaka\",\n-                                        \"value\": \"Asia/Dhaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dili\",\n-                                        \"value\": \"Asia/Dili\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dubai\",\n-                                        \"value\": \"Asia/Dubai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dushanbe\",\n-                                        \"value\": \"Asia/Dushanbe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Famagusta\",\n-                                        \"value\": \"Asia/Famagusta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Gaza\",\n-                                        \"value\": \"Asia/Gaza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Harbin\",\n-                                        \"value\": \"Asia/Harbin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hebron\",\n-                                        \"value\": \"Asia/Hebron\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n-                                        \"value\": \"Asia/Ho_Chi_Minh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hong_Kong\",\n-                                        \"value\": \"Asia/Hong_Kong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hovd\",\n-                                        \"value\": \"Asia/Hovd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Irkutsk\",\n-                                        \"value\": \"Asia/Irkutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Istanbul\",\n-                                        \"value\": \"Asia/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jakarta\",\n-                                        \"value\": \"Asia/Jakarta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jayapura\",\n-                                        \"value\": \"Asia/Jayapura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jerusalem\",\n-                                        \"value\": \"Asia/Jerusalem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kabul\",\n-                                        \"value\": \"Asia/Kabul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kamchatka\",\n-                                        \"value\": \"Asia/Kamchatka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Karachi\",\n-                                        \"value\": \"Asia/Karachi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kashgar\",\n-                                        \"value\": \"Asia/Kashgar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kathmandu\",\n-                                        \"value\": \"Asia/Kathmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Katmandu\",\n-                                        \"value\": \"Asia/Katmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Khandyga\",\n-                                        \"value\": \"Asia/Khandyga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kolkata\",\n-                                        \"value\": \"Asia/Kolkata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Krasnoyarsk\",\n-                                        \"value\": \"Asia/Krasnoyarsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n-                                        \"value\": \"Asia/Kuala_Lumpur\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuching\",\n-                                        \"value\": \"Asia/Kuching\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuwait\",\n-                                        \"value\": \"Asia/Kuwait\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macao\",\n-                                        \"value\": \"Asia/Macao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macau\",\n-                                        \"value\": \"Asia/Macau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Magadan\",\n-                                        \"value\": \"Asia/Magadan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Makassar\",\n-                                        \"value\": \"Asia/Makassar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Manila\",\n-                                        \"value\": \"Asia/Manila\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Muscat\",\n-                                        \"value\": \"Asia/Muscat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Nicosia\",\n-                                        \"value\": \"Asia/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novokuznetsk\",\n-                                        \"value\": \"Asia/Novokuznetsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novosibirsk\",\n-                                        \"value\": \"Asia/Novosibirsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Omsk\",\n-                                        \"value\": \"Asia/Omsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Oral\",\n-                                        \"value\": \"Asia/Oral\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Phnom_Penh\",\n-                                        \"value\": \"Asia/Phnom_Penh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pontianak\",\n-                                        \"value\": \"Asia/Pontianak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pyongyang\",\n-                                        \"value\": \"Asia/Pyongyang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qatar\",\n-                                        \"value\": \"Asia/Qatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qostanay\",\n-                                        \"value\": \"Asia/Qostanay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qyzylorda\",\n-                                        \"value\": \"Asia/Qyzylorda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Rangoon\",\n-                                        \"value\": \"Asia/Rangoon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Riyadh\",\n-                                        \"value\": \"Asia/Riyadh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Saigon\",\n-                                        \"value\": \"Asia/Saigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Sakhalin\",\n-                                        \"value\": \"Asia/Sakhalin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Samarkand\",\n-                                        \"value\": \"Asia/Samarkand\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Seoul\",\n-                                        \"value\": \"Asia/Seoul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Shanghai\",\n-                                        \"value\": \"Asia/Shanghai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Singapore\",\n-                                        \"value\": \"Asia/Singapore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Srednekolymsk\",\n-                                        \"value\": \"Asia/Srednekolymsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Taipei\",\n-                                        \"value\": \"Asia/Taipei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tashkent\",\n-                                        \"value\": \"Asia/Tashkent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tbilisi\",\n-                                        \"value\": \"Asia/Tbilisi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tehran\",\n-                                        \"value\": \"Asia/Tehran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tel_Aviv\",\n-                                        \"value\": \"Asia/Tel_Aviv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimbu\",\n-                                        \"value\": \"Asia/Thimbu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimphu\",\n-                                        \"value\": \"Asia/Thimphu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tokyo\",\n-                                        \"value\": \"Asia/Tokyo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tomsk\",\n-                                        \"value\": \"Asia/Tomsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ujung_Pandang\",\n-                                        \"value\": \"Asia/Ujung_Pandang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulaanbaatar\",\n-                                        \"value\": \"Asia/Ulaanbaatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulan_Bator\",\n-                                        \"value\": \"Asia/Ulan_Bator\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Urumqi\",\n-                                        \"value\": \"Asia/Urumqi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ust-Nera\",\n-                                        \"value\": \"Asia/Ust-Nera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vientiane\",\n-                                        \"value\": \"Asia/Vientiane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vladivostok\",\n-                                        \"value\": \"Asia/Vladivostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yakutsk\",\n-                                        \"value\": \"Asia/Yakutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yangon\",\n-                                        \"value\": \"Asia/Yangon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yekaterinburg\",\n-                                        \"value\": \"Asia/Yekaterinburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yerevan\",\n-                                        \"value\": \"Asia/Yerevan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Azores\",\n-                                        \"value\": \"Atlantic/Azores\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Bermuda\",\n-                                        \"value\": \"Atlantic/Bermuda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Canary\",\n-                                        \"value\": \"Atlantic/Canary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Cape_Verde\",\n-                                        \"value\": \"Atlantic/Cape_Verde\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faeroe\",\n-                                        \"value\": \"Atlantic/Faeroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faroe\",\n-                                        \"value\": \"Atlantic/Faroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n-                                        \"value\": \"Atlantic/Jan_Mayen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Madeira\",\n-                                        \"value\": \"Atlantic/Madeira\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Reykjavik\",\n-                                        \"value\": \"Atlantic/Reykjavik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/South_Georgia\",\n-                                        \"value\": \"Atlantic/South_Georgia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/St_Helena\",\n-                                        \"value\": \"Atlantic/St_Helena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Stanley\",\n-                                        \"value\": \"Atlantic/Stanley\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/ACT\",\n-                                        \"value\": \"Australia/ACT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Adelaide\",\n-                                        \"value\": \"Australia/Adelaide\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Brisbane\",\n-                                        \"value\": \"Australia/Brisbane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Broken_Hill\",\n-                                        \"value\": \"Australia/Broken_Hill\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Canberra\",\n-                                        \"value\": \"Australia/Canberra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Currie\",\n-                                        \"value\": \"Australia/Currie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Darwin\",\n-                                        \"value\": \"Australia/Darwin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Eucla\",\n-                                        \"value\": \"Australia/Eucla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Hobart\",\n-                                        \"value\": \"Australia/Hobart\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/LHI\",\n-                                        \"value\": \"Australia/LHI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lindeman\",\n-                                        \"value\": \"Australia/Lindeman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lord_Howe\",\n-                                        \"value\": \"Australia/Lord_Howe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Melbourne\",\n-                                        \"value\": \"Australia/Melbourne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/NSW\",\n-                                        \"value\": \"Australia/NSW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/North\",\n-                                        \"value\": \"Australia/North\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Perth\",\n-                                        \"value\": \"Australia/Perth\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Queensland\",\n-                                        \"value\": \"Australia/Queensland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/South\",\n-                                        \"value\": \"Australia/South\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Sydney\",\n-                                        \"value\": \"Australia/Sydney\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Tasmania\",\n-                                        \"value\": \"Australia/Tasmania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Victoria\",\n-                                        \"value\": \"Australia/Victoria\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/West\",\n-                                        \"value\": \"Australia/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Yancowinna\",\n-                                        \"value\": \"Australia/Yancowinna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/Acre\",\n-                                        \"value\": \"Brazil/Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/DeNoronha\",\n-                                        \"value\": \"Brazil/DeNoronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/East\",\n-                                        \"value\": \"Brazil/East\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/West\",\n-                                        \"value\": \"Brazil/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CET\",\n-                                        \"value\": \"CET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CST6CDT\",\n-                                        \"value\": \"CST6CDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Atlantic\",\n-                                        \"value\": \"Canada/Atlantic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Central\",\n-                                        \"value\": \"Canada/Central\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Eastern\",\n-                                        \"value\": \"Canada/Eastern\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Mountain\",\n-                                        \"value\": \"Canada/Mountain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Newfoundland\",\n-                                        \"value\": \"Canada/Newfoundland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Pacific\",\n-                                        \"value\": \"Canada/Pacific\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Saskatchewan\",\n-                                        \"value\": \"Canada/Saskatchewan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Yukon\",\n-                                        \"value\": \"Canada/Yukon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/Continental\",\n-                                        \"value\": \"Chile/Continental\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/EasterIsland\",\n-                                        \"value\": \"Chile/EasterIsland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Cuba\",\n-                                        \"value\": \"Cuba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EET\",\n-                                        \"value\": \"EET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST5EDT\",\n-                                        \"value\": \"EST5EDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Egypt\",\n-                                        \"value\": \"Egypt\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Eire\",\n-                                        \"value\": \"Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT\",\n-                                        \"value\": \"Etc/GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+0\",\n-                                        \"value\": \"Etc/GMT+0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+1\",\n-                                        \"value\": \"Etc/GMT+1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+10\",\n-                                        \"value\": \"Etc/GMT+10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+11\",\n-                                        \"value\": \"Etc/GMT+11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+12\",\n-                                        \"value\": \"Etc/GMT+12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+2\",\n-                                        \"value\": \"Etc/GMT+2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+3\",\n-                                        \"value\": \"Etc/GMT+3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+4\",\n-                                        \"value\": \"Etc/GMT+4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+5\",\n-                                        \"value\": \"Etc/GMT+5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+6\",\n-                                        \"value\": \"Etc/GMT+6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+7\",\n-                                        \"value\": \"Etc/GMT+7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+8\",\n-                                        \"value\": \"Etc/GMT+8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+9\",\n-                                        \"value\": \"Etc/GMT+9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-0\",\n-                                        \"value\": \"Etc/GMT-0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-1\",\n-                                        \"value\": \"Etc/GMT-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-10\",\n-                                        \"value\": \"Etc/GMT-10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-11\",\n-                                        \"value\": \"Etc/GMT-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-12\",\n-                                        \"value\": \"Etc/GMT-12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-13\",\n-                                        \"value\": \"Etc/GMT-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-14\",\n-                                        \"value\": \"Etc/GMT-14\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-2\",\n-                                        \"value\": \"Etc/GMT-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-3\",\n-                                        \"value\": \"Etc/GMT-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-4\",\n-                                        \"value\": \"Etc/GMT-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-5\",\n-                                        \"value\": \"Etc/GMT-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-6\",\n-                                        \"value\": \"Etc/GMT-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-7\",\n-                                        \"value\": \"Etc/GMT-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-8\",\n-                                        \"value\": \"Etc/GMT-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-9\",\n-                                        \"value\": \"Etc/GMT-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT0\",\n-                                        \"value\": \"Etc/GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Greenwich\",\n-                                        \"value\": \"Etc/Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UCT\",\n-                                        \"value\": \"Etc/UCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UTC\",\n-                                        \"value\": \"Etc/UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Universal\",\n-                                        \"value\": \"Etc/Universal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Zulu\",\n-                                        \"value\": \"Etc/Zulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Amsterdam\",\n-                                        \"value\": \"Europe/Amsterdam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Andorra\",\n-                                        \"value\": \"Europe/Andorra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Astrakhan\",\n-                                        \"value\": \"Europe/Astrakhan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Athens\",\n-                                        \"value\": \"Europe/Athens\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belfast\",\n-                                        \"value\": \"Europe/Belfast\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belgrade\",\n-                                        \"value\": \"Europe/Belgrade\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Berlin\",\n-                                        \"value\": \"Europe/Berlin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bratislava\",\n-                                        \"value\": \"Europe/Bratislava\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Brussels\",\n-                                        \"value\": \"Europe/Brussels\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bucharest\",\n-                                        \"value\": \"Europe/Bucharest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Budapest\",\n-                                        \"value\": \"Europe/Budapest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Busingen\",\n-                                        \"value\": \"Europe/Busingen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Chisinau\",\n-                                        \"value\": \"Europe/Chisinau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Copenhagen\",\n-                                        \"value\": \"Europe/Copenhagen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Dublin\",\n-                                        \"value\": \"Europe/Dublin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Gibraltar\",\n-                                        \"value\": \"Europe/Gibraltar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Guernsey\",\n-                                        \"value\": \"Europe/Guernsey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Helsinki\",\n-                                        \"value\": \"Europe/Helsinki\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Isle_of_Man\",\n-                                        \"value\": \"Europe/Isle_of_Man\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Istanbul\",\n-                                        \"value\": \"Europe/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Jersey\",\n-                                        \"value\": \"Europe/Jersey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kaliningrad\",\n-                                        \"value\": \"Europe/Kaliningrad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kiev\",\n-                                        \"value\": \"Europe/Kiev\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kirov\",\n-                                        \"value\": \"Europe/Kirov\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kyiv\",\n-                                        \"value\": \"Europe/Kyiv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Lisbon\",\n-                                        \"value\": \"Europe/Lisbon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ljubljana\",\n-                                        \"value\": \"Europe/Ljubljana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/London\",\n-                                        \"value\": \"Europe/London\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Luxembourg\",\n-                                        \"value\": \"Europe/Luxembourg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Madrid\",\n-                                        \"value\": \"Europe/Madrid\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Malta\",\n-                                        \"value\": \"Europe/Malta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Mariehamn\",\n-                                        \"value\": \"Europe/Mariehamn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Minsk\",\n-                                        \"value\": \"Europe/Minsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Monaco\",\n-                                        \"value\": \"Europe/Monaco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Moscow\",\n-                                        \"value\": \"Europe/Moscow\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Nicosia\",\n-                                        \"value\": \"Europe/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Oslo\",\n-                                        \"value\": \"Europe/Oslo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Paris\",\n-                                        \"value\": \"Europe/Paris\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Podgorica\",\n-                                        \"value\": \"Europe/Podgorica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Prague\",\n-                                        \"value\": \"Europe/Prague\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Riga\",\n-                                        \"value\": \"Europe/Riga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Rome\",\n-                                        \"value\": \"Europe/Rome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Samara\",\n-                                        \"value\": \"Europe/Samara\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/San_Marino\",\n-                                        \"value\": \"Europe/San_Marino\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sarajevo\",\n-                                        \"value\": \"Europe/Sarajevo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Saratov\",\n-                                        \"value\": \"Europe/Saratov\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Simferopol\",\n-                                        \"value\": \"Europe/Simferopol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Skopje\",\n-                                        \"value\": \"Europe/Skopje\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sofia\",\n-                                        \"value\": \"Europe/Sofia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Stockholm\",\n-                                        \"value\": \"Europe/Stockholm\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tallinn\",\n-                                        \"value\": \"Europe/Tallinn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tirane\",\n-                                        \"value\": \"Europe/Tirane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tiraspol\",\n-                                        \"value\": \"Europe/Tiraspol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ulyanovsk\",\n-                                        \"value\": \"Europe/Ulyanovsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Uzhgorod\",\n-                                        \"value\": \"Europe/Uzhgorod\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vaduz\",\n-                                        \"value\": \"Europe/Vaduz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vatican\",\n-                                        \"value\": \"Europe/Vatican\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vienna\",\n-                                        \"value\": \"Europe/Vienna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vilnius\",\n-                                        \"value\": \"Europe/Vilnius\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Volgograd\",\n-                                        \"value\": \"Europe/Volgograd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Warsaw\",\n-                                        \"value\": \"Europe/Warsaw\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zagreb\",\n-                                        \"value\": \"Europe/Zagreb\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zaporozhye\",\n-                                        \"value\": \"Europe/Zaporozhye\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zurich\",\n-                                        \"value\": \"Europe/Zurich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB\",\n-                                        \"value\": \"GB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB-Eire\",\n-                                        \"value\": \"GB-Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT\",\n-                                        \"value\": \"GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT0\",\n-                                        \"value\": \"GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Greenwich\",\n-                                        \"value\": \"Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Hongkong\",\n-                                        \"value\": \"Hongkong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iceland\",\n-                                        \"value\": \"Iceland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Antananarivo\",\n-                                        \"value\": \"Indian/Antananarivo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Chagos\",\n-                                        \"value\": \"Indian/Chagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Christmas\",\n-                                        \"value\": \"Indian/Christmas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Cocos\",\n-                                        \"value\": \"Indian/Cocos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Comoro\",\n-                                        \"value\": \"Indian/Comoro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Kerguelen\",\n-                                        \"value\": \"Indian/Kerguelen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mahe\",\n-                                        \"value\": \"Indian/Mahe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Maldives\",\n-                                        \"value\": \"Indian/Maldives\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mauritius\",\n-                                        \"value\": \"Indian/Mauritius\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mayotte\",\n-                                        \"value\": \"Indian/Mayotte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Reunion\",\n-                                        \"value\": \"Indian/Reunion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iran\",\n-                                        \"value\": \"Iran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Israel\",\n-                                        \"value\": \"Israel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Jamaica\",\n-                                        \"value\": \"Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Japan\",\n-                                        \"value\": \"Japan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Kwajalein\",\n-                                        \"value\": \"Kwajalein\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Libya\",\n-                                        \"value\": \"Libya\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MET\",\n-                                        \"value\": \"MET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST7MDT\",\n-                                        \"value\": \"MST7MDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaNorte\",\n-                                        \"value\": \"Mexico/BajaNorte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaSur\",\n-                                        \"value\": \"Mexico/BajaSur\"\n-                                    },\n+                            \"user-password\": {\n+                                \"description\": \"The user password to authenticate NiFi as a Couchbase client. This configuration can be used against Couchbase Server 5.0 or later supporting Roll-Based Access Control.\",\n+                                \"displayName\": \"User Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"connection\",\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"nosql\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterService\",\n+                        \"typeDescription\": \"Provides a centralized Couchbase connection and bucket passwords management. Bucket passwords can be specified via dynamic properties.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"lookup-sub-doc-path\": {\n+                                \"description\": \"The Sub-Document lookup path within the target JSON document.\",\n+                                \"displayName\": \"Lookup Sub-Document Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"lookup-sub-doc-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"couchbase\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseKeyValueLookupService\",\n+                        \"typeDescription\": \"Lookup a string value from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"couchbase\",\n+                            \"distributed\",\n+                            \"map\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseMapCacheClient\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a Couchbase Server cluster as a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster. Couchbase Server cluster can provide a high available and persistent cache storage.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"document-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Mexico/General\",\n-                                        \"value\": \"Mexico/General\"\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ\",\n-                                        \"value\": \"NZ\"\n-                                    },\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"document-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing fetched document from Couchbase Server.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"couchbase\",\n+                            \"enrich\",\n+                            \"lookup\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.couchbase.CouchbaseRecordLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Couchbase Server associated with the specified key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"document-id\": {\n+                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n+                                \"displayName\": \"Document Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"document-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"document-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ-CHAT\",\n-                                        \"value\": \"NZ-CHAT\"\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Navajo\",\n-                                        \"value\": \"Navajo\"\n-                                    },\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"document-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-to-attribute\": {\n+                                \"description\": \"If set, the retrieved value will be put into an attribute of the FlowFile instead of a the content of the FlowFile. The attribute key to put to is determined by evaluating value of this property.\",\n+                                \"displayName\": \"Put Value to Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-to-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server but can be retried are routed to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Values retrieved from Couchbase Server are written as outgoing FlowFiles content or put into an attribute of the incoming FlowFile and routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles failed to fetch from Couchbase Server and not retry-able are routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input FlowFile is routed to this relationship when the value is retrieved from Couchbase Server and routed to 'success'.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"get\",\n+                            \"nosql\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.couchbase.GetCouchbaseKey\",\n+                        \"typeDescription\": \"Get a document from Couchbase Server via Key/Value access. The ID of the document to fetch may be supplied by setting the <Document Id> property. NOTE: if the Document Id property is not set, the contents of the FlowFile will be read to determine the Document Id, which means that the contents of the entire FlowFile will be buffered in memory.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Cluster where the document was retrieved from.\",\n+                                \"name\": \"couchbase.cluster\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket where the document was retrieved from.\",\n+                                \"name\": \"couchbase.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Id of the document.\",\n+                                \"name\": \"couchbase.doc.id\"\n+                            },\n+                            {\n+                                \"description\": \"CAS of the document.\",\n+                                \"name\": \"couchbase.doc.cas\"\n+                            },\n+                            {\n+                                \"description\": \"Expiration of the document.\",\n+                                \"name\": \"couchbase.doc.expiry\"\n+                            },\n+                            {\n+                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n+                                \"name\": \"couchbase.exception\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-couchbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"bucket-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The name of bucket to access.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bucket-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cluster-controller-service\": {\n+                                \"description\": \"A Couchbase Cluster Controller Service which manages connections to a Couchbase cluster.\",\n+                                \"displayName\": \"Couchbase Cluster Controller Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cluster-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-couchbase-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.couchbase.CouchbaseClusterControllerService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"document-id\": {\n+                                \"description\": \"A static, fixed Couchbase document id, or an expression to construct the Couchbase document id.\",\n+                                \"displayName\": \"Document Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"document-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"document-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PRC\",\n-                                        \"value\": \"PRC\"\n+                                        \"displayName\": \"Json\",\n+                                        \"value\": \"Json\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PST8PDT\",\n-                                        \"value\": \"PST8PDT\"\n-                                    },\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Json\",\n+                                \"description\": \"The type of contents.\",\n+                                \"displayName\": \"Document Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"document-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"persist-to\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Apia\",\n-                                        \"value\": \"Pacific/Apia\"\n+                                        \"displayName\": \"MASTER\",\n+                                        \"value\": \"MASTER\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Auckland\",\n-                                        \"value\": \"Pacific/Auckland\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Bougainville\",\n-                                        \"value\": \"Pacific/Bougainville\"\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chatham\",\n-                                        \"value\": \"Pacific/Chatham\"\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chuuk\",\n-                                        \"value\": \"Pacific/Chuuk\"\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Easter\",\n-                                        \"value\": \"Pacific/Easter\"\n-                                    },\n+                                        \"displayName\": \"FOUR\",\n+                                        \"value\": \"FOUR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Durability constraint about disk persistence.\",\n+                                \"displayName\": \"Persist To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"persist-to\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"replicate-to\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Efate\",\n-                                        \"value\": \"Pacific/Efate\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Enderbury\",\n-                                        \"value\": \"Pacific/Enderbury\"\n+                                        \"displayName\": \"ONE\",\n+                                        \"value\": \"ONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fakaofo\",\n-                                        \"value\": \"Pacific/Fakaofo\"\n+                                        \"displayName\": \"TWO\",\n+                                        \"value\": \"TWO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fiji\",\n-                                        \"value\": \"Pacific/Fiji\"\n-                                    },\n+                                        \"displayName\": \"THREE\",\n+                                        \"value\": \"THREE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Durability constraint about replication.\",\n+                                \"displayName\": \"Replicate To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"replicate-to\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Used as a document id if 'Document Id' is not specified\",\n+                                \"name\": \"uuid\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles failed to be written to Couchbase Server but can be retried are routed to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are written to Couchbase Server are routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles failed to be written to Couchbase Server and not retry-able are routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"couchbase\",\n+                            \"database\",\n+                            \"nosql\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.couchbase.PutCouchbaseKey\",\n+                        \"typeDescription\": \"Put a document to Couchbase Server via Key/Value access.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Cluster where the document was stored.\",\n+                                \"name\": \"couchbase.cluster\"\n+                            },\n+                            {\n+                                \"description\": \"Bucket where the document was stored.\",\n+                                \"name\": \"couchbase.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"Id of the document.\",\n+                                \"name\": \"couchbase.doc.id\"\n+                            },\n+                            {\n+                                \"description\": \"CAS of the document.\",\n+                                \"name\": \"couchbase.doc.cas\"\n+                            },\n+                            {\n+                                \"description\": \"Expiration of the document.\",\n+                                \"name\": \"couchbase.doc.expiry\"\n+                            },\n+                            {\n+                                \"description\": \"If Couchbase related error occurs the CouchbaseException class name will be captured here.\",\n+                                \"name\": \"couchbase.exception\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n+                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-grpc-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Always Output Response\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Funafuti\",\n-                                        \"value\": \"Pacific/Funafuti\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Galapagos\",\n-                                        \"value\": \"Pacific/Galapagos\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Will force a response FlowFile to be generated and routed to the 'Response' relationship regardless of what the server status code received is or if the processor is configured to put the server response body in the request attribute. In the later configuration a request FlowFile with the response body in the attribute and a typical response FlowFile will be emitted to their respective relationships.\",\n+                                \"displayName\": \"Always Output Response\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Always Output Response\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Message Size\": {\n+                                \"defaultValue\": \"4MB\",\n+                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n+                                \"displayName\": \"Max Message Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Message Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Penalize on \\\"No Retry\\\"\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Gambier\",\n-                                        \"value\": \"Pacific/Gambier\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guadalcanal\",\n-                                        \"value\": \"Pacific/Guadalcanal\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this property will penalize FlowFiles that are routed to the \\\"No Retry\\\" relationship.\",\n+                                \"displayName\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote gRPC service hostname\": {\n+                                \"description\": \"Remote host which will be connected to\",\n+                                \"displayName\": \"Remote gRPC service hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote gRPC service hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote gRPC service port\": {\n+                                \"description\": \"Remote port which will be connected to\",\n+                                \"displayName\": \"Remote gRPC service port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote gRPC service port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guam\",\n-                                        \"value\": \"Pacific/Guam\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use SSL/TLS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS (https) connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Send FlowFile Content\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Honolulu\",\n-                                        \"value\": \"Pacific/Honolulu\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Johnston\",\n-                                        \"value\": \"Pacific/Johnston\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to include the FlowFile content in the FlowFileRequest to the gRPC service.\",\n+                                \"displayName\": \"Send FlowFile Content\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Send FlowFile Content\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use SSL/TLS\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kanton\",\n-                                        \"value\": \"Pacific/Kanton\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kiritimati\",\n-                                        \"value\": \"Pacific/Kiritimati\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use TLS to send the contents of the gRPC messages.\",\n+                                \"displayName\": \"Use TLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use SSL/TLS\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original FlowFile will be routed upon success. It will have new attributes detailing the success of the request.\",\n+                                \"name\": \"Original\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed on any type of connection failure, timeout or general exception. It will have new attributes detailing the request.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed on any status code that can be retried. It will have new attributes detailing the request.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed on any status code that should NOT be retried.  It will have new attributes detailing the request.\",\n+                                \"name\": \"No Retry\"\n+                            },\n+                            {\n+                                \"description\": \"A Response FlowFile will be routed upon success. If the 'Output Response Regardless' property is true then the response will be sent to this relationship regardless of the status code received.\",\n+                                \"name\": \"Response\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"client\",\n+                            \"grpc\",\n+                            \"rpc\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.grpc.InvokeGRPC\",\n+                        \"typeDescription\": \"Sends FlowFiles, optionally with content, to a configurable remote gRPC service endpoint. The remote gRPC service must abide by the service IDL defined in NiFi.  gRPC isn't intended to carry large payloads,  so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The response code that is returned (0 = ERROR, 1 = SUCCESS, 2 = RETRY)\",\n+                                \"name\": \"invokegrpc.response.code\"\n+                            },\n+                            {\n+                                \"description\": \"The response message that is returned\",\n+                                \"name\": \"invokegrpc.response.body\"\n+                            },\n+                            {\n+                                \"description\": \"The remote gRPC service hostname\",\n+                                \"name\": \"invokegrpc.service.host\"\n+                            },\n+                            {\n+                                \"description\": \"The remote gRPC service port\",\n+                                \"name\": \"invokegrpc.service.port\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"invokegrpc.java.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"invokegrpc.java.exception.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-grpc-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Authorized DN Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kosrae\",\n-                                        \"value\": \"Pacific/Kosrae\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use TLS\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression to apply against the Distinguished Name of incoming connections. If the Pattern does not match the DN, the connection will be refused. The property will only be used if client certificate authentication (Mutual TLS) has been configured on SSL Context Service, otherwise it will be ignored.\",\n+                                \"displayName\": \"Authorized DN Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authorized DN Pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Flow Control Window\": {\n+                                \"defaultValue\": \"1MB\",\n+                                \"description\": \"The initial HTTP/2 flow control window for both new streams and overall connection. Flow-control schemes ensure that streams on the same connection do not destructively interfere with each other. The default is 1MB.\",\n+                                \"displayName\": \"Flow Control Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Flow Control Window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Local gRPC service port\": {\n+                                \"description\": \"The local port that the gRPC service will listen on.\",\n+                                \"displayName\": \"Local gRPC Service Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Local gRPC service port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Message Size\": {\n+                                \"defaultValue\": \"4MB\",\n+                                \"description\": \"The maximum size of FlowFiles that this processor will allow to be received. The default is 4MB. If FlowFiles exceed this size, you should consider using another transport mechanism as gRPC isn't designed for heavy payloads.\",\n+                                \"displayName\": \"Maximum Message Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Message Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kwajalein\",\n-                                        \"value\": \"Pacific/Kwajalein\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use TLS\",\n+                                        \"propertyName\": \"Use TLS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide server certificate information for TLS (https) connections. Keystore must be configured on the service. If truststore is also configured, it will turn on and require client certificate authentication (Mutual TLS).\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Use TLS\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Majuro\",\n-                                        \"value\": \"Pacific/Majuro\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Marquesas\",\n-                                        \"value\": \"Pacific/Marquesas\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use TLS to receive the contents of the gRPC messages.\",\n+                                \"displayName\": \"Use TLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use TLS\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile was received successfully.\",\n+                                \"name\": \"Success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"grpc\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rpc\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.grpc.ListenGRPC\",\n+                        \"typeDescription\": \"Starts a gRPC server and listens on the given port to transform the incoming messages into FlowFiles. The message format is defined by the standard gRPC protobuf IDL provided by NiFi. gRPC isn't intended to carry large payloads, so this processor should be used only when FlowFile sizes are on the order of megabytes. The default maximum message size is 4MB.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The DN of the user who sent the FlowFile to this NiFi\",\n+                                \"name\": \"listengrpc.remote.user.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The IP of the client who sent the FlowFile to this NiFi\",\n+                                \"name\": \"listengrpc.remote.host\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HBase Cache Table Name\": {\n+                                \"description\": \"Name of the table on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Cache Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Cache Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HBase Client Service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HBase Client Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"HBase Column Family\": {\n+                                \"defaultValue\": \"f\",\n+                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Column Family\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Family\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HBase Column Qualifier\": {\n+                                \"defaultValue\": \"q\",\n+                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n+                                \"displayName\": \"HBase Column Qualifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Qualifier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-authorizations\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hbase-cache-visibility-expression\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n+                                \"displayName\": \"Visibility Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hbase-cache-visibility-expression\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.hbase.HBase_2_ClientService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"hbase\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientMapCacheService\",\n+                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_2_ClientService controller to communicate with HBase.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name of an HBase configuration property.\",\n+                                \"value\": \"The value of the given HBase configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HBase Client Retries\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"HBase Client Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Client Retries\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Files\": {\n+                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n+                                \"displayName\": \"Hadoop Configuration Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Files\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Phoenix Client JAR Location\": {\n+                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n+                                \"displayName\": \"Phoenix Client JAR Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Phoenix Client JAR Location\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Client Port\": {\n+                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Client Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Client Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper Quorum\": {\n+                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Quorum\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Quorum\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ZooKeeper ZNode Parent\": {\n+                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper ZNode Parent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper ZNode Parent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"client\",\n+                            \"hbase\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientService\",\n+                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 2.1.1 client. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-authorizations\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-return-cols\": {\n+                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n+                                \"displayName\": \"Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-return-cols\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-table-name\": {\n+                                \"description\": \"The name of the table where look ups will be run.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hbase-client-service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hbase-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"hbase\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_2_RecordLookupService\",\n+                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-smbj-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"domain\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hostname\": {\n+                                \"description\": \"The network host of the SMB file server.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"password\": {\n+                                \"description\": \"The password used for authentication.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"port\": {\n+                                \"defaultValue\": \"445\",\n+                                \"description\": \"Port to use for connection.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"share\": {\n+                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n+                                \"displayName\": \"Share\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smb-dialect\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Midway\",\n-                                        \"value\": \"Pacific/Midway\"\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Nauru\",\n-                                        \"value\": \"Pacific/Nauru\"\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Niue\",\n-                                        \"value\": \"Pacific/Niue\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Norfolk\",\n-                                        \"value\": \"Pacific/Norfolk\"\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Noumea\",\n-                                        \"value\": \"Pacific/Noumea\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pago_Pago\",\n-                                        \"value\": \"Pacific/Pago_Pago\"\n-                                    },\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-dialect\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Palau\",\n-                                        \"value\": \"Pacific/Palau\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pitcairn\",\n-                                        \"value\": \"Pacific/Pitcairn\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"username\": {\n+                                \"defaultValue\": \"Guest\",\n+                                \"description\": \"The username used for authentication.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-smb-client-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"samba, smb, cifs, files\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n+                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-parquet-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"avro-read-compatibility\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pohnpei\",\n-                                        \"value\": \"Pacific/Pohnpei\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Ponape\",\n-                                        \"value\": \"Pacific/Ponape\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.compatible' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Read Compatibility\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-read-compatibility\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"parquet\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parquet.ParquetReader\",\n+                        \"typeDescription\": \"Parses Parquet data and returns each Parquet record as a separate Record object. The schema will come from the Parquet data itself.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Schema Write Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Port_Moresby\",\n-                                        \"value\": \"Pacific/Port_Moresby\"\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Rarotonga\",\n-                                        \"value\": \"Pacific/Rarotonga\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Saipan\",\n-                                        \"value\": \"Pacific/Saipan\"\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Samoa\",\n-                                        \"value\": \"Pacific/Samoa\"\n+                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Schema Reference Attributes\",\n+                                        \"value\": \"hwx-schema-ref-attributes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tahiti\",\n-                                        \"value\": \"Pacific/Tahiti\"\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n+                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n+                                        \"value\": \"hwx-content-encoded-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tarawa\",\n-                                        \"value\": \"Pacific/Tarawa\"\n-                                    },\n+                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n+                                        \"displayName\": \"Confluent Schema Registry Reference\",\n+                                        \"value\": \"confluent-encoded\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no-schema\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Write Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"avro-add-list-element-records\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tongatapu\",\n-                                        \"value\": \"Pacific/Tongatapu\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Truk\",\n-                                        \"value\": \"Pacific/Truk\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-add-list-element-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"avro-write-old-list-structure\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wake\",\n-                                        \"value\": \"Pacific/Wake\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wallis\",\n-                                        \"value\": \"Pacific/Wallis\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-write-old-list-structure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Yap\",\n-                                        \"value\": \"Pacific/Yap\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Poland\",\n-                                        \"value\": \"Poland\"\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Portugal\",\n-                                        \"value\": \"Portugal\"\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ROK\",\n-                                        \"value\": \"ROK\"\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Singapore\",\n-                                        \"value\": \"Singapore\"\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4\",\n-                                        \"value\": \"SystemV/AST4\"\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4ADT\",\n-                                        \"value\": \"SystemV/AST4ADT\"\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6\",\n-                                        \"value\": \"SystemV/CST6\"\n-                                    },\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dictionary-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dictionary-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6CDT\",\n-                                        \"value\": \"SystemV/CST6CDT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5\",\n-                                        \"value\": \"SystemV/EST5\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-dictionary-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-validation\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5EDT\",\n-                                        \"value\": \"SystemV/EST5EDT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/HST10\",\n-                                        \"value\": \"SystemV/HST10\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-validation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"int96-fields\": {\n+                                \"description\": \"List of fields with full path that should be treated as INT96 timestamps.\",\n+                                \"displayName\": \"INT96 Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"int96-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"max-padding-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7\",\n-                                        \"value\": \"SystemV/MST7\"\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7MDT\",\n-                                        \"value\": \"SystemV/MST7MDT\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8\",\n-                                        \"value\": \"SystemV/PST8\"\n-                                    },\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8PDT\",\n-                                        \"value\": \"SystemV/PST8PDT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9\",\n-                                        \"value\": \"SystemV/YST9\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-protocol-version\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9YDT\",\n-                                        \"value\": \"SystemV/YST9YDT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n+                                \"displayName\": \"Schema Protocol Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-protocol-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Turkey\",\n-                                        \"value\": \"Turkey\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UCT\",\n-                                        \"value\": \"UCT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Alaska\",\n-                                        \"value\": \"US/Alaska\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"writer-version\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Aleutian\",\n-                                        \"value\": \"US/Aleutian\"\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Arizona\",\n-                                        \"value\": \"US/Arizona\"\n-                                    },\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writer-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"parquet\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parquet.ParquetRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Parquet format.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"compression-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Central\",\n-                                        \"value\": \"US/Central\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/East-Indiana\",\n-                                        \"value\": \"US/East-Indiana\"\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Eastern\",\n-                                        \"value\": \"US/Eastern\"\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Hawaii\",\n-                                        \"value\": \"US/Hawaii\"\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Indiana-Starke\",\n-                                        \"value\": \"US/Indiana-Starke\"\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Michigan\",\n-                                        \"value\": \"US/Michigan\"\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Mountain\",\n-                                        \"value\": \"US/Mountain\"\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Pacific\",\n-                                        \"value\": \"US/Pacific\"\n-                                    },\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dictionary-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dictionary-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Samoa\",\n-                                        \"value\": \"US/Samoa\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-dictionary-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-validation\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Universal\",\n-                                        \"value\": \"Universal\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"W-SU\",\n-                                        \"value\": \"W-SU\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-validation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"max-padding-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"writer-version\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WET\",\n-                                        \"value\": \"WET\"\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Zulu\",\n-                                        \"value\": \"Zulu\"\n-                                    },\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writer-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Parquet file that was converted successfully from Avro\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Avro content that could not be processed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"convert\",\n+                            \"parquet\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.parquet.ConvertAvroToParquet\",\n+                        \"typeDescription\": \"Converts Avro records into Parquet file format. The incoming FlowFile should be a valid avro file. If an incoming FlowFile does not contain any records, an empty parquet file is the output. NOTE: Many Avro datatypes (collections, primitives, and unions of primitives, e.g.) can be converted to parquet, but unions of collections and other complex datatypes may not be able to be converted to Parquet.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the filename to the existing filename with the extension replaced by / added to by .parquet\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the number of records in the parquet file.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"filename\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The name of the file to retrieve\",\n+                                \"displayName\": \"Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filename\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The service for writing records to the FlowFile content\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.parquet.PutParquet\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved, but might be able to be in the future if tried again. This generally indicates that the Fetch should be tried again.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the file\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"parquet\",\n+                            \"record\",\n+                            \"source\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.parquet.FetchParquet\",\n+                        \"typeDescription\": \"Reads from a given Parquet file and writes records to the content of the flow file using the selected record writer. The original Parquet file will remain unchanged, and the content of the flow file will be replaced with records of the selected type. This processor can be used with ListHDFS or ListFile to obtain a listing of files to fetch.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from the given filesystem.\",\n+                                \"name\": \"fetch.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to write any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The parent directory to which files should be written. Will be created if it doesn't exist.\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"avro-add-list-element-records\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EST\",\n-                                        \"value\": \"EST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HST\",\n-                                        \"value\": \"HST\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-add-list-element-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"avro-write-old-list-structure\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MST\",\n-                                        \"value\": \"MST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ACT\",\n-                                        \"value\": \"ACT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n+                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-write-old-list-structure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AET\",\n-                                        \"value\": \"AET\"\n+                                        \"displayName\": \"UNCOMPRESSED\",\n+                                        \"value\": \"UNCOMPRESSED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AGT\",\n-                                        \"value\": \"AGT\"\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ART\",\n-                                        \"value\": \"ART\"\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AST\",\n-                                        \"value\": \"AST\"\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BET\",\n-                                        \"value\": \"BET\"\n+                                        \"displayName\": \"BROTLI\",\n+                                        \"value\": \"BROTLI\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BST\",\n-                                        \"value\": \"BST\"\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAT\",\n-                                        \"value\": \"CAT\"\n+                                        \"displayName\": \"ZSTD\",\n+                                        \"value\": \"ZSTD\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CNT\",\n-                                        \"value\": \"CNT\"\n-                                    },\n+                                        \"displayName\": \"LZ4_RAW\",\n+                                        \"value\": \"LZ4_RAW\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNCOMPRESSED\",\n+                                \"description\": \"The type of compression for the file being written.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dictionary-page-size\": {\n+                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Dictionary Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dictionary-page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dictionary-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CST\",\n-                                        \"value\": \"CST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CTT\",\n-                                        \"value\": \"CTT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Dictionary Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-dictionary-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-validation\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EAT\",\n-                                        \"value\": \"EAT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ECT\",\n-                                        \"value\": \"ECT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n+                                \"displayName\": \"Enable Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-validation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max-padding-size\": {\n+                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Max Padding Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"max-padding-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"overwrite\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IET\",\n-                                        \"value\": \"IET\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IST\",\n-                                        \"value\": \"IST\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to overwrite existing files in the same directory with the same name. When set to false, flow files will be routed to failure when a file exists in the same directory with the same name.\",\n+                                \"displayName\": \"Overwrite Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"overwrite\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"page-size\": {\n+                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Page Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"page-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"permissions-umask\": {\n+                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop Configuration dfs.umaskmode\",\n+                                \"displayName\": \"Permissions umask\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"permissions-umask\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading records from incoming flow files.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"remote-group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remote-group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"remote-owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remote-owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"remove-crc-files\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JST\",\n-                                        \"value\": \"JST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MIT\",\n-                                        \"value\": \"MIT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the corresponding CRC file should be deleted upon successfully writing a Parquet file\",\n+                                \"displayName\": \"Remove CRC Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remove-crc-files\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"row-group-size\": {\n+                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n+                                \"displayName\": \"Row Group Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"row-group-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"writer-version\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NET\",\n-                                        \"value\": \"NET\"\n+                                        \"displayName\": \"PARQUET_1_0\",\n+                                        \"value\": \"PARQUET_1_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NST\",\n-                                        \"value\": \"NST\"\n-                                    },\n+                                        \"displayName\": \"PARQUET_2_0\",\n+                                        \"value\": \"PARQUET_2_0\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version used by Parquet writer\",\n+                                \"displayName\": \"Writer Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writer-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file to write comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Flow Files that could not be processed due to issues that can be retried are transferred to this relationship\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Flow Files that have been successfully processed are transferred to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Flow Files that could not be processed due to issue that cannot be retried are transferred to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"parquet\",\n+                            \"put\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.parquet.PutParquet\",\n+                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to a Parquet file. The schema for the Parquet file must be provided in the processor properties. This processor will first write a temporary dot file and upon successfully writing every record to the dot file, it will rename the dot file to it's final name. If the dot file cannot be renamed, the rename operation will be attempted up to 10 times, and if still not successful, the dot file will be deleted and the flow file will be routed to failure.  If any error occurs while reading records from the input, or writing records to the output, the entire dot file will be removed and the flow file will be routed to failure or retry, depending on the error.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file is stored in this attribute.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The absolute path to the file is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records written to the Parquet file\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-html-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-html-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Append Element Value\": {\n+                                \"description\": \"Appends the specified value to the resulting Element\",\n+                                \"displayName\": \"Append Element Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Append Element Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Attribute Name\": {\n+                                \"description\": \"When getting the value of a HTML element attribute this value is used as the key to determine which attribute on the selected element should be retrieved. This value is used when the \\\"Output Type\\\" is set to \\\"Attribute\\\". If this value is prefixed with 'abs:', then the extracted attribute value will be converted into an absolute URL form using the specified base URL.\",\n+                                \"displayName\": \"Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Attribute Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLT\",\n-                                        \"value\": \"PLT\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PNT\",\n-                                        \"value\": \"PNT\"\n-                                    },\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if element extracted is written as a flowfile attribute or as flowfile content.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HTML Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTML Character Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Type\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PRT\",\n-                                        \"value\": \"PRT\"\n+                                        \"displayName\": \"HTML\",\n+                                        \"value\": \"HTML\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PST\",\n-                                        \"value\": \"PST\"\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SST\",\n-                                        \"value\": \"SST\"\n+                                        \"displayName\": \"Attribute\",\n+                                        \"value\": \"Attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"VST\",\n-                                        \"value\": \"VST\"\n+                                        \"displayName\": \"Data\",\n+                                        \"value\": \"Data\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTC\",\n-                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n-                                \"displayName\": \"Time Zone\",\n+                                \"defaultValue\": \"HTML\",\n+                                \"description\": \"Controls the type of DOM value that is retrieved from the HTML element.\",\n+                                \"displayName\": \"Output Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Zone\",\n+                                \"name\": \"Output Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"The token to pass to Splunk.\",\n-                                \"displayName\": \"Token\",\n+                            \"Prepend Element Value\": {\n+                                \"description\": \"Prepends the specified value to the resulting Element\",\n+                                \"displayName\": \"Prepend Element Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Prepend Element Value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"URL\": {\n+                                \"description\": \"Base URL for the HTML page being parsed. This URL will be used to resolve an absolute URL when an attribute value is extracted from a HTML element.\",\n+                                \"displayName\": \"URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.ModifyHTMLElement\",\n+                            \"org.apache.nifi.PutHTMLElement\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n+                            },\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n                             \"get\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"html\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n-                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"type\": \"org.apache.nifi.GetHTMLElement\",\n+                        \"typeDescription\": \"Extracts HTML element values from the incoming flowfile's content using a CSS selector. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string. The result of \\\"querying\\\" the HTML DOM may produce 0-N results. If no results are found the flowfile will be transferred to the \\\"element not found\\\" relationship to indicate so to the end user. If N results are found a new flowfile will be created and emitted for each result. The query result will either be placed in the content of the new flowfile or as an attribute of the new flowfile. By default the result is written to an attribute. This can be controlled by the \\\"Destination\\\" property. Resulting query values may also have data prepended or appended to them by setting the value of property \\\"Prepend Element Value\\\" or \\\"Append Element Value\\\". Prepended and appended values are treated as string values and concatenated to the result retrieved from the HTML DOM query operation. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The query that performed to produce the FlowFile.\",\n-                                \"name\": \"splunk.query\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n-                                \"name\": \"splunk.earliest.time\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the latest time that was used when performing the query.\",\n-                                \"name\": \"splunk.latest.time\"\n+                                \"description\": \"Flowfile attribute where the element result parsed from the HTML using the CSS selector syntax are placed if the destination is a flowfile attribute.\",\n+                                \"name\": \"HTMLElement\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-html-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41683,164 +35768,425 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n+                            \"Attribute Name\": {\n+                                \"description\": \"When modifying the value of an element attribute this value is used as the key to determine which attribute on the selected element will be modified with the new value.\",\n+                                \"displayName\": \"Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Attribute Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HTML Character Encoding\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTML Character Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the destination.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Modified Value\": {\n+                                \"description\": \"Value to update the found HTML elements with\",\n+                                \"displayName\": \"Modified Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Modified Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Output Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTML\",\n+                                        \"value\": \"HTML\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Attribute\",\n+                                        \"value\": \"Attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTML\",\n+                                \"description\": \"Controls whether the HTML element is output as HTML,Text or Data\",\n+                                \"displayName\": \"Output Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.GetHTMLElement\",\n+                            \"org.apache.nifi.PutHTMLElement\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n+                            \"html\",\n+                            \"modify\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.ModifyHTMLElement\",\n+                        \"typeDescription\": \"Modifies the value of an existing HTML element. The desired element to be modified is located by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the element the user desires to modify. If the HTML element is found the element's value is updated in the DOM using the value specified \\\"Modified Value\\\" property. All DOM elements that match the CSS selector will be updated. Once all of the DOM elements have been updated the DOM is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Total number of HTML element modifications made\",\n+                                \"name\": \"NumElementsModified\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-html-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"CSS Selector\": {\n+                                \"description\": \"CSS selector syntax string used to extract the desired HTML element(s).\",\n+                                \"displayName\": \"CSS Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CSS Selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Element Insert Location Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"append-html\",\n+                                        \"value\": \"append-html\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"prepend-html\",\n+                                        \"value\": \"prepend-html\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"append-html\",\n+                                \"description\": \"Controls whether the new element is prepended or appended to the children of the Element located by the CSS selector. EX: prepended value '<b>Hi</b>' inside of Element (using CSS Selector 'p') '<p>There</p>' would result in '<p><b>Hi</b>There</p>'. Appending the value would result in '<p>There<b>Hi</b></p>'\",\n+                                \"displayName\": \"Element Insert Location Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"Element Insert Location Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"HTML Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding of the input HTML\",\n+                                \"displayName\": \"HTML Character Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTML Character Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Value\": {\n+                                \"description\": \"Value used when creating the new Element. Value should be a valid HTML element. The text should be supplied unencoded: characters like '<', '>', etc will be properly HTML encoded in the resulting output.\",\n+                                \"displayName\": \"Put Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": false,\n+                                \"name\": \"Put Value\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.GetHTMLElement\",\n+                            \"org.apache.nifi.ModifyHTMLElement\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Element could not be found in the HTML document. The original HTML input will remain in the FlowFile content unchanged. Relationship 'original' will not be invoked in this scenario.\",\n+                                \"name\": \"element not found\"\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port on the destination.\",\n-                                \"displayName\": \"Port\",\n+                            {\n+                                \"description\": \"Successfully parsed HTML element\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original HTML input\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The input HTML syntax is invalid\",\n+                                \"name\": \"invalid html\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"css\",\n+                            \"dom\",\n+                            \"element\",\n+                            \"html\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.PutHTMLElement\",\n+                        \"typeDescription\": \"Places a new HTML element in the existing HTML DOM. The desired position for the new HTML element is specified by using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML DOM location may be located in a similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \\\"queried\\\" using the user defined CSS selector string to find the position where the user desires to add the new HTML element. Once the new HTML element is added to the DOM it is rendered to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at \\\"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\\\"\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-groovyx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-groovyx-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"groovyx-additional-classpath\": {\n+                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n+                                \"displayName\": \"Additional classpath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"groovyx-additional-classpath\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"groovyx-failure-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"rollback\",\n+                                        \"value\": \"rollback\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"transfer to failure\",\n+                                        \"value\": \"transfer to failure\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TCP\",\n-                                \"description\": \"The protocol for communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"rollback\",\n+                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n+                                \"displayName\": \"Failure strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"groovyx-failure-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be sent over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"groovyx-script-body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"groovyx-script-body\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"groovyx-script-file\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"groovyx-script-file\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles that were successfully processed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles that failed to be processed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"splunk\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"groovy\",\n+                            \"groovyx\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n-                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n+                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jetty-bundle\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-salesforce-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41852,748 +36198,939 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"salesforce-api-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n-                                \"allowableValues\": [\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n+                                \"name\": \"objectType\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"put\",\n+                            \"salesforce\",\n+                            \"sobject\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n+                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message returned by Salesforce.\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"age-delay\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n+                                \"displayName\": \"Age Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"age-delay\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n+                            \"age-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n+                                \"displayName\": \"Age Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"age-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-zero-record-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n+                                \"displayName\": \"Create Zero Record FlowFiles\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"create-zero-record-files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-soql-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"dependentValues\": [\n+                                            \"custom-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"Specify the SOQL query to run.\",\n+                                \"displayName\": \"Custom SOQL Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"custom-soql-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-where-condition\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n+                                \"displayName\": \"Custom WHERE Condition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"custom-where-condition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"field-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n+                                \"displayName\": \"Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Token\",\n+                                \"name\": \"field-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"initial-age-filter\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n+                                \"displayName\": \"Initial Age Start Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"initial-age-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"content-type\": {\n-                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n-                                \"displayName\": \"Content Type\",\n+                            \"query-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide query by properties.\",\n+                                        \"displayName\": \"Property Based Query\",\n+                                        \"value\": \"property-based-query\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide custom SOQL query.\",\n+                                        \"displayName\": \"Custom Query\",\n+                                        \"value\": \"custom-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"property-based-query\",\n+                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n+                                \"displayName\": \"Query Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"content-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"query-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Host\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"index\": {\n-                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Index\",\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"index\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"request-channel\",\n+                                \"name\": \"salesforce-api-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source\": {\n-                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source\",\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source-type\": {\n-                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source Type\",\n+                            \"sobject-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Salesforce sObject to be queried\",\n+                                \"displayName\": \"sObject Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"source-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sobject-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n+                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"query\",\n+                            \"salesforce\",\n+                            \"sobject\",\n+                            \"soql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n-                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n+                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n+                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the total number of records in the FlowFile.\",\n+                                \"name\": \"total.record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-windows-event-log-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-windows-event-log-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"channel\": {\n+                                \"defaultValue\": \"System\",\n+                                \"description\": \"The Windows Event Log Channel to listen to.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"inactiveDurationToReconnect\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n+                                \"displayName\": \"Inactive duration to reconnect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"inactiveDurationToReconnect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                            \"maxBuffer\": {\n+                                \"defaultValue\": \"1048576\",\n+                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"name\": \"maxBuffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Token\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-query-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n-                                \"displayName\": \"Maximum Query Size\",\n+                            \"maxQueue\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n+                                \"displayName\": \"Maximum queue size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-query-size\",\n+                                \"name\": \"maxQueue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"query\": {\n+                                \"defaultValue\": \"*\",\n+                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n+                                \"displayName\": \"XPath Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"request-channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ttl\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n-                                \"displayName\": \"Maximum Waiting Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ttl\",\n+                                \"name\": \"query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n-                            },\n-                            {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n+                                \"description\": \"Relationship for successfully consumed events.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n-                                \"name\": \"unacknowledged\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n-                                \"name\": \"undetermined\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"acknowledgement\",\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"event\",\n+                            \"ingest\",\n+                            \"windows\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n-                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n+                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Will set a MIME type value of application/xml.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-aws-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-api-nar\",\n+            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-geohash-nar\",\n+            \"artifact\": \"nifi-mongodb-services-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"geohash-format\": {\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"mongo-uri\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"mongo-uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE32\",\n-                                        \"value\": \"BASE32\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LONG\",\n-                                        \"value\": \"LONG\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BASE32\",\n-                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n-                                \"displayName\": \"Geohash Format\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geohash-format\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-level\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ENCODE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n-                                \"displayName\": \"Geohash Level\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"mongo-collection-name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geohash-level\",\n+                                \"name\": \"mongo-collection-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n-                                \"displayName\": \"Geohash Record Path\",\n+                            \"mongo-db-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"geohash-record-path\",\n+                                \"name\": \"mongo-db-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"latitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n-                                \"displayName\": \"Latitude Record Path\",\n+                            \"mongo-lookup-client-service\": {\n+                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"latitude-record-path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-client-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"mongo-lookup-projection\": {\n+                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n+                                \"displayName\": \"Projection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-projection\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"longitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n-                                \"displayName\": \"Longitude Record Path\",\n+                            \"mongo-lookup-value-field\": {\n+                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                                \"displayName\": \"Lookup Value Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"longitude-record-path\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-value-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mode\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ENCODE\",\n-                                        \"value\": \"ENCODE\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DECODE\",\n-                                        \"value\": \"DECODE\"\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ENCODE\",\n-                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mode\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the record writer service to use for writing data\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"routing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKIP\",\n-                                        \"value\": \"SKIP\"\n-                                    },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SPLIT\",\n-                                        \"value\": \"SPLIT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRE\",\n-                                        \"value\": \"REQUIRE\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SKIP\",\n-                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The original input flowfile will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"geo\",\n-                            \"geohash\",\n+                            \"lookup\",\n+                            \"mongo\",\n+                            \"mongodb\",\n                             \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n-                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n+                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                        \"version\": \"1.22.0\"\n                     }\n                 ],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n             \"artifact\": \"nifi-site-to-site-reporting-nar\",\n@@ -43897,31 +38434,21 @@\n                     }\n                 ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-riemann-nar\",\n+            \"artifact\": \"nifi-spring-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-riemann-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-spring-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -43929,1095 +38456,3477 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These values will be attached to the Riemann event as a custom attribute\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Custom Event Attribute\",\n-                                \"value\": \"Any value or expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Batch size for incoming FlowFiles\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Application Context class path\": {\n+                                \"description\": \"Path to the directory with resources (i.e., JARs, configuration files etc.) required to be on the classpath of the ApplicationContext.\",\n+                                \"displayName\": \"Application Context class path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"name\": \"Application Context class path\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Description\": {\n-                                \"description\": \"Description associated to the event\",\n-                                \"displayName\": \"Description\",\n+                            \"Application Context config path\": {\n+                                \"description\": \"The path to the Spring Application Context configuration file relative to the classpath\",\n+                                \"displayName\": \"Application Context config path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Description\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Context config path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host\": {\n-                                \"defaultValue\": \"${hostname()}\",\n-                                \"description\": \"A hostname associated to this event (e.g. nifi-app1)\",\n-                                \"displayName\": \"Host\",\n+                            \"Receive Timeout\": {\n+                                \"description\": \"Timeout for receiving date from Spring context. Defaults to 0.\",\n+                                \"displayName\": \"Receive Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Metric\": {\n-                                \"description\": \"Floating point number associated to this event\",\n-                                \"displayName\": \"Metric\",\n+                            \"Send Timeout\": {\n+                                \"description\": \"Timeout for sending data to Spring Application Context. Defaults to 0.\",\n+                                \"displayName\": \"Send Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Metric\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Send Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are successfully received from Spring Application Context are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Riemann Address\": {\n-                                \"description\": \"Hostname of Riemann server\",\n-                                \"displayName\": \"Riemann Address\",\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be sent to Spring Application Context are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"Get\",\n+                            \"Integration\",\n+                            \"Message\",\n+                            \"Put\",\n+                            \"Spring\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.spring.SpringContextProcessor\",\n+                        \"typeDescription\": \"A Processor that supports sending and receiving data from application defined in Spring Application Context via predefined in/out MessageChannels.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-network-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"FIELDS_DESTINATION\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile attributes\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Riemann Address\",\n+                                \"name\": \"FIELDS_DESTINATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n+                                \"name\": \"udp.port\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Riemann Port\": {\n-                                \"defaultValue\": \"5555\",\n-                                \"description\": \"Port that Riemann is listening on\",\n-                                \"displayName\": \"Riemann Port\",\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original raw content\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"byte\",\n+                            \"datagram\",\n+                            \"netflow\",\n+                            \"network\",\n+                            \"packet\",\n+                            \"v5\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n+                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n+                                \"name\": \"netflowv5.header.*\"\n+                            },\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n+                                \"name\": \"netflowv5.record.*\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-web-client-provider-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Riemann Port\",\n+                                \"name\": \"connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service\": {\n-                                \"description\": \"Name of service associated to this event (e.g. FTP File Fetched)\",\n-                                \"displayName\": \"Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Service\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"State\": {\n-                                \"description\": \"State of service associated to this event in string form (e.g. ok, warning, foo)\",\n-                                \"displayName\": \"State\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"State\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TTL\": {\n-                                \"description\": \"Floating point value in seconds until Riemann considers this event as \\\"expired\\\"\",\n-                                \"displayName\": \"TTL\",\n+                            \"redirect-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FOLLOWED\",\n+                                        \"value\": \"FOLLOWED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORED\",\n+                                        \"value\": \"IGNORED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FOLLOWED\",\n+                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n+                                \"displayName\": \"Redirect Handling Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"TTL\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redirect-handling-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Tags\": {\n-                                \"description\": \"Comma separated list of tags associated to the event\",\n-                                \"displayName\": \"Tags\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Tags\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Time\": {\n-                                \"description\": \"Time of event in unix epoch seconds (long), default: (current time)\",\n-                                \"displayName\": \"Time\",\n+                            \"write-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n+                                \"displayName\": \"Write Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"write-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Client\",\n+                            \"HTTP\",\n+                            \"Web\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n+                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-update-attribute-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A FlowFile attribute to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Delete Attributes Expression\": {\n+                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n+                                \"displayName\": \"Delete Attributes Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Time\",\n+                                \"name\": \"Delete Attributes Expression\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Timeout in milliseconds when writing events to Riemann\",\n-                                \"displayName\": \"Timeout\",\n+                            \"Stateful Variables Initial Value\": {\n+                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n+                                \"displayName\": \"Stateful Variables Initial Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Stateful Variables Initial Value\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transport Protocol\": {\n+                            \"Store State\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"Do not store state\",\n+                                        \"value\": \"Do not store state\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"Store state locally\",\n+                                        \"value\": \"Store state locally\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TCP\",\n-                                \"description\": \"Transport protocol to speak to Riemann in\",\n-                                \"displayName\": \"Transport Protocol\",\n+                                \"defaultValue\": \"Do not store state\",\n+                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n+                                \"displayName\": \"Store State\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Protocol\",\n+                                \"name\": \"Store State\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"canonical-value-lookup-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n+                                \"displayName\": \"Cache Value Lookup Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"canonical-value-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Metrics successfully written to Riemann\",\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Metrics which failed to write to Riemann\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"monitoring\",\n-                            \"riemann\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"modification\",\n+                            \"state\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.riemann.PutRiemann\",\n-                        \"typeDescription\": \"Send events to Riemann (http://riemann.io) when FlowFiles pass through this processor. You can use events to notify Riemann that a FlowFile passed through, or you can attach a more meaningful metric, such as, the time a FlowFile took to get to this processor. All attributes attached to events support the NiFi Expression Language.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n+                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n+                                \"name\": \"See additional details\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-hashicorp-vault-nar\",\n+            \"artifact\": \"nifi-framework-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-6-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A Spring Vault configuration property name\",\n-                                \"value\": \"The property value\"\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"configuration-strategy\": {\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n-                                        \"displayName\": \"Direct Properties\",\n-                                        \"value\": \"direct-properties\"\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n-                                        \"displayName\": \"Properties Files\",\n-                                        \"value\": \"properties-files\"\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"direct-properties\",\n-                                \"description\": \"Specifies the source of the configuration properties.\",\n-                                \"displayName\": \"Configuration Strategy\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"configuration-strategy\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.authentication\": {\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TOKEN\",\n-                                        \"value\": \"TOKEN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPID\",\n-                                        \"value\": \"APPID\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPROLE\",\n-                                        \"value\": \"APPROLE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AWS_EC2\",\n-                                        \"value\": \"AWS_EC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AZURE\",\n-                                        \"value\": \"AZURE\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CERT\",\n-                                        \"value\": \"CERT\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CUBBYHOLE\",\n-                                        \"value\": \"CUBBYHOLE\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KUBERNETES\",\n-                                        \"value\": \"KUBERNETES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TOKEN\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n-                                \"displayName\": \"Vault Authentication\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.authentication\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.connection.timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.connection.timeout\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.properties.files\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"properties-files\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n-                                \"displayName\": \"Vault Properties Files\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.properties.files\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"vault.read.timeout\": {\n-                                \"defaultValue\": \"15 sec\",\n-                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.read.timeout\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.ssl.context.service\": {\n-                                \"dependencies\": [\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.ssl.context.service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"vault.uri\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n-                                \"displayName\": \"Vault URI\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"vault.uri\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hashicorp\",\n-                            \"vault\"\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n-                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n                         \"version\": \"1.22.0\"\n                     }\n                 ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-confluent-platform-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"request.header.*\",\n-                                \"value\": \"String literal, may not be empty\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"authentication-type\": {\n+                            \"Commit Offsets\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASIC\",\n-                                        \"value\": \"BASIC\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n+                                \"displayName\": \"Commit Offsets\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authentication-type\",\n+                                \"name\": \"Commit Offsets\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"ssl-context\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context\",\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"url\": {\n-                                \"defaultValue\": \"http://localhost:8081\",\n-                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n-                                \"displayName\": \"Schema Registry URLs\",\n+                            \"key-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n+                                        \"displayName\": \"Byte Array\",\n+                                        \"value\": \"byte-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte-array\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n+                                \"displayName\": \"Key Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-record-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"key-format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"output-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Value Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Value Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"url\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n                                 \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n                             \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"csv\",\n+                            \"json\"\n                         ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kudu-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kudu-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"kudu-lu-kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                            \"Commit Offsets\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n+                                \"displayName\": \"Commit Offsets\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.offset.reset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"honor-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n                                 \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kudu-lu-kerberos-credentials-service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"kudu-lu-masters\": {\n-                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n-                                \"displayName\": \"Kudu Masters\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-masters\",\n-                                \"required\": true,\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-operations-timeout-ms\": {\n-                                \"defaultValue\": \"30000ms\",\n-                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n-                                \"displayName\": \"Kudu Operation Timeout\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-operations-timeout-ms\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-replica-selection\": {\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select the closest replica to the client. Replicas are classified from closest to furthest as follows: 1) Local replicas 2) Replicas whose tablet server has the same location as the client 3) All other replicas\",\n-                                        \"displayName\": \"CLOSEST_REPLICA\",\n-                                        \"value\": \"CLOSEST_REPLICA\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"Select the LEADER replica\",\n-                                        \"displayName\": \"LEADER_ONLY\",\n-                                        \"value\": \"LEADER_ONLY\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"CLOSEST_REPLICA\",\n-                                \"description\": \"Policy with which to choose amongst multiple replicas\",\n-                                \"displayName\": \"Kudu Replica Selection\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kudu-lu-replica-selection\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-return-cols\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"A comma-separated list of columns to return when scanning. To return all columns set to \\\"*\\\"\",\n-                                \"displayName\": \"Kudu Return Columns\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-return-cols\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-lu-table-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Name of the table to access.\",\n-                                \"displayName\": \"Kudu Table Name\",\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-lu-table-name\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"key\",\n-                            \"kudu\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n-                        \"type\": \"org.apache.nifi.controller.kudu.KuduLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Kudu Server associated with the specified key. Binary columns are base64 encoded. Only one matched row will be returned\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n+                            },\n+                            {\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n+                            },\n+                            {\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kudu-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of Records to process in a single Kudu-client batch, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size. Gradually increase this number to find out the best one for best performances.\",\n-                                \"displayName\": \"Max Records per Batch\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data RecordPath\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Kudu instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to Kudu.\",\n-                                \"displayName\": \"Data RecordPath\",\n+                            \"Record Metadata Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n+                                        \"displayName\": \"Use Configured Values\",\n+                                        \"value\": \"Use Configured Values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n+                                        \"displayName\": \"Metadata From Record\",\n+                                        \"value\": \"Metadata From Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Use Configured Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data RecordPath\",\n-                                \"required\": false,\n+                                \"name\": \"Record Metadata Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Failure Strategy\": {\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The FlowFile containing the Records that failed to insert will be routed to the 'failure' relationship\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"route-to-failure\"\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"If any Record cannot be inserted, all FlowFiles in the session will be rolled back to their input queue. This means that if data cannot be pushed, it will block any subsequent data from be pushed to Kudu as well until the issue is resolved. However, this may be advantageous if a strict ordering is required.\",\n-                                        \"displayName\": \"Rollback Session\",\n-                                        \"value\": \"rollback\"\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"route-to-failure\",\n-                                \"description\": \"If one or more Records in a batch cannot be transferred to Kudu, specifies how to handle the failure\",\n-                                \"displayName\": \"Failure Strategy\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFiles per Batch\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of FlowFiles to process in a single execution, between 1 - 100000. Depending on your memory size, and data size per row set an appropriate batch size for the number of FlowFiles to process per client connection setup.Gradually increase this number, only if your FlowFiles typically contain a few records.\",\n-                                \"displayName\": \"FlowFiles per Batch\",\n+                            \"attribute-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"FlowFiles per Batch\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Flush Mode\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO_FLUSH_SYNC\",\n-                                        \"value\": \"AUTO_FLUSH_SYNC\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO_FLUSH_BACKGROUND\",\n-                                        \"value\": \"AUTO_FLUSH_BACKGROUND\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MANUAL_FLUSH\",\n-                                        \"value\": \"MANUAL_FLUSH\"\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO_FLUSH_BACKGROUND\",\n-                                \"description\": \"Set the new flush mode for a kudu session.\\nAUTO_FLUSH_SYNC: the call returns when the operation is persisted, else it throws an exception.\\nAUTO_FLUSH_BACKGROUND: the call returns when the operation has been added to the buffer. This call should normally perform only fast in-memory operations but it may have to wait when the buffer is full and there's another buffer being flushed.\\nMANUAL_FLUSH: the call returns when the operation has been added to the buffer, else it throws a KuduException if the buffer is full.\",\n-                                \"displayName\": \"Flush Mode\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flush Mode\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Handle Schema Drift\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, when fields with names that are not in the target Kudu table are encountered, the Kudu table will be altered to include new columns for those fields.\",\n-                                \"displayName\": \"Handle Schema Drift\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Handle Schema Drift\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore NULL\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Ignore NULL on Kudu Put Operation, Update only non-Null columns if set true\",\n-                                \"displayName\": \"Ignore NULL\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-key-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Ignore NULL\",\n-                                \"required\": true,\n+                                \"name\": \"message-key-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Insert Operation\": {\n-                                \"defaultValue\": \"INSERT\",\n-                                \"description\": \"Specify operationType for this processor.\\nValid values are: INSERT, INSERT_IGNORE, UPSERT, UPDATE, DELETE, UPDATE_IGNORE, DELETE_IGNORE. This Property will be ignored if the <Operation RecordPath> property is set.\",\n-                                \"displayName\": \"Kudu Operation Type\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Insert Operation\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kudu Masters\": {\n-                                \"description\": \"Comma separated addresses of the Kudu masters to connect to.\",\n-                                \"displayName\": \"Kudu Masters\",\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"publish-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n+                                        \"displayName\": \"Use Content as Record Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n+                                \"displayName\": \"Publish Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"publish-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-key-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n+                                \"displayName\": \"Record Key Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-key-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kudu Masters\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Lowercase Field Names\": {\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Convert column names to lowercase when finding index of Kudu table columns\",\n-                                \"displayName\": \"Lowercase Field Names\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Lowercase Field Names\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Operation RecordPath\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record in order to determine the Kudu Operation Type. When evaluated, the RecordPath must evaluate to one of hte valid Kudu Operation Types, or the incoming FlowFile will be routed to failure. If this property is specified, the <Kudu Operation Type> property will be ignored.\",\n-                                \"displayName\": \"Operation RecordPath\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Operation RecordPath\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Skip head line\": {\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n+                                    }\n+                                ],\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Deprecated. Used to ignore header lines, but this should be handled by a RecordReader (e.g. \\\"Treat First Line as Header\\\" property of CSVReader)\",\n-                                \"displayName\": \"Skip head line\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Skip head line\",\n+                                \"name\": \"use-transactions\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the Kudu Table to put data into\",\n-                                \"displayName\": \"Table Name\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression.type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials to use for authentication\",\n+                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n                                 \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kudu-keep-alive-period-timeout-ms\": {\n-                                \"defaultValue\": \"15000ms\",\n-                                \"description\": \"Default timeout used for user operations\",\n-                                \"displayName\": \"Kudu Keep Alive Period Timeout\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.kerberos.keytab\": {\n+                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-keep-alive-period-timeout-ms\",\n+                                \"name\": \"sasl.kerberos.keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-operations-timeout-ms\": {\n-                                \"defaultValue\": \"30000ms\",\n-                                \"description\": \"Default timeout used for user operations (using sessions and scanners)\",\n-                                \"displayName\": \"Kudu Operation Timeout\",\n+                            \"sasl.kerberos.principal\": {\n+                                \"description\": \"Principal used for authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-operations-timeout-ms\",\n+                                \"name\": \"sasl.kerberos.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kudu-sasl-protocol-name\": {\n-                                \"defaultValue\": \"kudu\",\n-                                \"description\": \"The SASL protocol name to use for authenticating via Kerberos. Must match the service principal name.\",\n-                                \"displayName\": \"Kudu SASL Protocol Name\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kudu-sasl-protocol-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading records from incoming flow files.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"worker-count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of worker threads handling Kudu client read and write operations. Defaults to the number of available processors.\",\n-                                \"displayName\": \"Kudu Client Worker Count\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n+                                    }\n+                                ],\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-transactions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"worker-count\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in Kudu\",\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to Kudu\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"HDFS\",\n-                            \"NoSQL\",\n-                            \"database\",\n-                            \"kudu\",\n-                            \"put\",\n-                            \"record\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kudu.PutKudu\",\n-                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to the specified Kudu's table. The schema for the Kudu table is inferred from the schema of the Record Reader. If any error occurs while reading records from the input, or writing records to Kudu, the FlowFile will be routed to failure\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to Kudu\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n+            \"artifact\": \"nifi-ccda-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-ccda-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"Parsing XML elements to FlowFile attributes is not recommend and should be replaced with record-oriented handling\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"skip-validation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to validate CDA message values\",\n+                                \"displayName\": \"Skip Validation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"skip-validation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as CDA and its contents extracted as attributes.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as CDA or its contents extracted as attributes.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"CCDA\",\n+                            \"attributes\",\n+                            \"extract\",\n+                            \"healthcare\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.ccda.ExtractCCDAAttributes\",\n+                        \"typeDescription\": \"Extracts information from an Consolidated CDA formatted FlowFile and provides individual attributes as FlowFile attributes. The attributes are named as <Parent> <dot> <Key>. If the Parent is repeating, the naming will be <Parent> <underscore> <Parent Index> <dot> <Key>. For example, section.act_07.observation.name=Essential hypertension\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n             \"artifact\": \"nifi-aws-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n@@ -45477,16 +42386,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"default-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -53408,16 +50317,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n@@ -53933,16 +50842,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"encryption-service\": {\n                                 \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n                                 \"displayName\": \"Encryption Service\",\n@@ -54554,16 +51463,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"delimiter\": {\n                                 \"description\": \"The string used to delimit directories within the bucket. Please consult the AWS documentation for the correct use of this field.\",\n                                 \"displayName\": \"Delimiter\",\n@@ -55606,16 +52515,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"encryption-service\": {\n                                 \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n                                 \"displayName\": \"Encryption Service\",\n@@ -56327,16 +53236,16 @@\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n@@ -59687,800 +56596,878 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-registry-nar\",\n+            \"artifact\": \"nifi-asana-processors-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-asana-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Schema name\",\n-                                \"value\": \"Schema Content\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"avro-reg-validated-field-names\": {\n+                            \"asana-controller-service\": {\n+                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n+                                \"displayName\": \"Asana Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-asana-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"asana-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"asana-collect-tasks\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Task Attachments\",\n+                                        \"value\": \"asana-collect-task-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect projects of the workspace.\",\n+                                        \"displayName\": \"Projects\",\n+                                        \"value\": \"asana-collect-projects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect tags of the workspace.\",\n+                                        \"displayName\": \"Tags\",\n+                                        \"value\": \"asana-collect-tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the workspace.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"asana-collect-users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified project.\",\n+                                        \"displayName\": \"Members of a Project\",\n+                                        \"value\": \"asana-collect-project-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect teams of the workspace.\",\n+                                        \"displayName\": \"Teams\",\n+                                        \"value\": \"asana-collect-teams\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified team.\",\n+                                        \"displayName\": \"Team Members\",\n+                                        \"value\": \"asana-collect-team-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Stories of Tasks\",\n+                                        \"value\": \"asana-collect-stories\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect status updates of the specified project.\",\n+                                        \"displayName\": \"Status Updates of a Project\",\n+                                        \"value\": \"asana-collect-project-status-updates\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of project status updates.\",\n+                                        \"displayName\": \"Attachments of Status Updates\",\n+                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n+                                        \"displayName\": \"Events of a Project\",\n+                                        \"value\": \"asana-collect-project-events\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n-                                \"displayName\": \"Validate Field Names\",\n+                                \"defaultValue\": \"asana-collect-tasks\",\n+                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-reg-validated-field-names\",\n+                                \"name\": \"asana-object-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-output-batch-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-project-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-project-members\",\n+                                            \"asana-collect-project-status-attachments\",\n+                                            \"asana-collect-project-status-updates\",\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\",\n+                                            \"asana-collect-project-events\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n+                                \"displayName\": \"Project Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-project-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"asana-section-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n+                                \"displayName\": \"Section Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-section-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-tag-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n+                                \"displayName\": \"Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-tag-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-team-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-team-members\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Team name. Case sensitive.\",\n+                                \"displayName\": \"Team\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-team-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n+                                \"name\": \"removed\"\n+                            },\n+                            {\n+                                \"description\": \"Newly collected objects are routed to this relationship.\",\n+                                \"name\": \"new\"\n+                            },\n+                            {\n+                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n+                                \"name\": \"updated\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"asana\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n+                        \"typeDescription\": \"This processor collects data from Asana\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Global ID of the object in Asana.\",\n+                                \"name\": \"asana.gid\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-kafka-1-0-nar\",\n+            \"artifact\": \"nifi-record-sink-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"bcc\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bcc\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"cc\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cc\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"from\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"from\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"smtp-auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"smtp-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"smtp-hostname\": {\n+                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n+                                \"displayName\": \"SMTP Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"smtp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"smtp-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-password\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"smtp-port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"smtp-ssl\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether SSL should be enabled\",\n+                                \"displayName\": \"SMTP SSL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-ssl\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"smtp-starttls\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"name\": \"smtp-starttls\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n+                            \"smtp-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-xmailer-header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"smtp-xmailer-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"subject\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"to\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"to\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"record\",\n+                            \"send\",\n+                            \"sink\",\n+                            \"smtp\",\n+                            \"write\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"logsink-log-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"INFO\",\n+                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"logsink-log-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n                                 \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"kafka\",\n+                            \"log\",\n                             \"record\",\n                             \"sink\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_1_0\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 1.x topic.\",\n+                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"hostname\": {\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"sender-threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n+                                \"displayName\": \"Sender Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sender-threads\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"UDP\",\n+                            \"event\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n+                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"name\": \"The name to register the specified RecordSinkService\",\n+                                \"value\": \"The RecordSinkService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-http-context-map-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-http-context-map-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Maximum Outstanding Requests\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n+                                \"displayName\": \"Maximum Outstanding Requests\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Maximum Outstanding Requests\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Request Expiration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n+                                \"displayName\": \"Request Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Request Expiration\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"http\",\n+                            \"request\",\n+                            \"response\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n+                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-cf-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"app-config-file\": {\n+                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"name\": \"app-config-file\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"app-config-json\": {\n+                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"name\": \"app-config-json\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"box-account-id\": {\n+                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n+                                \"displayName\": \"Account ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"box-account-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"artifact\": \"nifi-box-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"box\",\n+                            \"client\",\n+                            \"provider\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_1_0. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n+                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateless-processor-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"artifact\": \"nifi-stateless-processor-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60488,1267 +57475,949 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Any dynamic property that is added will be provided to the stateless flow as a Parameter. The name of the property will be the name of the Parameter, and the value of the property will be the value of the Parameter. Because Parameter values may or may not be sensitive, all dynamic properties will be considered sensitive in order to protect their integrity.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Any Parameter name\",\n+                                \"value\": \"Any value\"\n                             }\n                         ],\n+                        \"explicitRestrictions\": [],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                                \"description\": \"Specifies how long to wait before timing out when attempting to communicate with NiFi Registry\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"Content Storage Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The FlowFile content will be stored on the NiFi JVM's heap. This is the most efficient option for small FlowFiles but can quickly exhaust the heap with larger FlowFiles, resulting in Out Of Memory Errors and node instability.\",\n+                                        \"displayName\": \"Store Content on Heap\",\n+                                        \"value\": \"Store Content on Heap\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile content will be stored on disk, within the configured Work Directory. The content will still be cleared between invocations and will not be persisted across restarts.\",\n+                                        \"displayName\": \"Store Content on Disk\",\n+                                        \"value\": \"Store Content on Disk\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Store Content on Disk\",\n+                                \"description\": \"Specifies where the content of FlowFiles that the Stateless dataflow is operating on should be stored. Note that the data is always considered temporary and may be deleted at any time. It is not intended to be persisted across restarted.\",\n+                                \"displayName\": \"Content Storage Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Content Storage Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Dataflow File\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Use Local File\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"description\": \"The filename or URL that specifies the dataflow that is to be run\",\n+                                \"displayName\": \"Dataflow File/URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"Dataflow File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n+                            \"Dataflow Specification Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Dataflow to run is stored as a file on the NiFi server or at a URL that is accessible to the NiFi server\",\n+                                        \"displayName\": \"Use Local File or URL\",\n+                                        \"value\": \"Use Local File\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"Dataflow to run is stored in NiFi Registry\",\n+                                        \"displayName\": \"Use NiFi Registry\",\n+                                        \"value\": \"Use NiFi Registry\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"Use Local File\",\n+                                \"description\": \"Specifies how the Processor should obtain a copy of the dataflow that it is to run\",\n+                                \"displayName\": \"Dataflow Specification Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"Dataflow Specification Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"Dataflow Timeout\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"If the flow does not complete within this amount of time, the incoming FlowFile, if any, will be routed to the timeout relationship,the dataflow will be cancelled, and the invocation will end.\",\n+                                \"displayName\": \"Dataflow Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Dataflow Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Failure Ports\": {\n+                                \"description\": \"A comma-separated list of the names of Output Ports that exist at the root level of the dataflow. If any FlowFile is routed to one of the Ports whose name is listed here, the dataflow will be considered a failure, and the incoming FlowFile (if any) will be routed to 'failure'. If not specified, all Output Ports will be considered successful.\",\n+                                \"displayName\": \"Failure Ports\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"name\": \"Failure Ports\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"Flow Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the flow in the NiFi Registry\",\n+                                \"displayName\": \"Flow Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n+                                \"name\": \"Flow Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            \"Flow Version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The version of the flow in the NiFi Registry that should be retrieved. If not specified, the latest version will always be used.\",\n+                                \"displayName\": \"Flow Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Flow Version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Input Port\": {\n+                                \"description\": \"Specifies the name of the Input Port to send incoming FlowFiles to. This property is required if this processor has any incoming connections.\",\n+                                \"displayName\": \"Input Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Input Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Krb5 Conf File\": {\n+                                \"description\": \"The KRB5 Conf file to use for configuring components that rely on Kerberos\",\n+                                \"displayName\": \"Krb5 Conf File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Krb5 Conf File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"Max Ingest Data Size\": {\n+                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum amount of data that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n+                                \"displayName\": \"Max Ingest Data Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Ingest Data Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"Max Ingest FlowFiles\": {\n+                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum number of FlowFiles that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n+                                \"displayName\": \"Max Ingest FlowFiles\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Ingest FlowFiles\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n+                            \"Max Input FlowFile Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"dependentValues\": [\n+                                            \"Store Content on Heap\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Content Storage Strategy\",\n+                                        \"propertyName\": \"Content Storage Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"This Processor is configured to load all incoming FlowFiles into memory. Because of that, it is important to limit the maximum size of any incoming FlowFile that would get loaded into memory, in order to prevent Out Of Memory Errors and excessive Garbage Collection. Any FlowFile whose content size is greater than the configured size will be routed to failure and not sent to the Stateless Engine.\",\n+                                \"displayName\": \"Max Input FlowFile Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Max Input FlowFile Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n+                            \"NAR Directory\": {\n+                                \"defaultValue\": \"./lib\",\n+                                \"description\": \"The directory to retrieve NAR's from\",\n+                                \"displayName\": \"NAR Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"NAR Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Registry Bucket\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the Bucket in the NiFi Registry that the flow should retrieved from\",\n+                                \"displayName\": \"Registry Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Registry Bucket\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Registry SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service to use for interacting with the NiFi Registry\",\n+                                \"displayName\": \"Registry SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Registry SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Registry URL\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"dependentValues\": [\n+                                            \"Use NiFi Registry\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n+                                        \"propertyName\": \"Dataflow Specification Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"description\": \"The URL of the NiFi Registry to retrieve the flow from\",\n+                                \"displayName\": \"Registry URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"Registry URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Stateless SSL Context Service\": {\n+                                \"description\": \"The SSL Context to use as the Stateless System SSL Context\",\n+                                \"displayName\": \"Stateless SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"Stateless SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            \"Status Task Interval\": {\n+                                \"description\": \"The Stateless engine periodically logs the status of the dataflow's processors.  This property allows the interval to be changed, or the status logging to be skipped altogether if the property is not set.\",\n+                                \"displayName\": \"Status Task Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Status Task Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                            \"Work Directory\": {\n+                                \"defaultValue\": \"./work\",\n+                                \"description\": \"A directory that can be used to create temporary files, such as expanding NAR files, temporary FlowFile content, caching the dataflow, etc.\",\n+                                \"displayName\": \"Work Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n+                                \"name\": \"Work Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If the dataflow fails to complete in the configured amount of time, any incoming FlowFile will be routed to this relationship\",\n+                                \"name\": \"timeout\"\n+                            },\n+                            {\n+                                \"description\": \"If the dataflow fails to process an incoming FlowFile, that FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"For any incoming FlowFile that is successfully processed, the original incoming FlowFile will be transferred to this Relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFiles that are transferred to an Output Port in the configured dataflow will be routed to this Relationship\",\n+                                \"name\": \"output\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"1.0\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 1.0 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_1_0.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n                             },\n                             {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"DISK\"\n                             },\n                             {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"NETWORK\"\n+                            }\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.stateless.ExecuteStateless\",\n+                        \"typeDescription\": \"Runs the configured dataflow using the Stateless NiFi engine. Please see documentation in order to understand the differences between the traditional NiFi runtime engine and the Stateless NiFi engine. If the Processor is configured with an incoming connection, the incoming FlowFiles will be queued up into the specified Input Port in the dataflow. Data that is transferred out of the flow via an Output Port will be sent to the 'output' relationship, and an attribute will be added to indicate which Port that FlowFile was transferred to. See Additional Details for more information.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The name of the Output Port that the FlowFile was transferred to\",\n+                                \"name\": \"output.port.name\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"If one or more FlowFiles is routed to one of the Output Ports that is configured as a Failure Port, the input FlowFile (if any) will have this attribute added to it, indicating the name of the Port that caused the dataflow to be considered a failure.\",\n+                                \"name\": \"failure.port.name\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-distributed-cache-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Server Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"Server Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-key-field\": {\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"name\": \"Server Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"partitioner.class\": {\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"set\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"Eviction Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Maximum Cache Entries\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n+                                \"name\": \"maximum-read-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_1_0\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n+                            \"cache\",\n+                            \"distinct\",\n+                            \"distributed\",\n+                            \"server\",\n+                            \"set\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_1_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 1.0 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_1_0.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-1-0-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n-                        \"deprecationReason\": \"\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"acks\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"Eviction Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"Maximum Cache Entries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"name\": \"maximum-read-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Messages will be assigned to random partitions.\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"key/value\",\n+                            \"map\",\n+                            \"server\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-avro-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Avro schema\": {\n+                                \"description\": \"If the Avro records do not contain the schema (datum only), it must be specified here.\",\n+                                \"displayName\": \"Avro schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Avro schema\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"JSON container options\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"array\",\n+                                        \"value\": \"array\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"defaultValue\": \"array\",\n+                                \"description\": \"Determines how stream of records is exposed: either as a sequence of single Objects (none) (i.e. writing every Object to a new line), or as an array of Objects (array).\",\n+                                \"displayName\": \"JSON container options\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"JSON container options\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transactional-id-prefix\": {\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-transactions\": {\n+                            \"Wrap Single Record\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines if the resulting output for empty records or a single record should be wrapped in a container array as specified by 'JSON container options'\",\n+                                \"displayName\": \"Wrap Single Record\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"Wrap Single Record\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been converted to JSON\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or cannot be converted to JSON for any reason\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"1.0\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_1_0\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 1.0 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_1_0.\",\n+                        \"type\": \"org.apache.nifi.processors.avro.ConvertAvroToJSON\",\n+                        \"typeDescription\": \"Converts a Binary Avro record into a JSON object. This processor provides a direct mapping of an Avro field to a JSON field, such that the resulting JSON will have the same hierarchical structure as the Avro document. Note that the Avro schema information will be lost, as this is not a translation from binary Avro to JSON formatted Avro. The output JSON is encoded the UTF-8 encoding. If an incoming FlowFile contains a stream of multiple Avro records, the resultant FlowFile will contain a JSON Array containing all of the Avro records or a sequence of JSON Objects.  If an incoming FlowFile does not contain any records, an empty JSON object is the output. Empty/Single Avro record FlowFile inputs are optionally wrapped in a container as dictated by 'Wrap Single Record'\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"Sets the mime type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61760,123 +58429,128 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"decryption-strategy\": {\n+                            \"Count Items\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n-                                        \"displayName\": \"DECRYPTED\",\n-                                        \"value\": \"DECRYPTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n-                                        \"displayName\": \"PACKAGED\",\n-                                        \"value\": \"PACKAGED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DECRYPTED\",\n-                                \"description\": \"Strategy for writing files to success after decryption\",\n-                                \"displayName\": \"Decryption Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n+                                \"displayName\": \"Count Items\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"decryption-strategy\",\n+                                \"name\": \"Count Items\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                            \"Fingerprint Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CRC-64-AVRO\",\n+                                        \"value\": \"CRC-64-AVRO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"CRC-64-AVRO\",\n+                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n+                                \"displayName\": \"Fingerprint Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Fingerprint Algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"Metadata Keys\": {\n+                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n+                                \"displayName\": \"Metadata Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n+                                \"name\": \"Metadata Keys\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Succeeded\",\n+                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Decryption Failed\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"avro\",\n+                            \"metadata\",\n+                            \"schema\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n+                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Filename from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n+                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n+                                \"name\": \"schema.type\"\n                             },\n                             {\n-                                \"description\": \"Modified Date from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.modified\"\n+                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n+                                \"name\": \"schema.name\"\n                             },\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n+                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n+                                \"name\": \"schema.fingerprint\"\n                             },\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n+                                \"name\": \"item.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61888,4400 +58562,4613 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"compression-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZLIB\",\n-                                        \"value\": \"ZLIB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ZIP\",\n-                                \"description\": \"Compression Algorithm for encryption\",\n-                                \"displayName\": \"Compression Algorithm\",\n+                            \"Output Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n+                                \"displayName\": \"Output Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-algorithm\",\n+                                \"name\": \"Output Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-encoding\": {\n+                            \"Output Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"description\": \"Avro's object container file format\",\n+                                        \"displayName\": \"Datafile\",\n+                                        \"value\": \"Datafile\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"description\": \"Bare Avro records\",\n+                                        \"displayName\": \"Bare Record\",\n+                                        \"value\": \"Bare Record\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for encryption\",\n-                                \"displayName\": \"File Encoding\",\n+                                \"defaultValue\": \"Datafile\",\n+                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"Output Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"public-key-search\": {\n-                                \"dependencies\": [\n+                            \"Split Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Public Key Service\",\n-                                        \"propertyName\": \"public-key-service\"\n+                                        \"description\": \"Split at Record boundaries\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n                                     }\n                                 ],\n-                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n-                                \"displayName\": \"Public Key Search\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"public-key-search\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n+                                \"defaultValue\": \"Record\",\n+                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n+                                \"displayName\": \"Split Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Split Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"symmetric-key-algorithm\": {\n+                            \"Transfer Metadata\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"AES_128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"AES_192\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"AES_256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_128\",\n-                                        \"value\": \"CAMELLIA_128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_192\",\n-                                        \"value\": \"CAMELLIA_192\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_256\",\n-                                        \"value\": \"CAMELLIA_256\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AES_256\",\n-                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n-                                \"displayName\": \"Symmetric-Key Algorithm\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n+                                \"displayName\": \"Transfer Metadata\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"symmetric-key-algorithm\",\n+                                \"name\": \"Transfer Metadata\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Encryption Failed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"avro\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n+                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n+                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Symmetric-Key Algorithm\",\n-                                \"name\": \"pgp.symmetric.key.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-geohash-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-geohash-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"compression-algorithm\": {\n+                            \"geohash-format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n+                                        \"displayName\": \"BASE32\",\n+                                        \"value\": \"BASE32\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ZLIB\",\n-                                        \"value\": \"ZLIB\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"displayName\": \"LONG\",\n+                                        \"value\": \"LONG\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ZIP\",\n-                                \"description\": \"Compression Algorithm for signing\",\n-                                \"displayName\": \"Compression Algorithm\",\n+                                \"defaultValue\": \"BASE32\",\n+                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n+                                \"displayName\": \"Geohash Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-algorithm\",\n+                                \"name\": \"geohash-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    },\n+                            \"geohash-level\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"dependentValues\": [\n+                                            \"ENCODE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for signing\",\n-                                \"displayName\": \"File Encoding\",\n+                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n+                                \"displayName\": \"Geohash Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geohash-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-algorithm\": {\n+                            \"geohash-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n+                                \"displayName\": \"Geohash Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geohash-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"latitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n+                                \"displayName\": \"Latitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"latitude-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"longitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n+                                \"displayName\": \"Longitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"longitude-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"SHA384\"\n+                                        \"displayName\": \"ENCODE\",\n+                                        \"value\": \"ENCODE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"SHA512\"\n+                                        \"displayName\": \"DECODE\",\n+                                        \"value\": \"DECODE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA512\",\n-                                \"description\": \"Hash Algorithm for signing\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"ENCODE\",\n+                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-algorithm\",\n+                                \"name\": \"mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"private-key-id\": {\n-                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n-                                \"displayName\": \"Private Key ID\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"private-key-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for generating content signatures\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the record writer service to use for writing data\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"signing-strategy\": {\n+                            \"routing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n-                                        \"displayName\": \"SIGNED\",\n-                                        \"value\": \"SIGNED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKIP\",\n+                                        \"value\": \"SKIP\"\n                                     },\n                                     {\n-                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n-                                        \"displayName\": \"DETACHED\",\n-                                        \"value\": \"DETACHED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SPLIT\",\n+                                        \"value\": \"SPLIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRE\",\n+                                        \"value\": \"REQUIRE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SIGNED\",\n-                                \"description\": \"Strategy for writing files to success after signing\",\n-                                \"displayName\": \"Signing Strategy\",\n+                                \"defaultValue\": \"SKIP\",\n+                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signing-strategy\",\n+                                \"name\": \"routing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Content signing succeeded\",\n+                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Content signing failed\",\n+                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"geo\",\n+                            \"geohash\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n+                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n+                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-evtx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-evtx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n+                            \"granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chunk\",\n+                                        \"value\": \"Chunk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Chunk\",\n+                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n+                                \"displayName\": \"Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n+                                \"name\": \"granularity\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the evtx file\",\n+                                \"name\": \"filename\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n+                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n+                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n+                                \"name\": \"bad chunk\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"event\",\n+                            \"evtx\",\n+                            \"file\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"windows\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n-                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n+                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n+                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Filename from Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n-                                \"name\": \"pgp.literal.data.modified\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Creation Time in milliseconds\",\n-                                \"name\": \"pgp.signature.created\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n+                                \"description\": \"The output filename\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-pgp-service-nar\",\n+            \"artifact\": \"nifi-slack-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The property value will be converted to JSON and will be added to the array of attachments in the JSON payload being sent to Slack. The property name will not be used by the processor.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"<Arbitrary name>\",\n+                                \"value\": \"JSON snippet specifying a Slack message \\\"attachment\\\"\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n+                            \"access-token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n+                            \"channel\": {\n+                                \"description\": \"Slack channel, private group, or IM channel to send the message to.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"channel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n+                            \"file-mime-type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"Mime type of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the mime type will be set to 'application/octet-stream' in the Slack message.\",\n+                                \"displayName\": \"File Mime Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"keyring-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-mime-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n-                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the file name will be set to 'file' in the Slack message.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n+                            \"file-title\": {\n+                                \"description\": \"Title of the file displayed in the Slack message. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'.\",\n+                                \"displayName\": \"File Title\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"keyring-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-title\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n-                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hbase_2-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"HBase Cache Table Name\": {\n-                                \"description\": \"Name of the table on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Cache Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Cache Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"HBase Client Service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n+                            \"file-upload-url\": {\n+                                \"defaultValue\": \"https://slack.com/api/files.upload\",\n+                                \"description\": \"Slack Web API URL for uploading files to channels. It only needs to be changed if Slack changes its API URL.\",\n+                                \"displayName\": \"File Upload URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HBase Client Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"HBase Column Family\": {\n-                                \"defaultValue\": \"f\",\n-                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n-                                \"displayName\": \"HBase Column Family\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Family\",\n+                                \"name\": \"file-upload-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HBase Column Qualifier\": {\n-                                \"defaultValue\": \"q\",\n-                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n-                                \"displayName\": \"HBase Column Qualifier\",\n+                            \"post-message-url\": {\n+                                \"defaultValue\": \"https://slack.com/api/chat.postMessage\",\n+                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n+                                \"displayName\": \"Post Message URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Column Qualifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"post-message-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"text\": {\n+                                \"description\": \"Text of the Slack message to send. Only required if no attachment has been specified and 'Upload File' has been set to 'No'.\",\n+                                \"displayName\": \"Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hbase-cache-visibility-expression\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n-                                \"displayName\": \"Visibility Expression\",\n+                            \"upload-flowfile\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Upload and attach FlowFile content to the Slack message.\",\n+                                        \"displayName\": \"Yes\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Don't upload and attach FlowFile content to the Slack message.\",\n+                                        \"displayName\": \"No\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to upload and attach the FlowFile content to the Slack message.\",\n+                                \"displayName\": \"Upload FlowFile\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hbase-cache-visibility-expression\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"upload-flowfile\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.hbase.HBase_2_ClientService\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"hbase\",\n-                            \"map\",\n-                            \"state\"\n+                            \"message\",\n+                            \"notify\",\n+                            \"post\",\n+                            \"slack\",\n+                            \"upload\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientMapCacheService\",\n-                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_2_ClientService controller to communicate with HBase.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.slack.PostSlack\",\n+                        \"typeDescription\": \"Sends a message on Slack. The FlowFile content (e.g. an image) can be uploaded and attached to the message.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The Slack URL of the uploaded file. It will be added if 'Upload FlowFile' has been set to 'Yes'.\",\n+                                \"name\": \"slack.file.url\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name of an HBase configuration property.\",\n-                                \"value\": \"The value of the given HBase configuration property.\"\n+                                \"description\": \"Converts the contents of each value specified by the Dynamic Property's value to JSON and appends it to the payload being sent to Slack.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A JSON object to add to Slack's \\\"attachments\\\" JSON payload.\",\n+                                \"value\": \"JSON-formatted string to add to Slack's payload JSON appended to the \\\"attachments\\\" JSON array.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"HBase Client Retries\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"HBase Client Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"HBase Client Retries\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Files\": {\n-                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n-                                \"displayName\": \"Hadoop Configuration Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Files\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"channel\": {\n+                                \"description\": \"A public channel using #channel or direct message using @username. If not specified, the default webhook channel as specified in Slack's Incoming Webhooks web interface is used.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"channel\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Phoenix Client JAR Location\": {\n-                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n-                                \"displayName\": \"Phoenix Client JAR Location\",\n+                            \"icon-emoji\": {\n+                                \"description\": \"Icon Emoji to be used for the message. Must begin and end with a colon, e.g. :ghost:\",\n+                                \"displayName\": \"Icon Emoji\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Phoenix Client JAR Location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"icon-emoji\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Client Port\": {\n-                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Client Port\",\n+                            \"icon-url\": {\n+                                \"description\": \"Icon URL to be used for the message\",\n+                                \"displayName\": \"Icon URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Client Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"icon-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Quorum\": {\n-                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper Quorum\",\n+                            \"username\": {\n+                                \"description\": \"The displayed Slack username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper Quorum\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper ZNode Parent\": {\n-                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n-                                \"displayName\": \"ZooKeeper ZNode Parent\",\n+                            \"webhook-text\": {\n+                                \"description\": \"The text sent in the webhook message\",\n+                                \"displayName\": \"Webhook Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"ZooKeeper ZNode Parent\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"webhook-text\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"webhook-url\": {\n+                                \"description\": \"The POST URL provided by Slack to send messages into a channel.\",\n+                                \"displayName\": \"Webhook URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"webhook-url\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hbase\"\n+                            \"notify\",\n+                            \"put\",\n+                            \"slack\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_ClientService\",\n-                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 2.1.1 client. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.slack.PutSlack\",\n+                        \"typeDescription\": \"Sends a message to your team on slack.com\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase_2-client-service-nar\",\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"hb-lu-authorizations\": {\n-                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n-                                \"displayName\": \"Authorizations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-authorizations\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hb-lu-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"oauth2-access-token-url\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The full endpoint of the URL where access tokens are handled.\",\n+                                \"displayName\": \"Access Token Url\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-charset\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"oauth2-access-token-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hb-lu-return-cols\": {\n-                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n-                                \"displayName\": \"Columns\",\n+                            \"oauth2-ssl-context\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"SSL Context\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-return-cols\",\n+                                \"name\": \"oauth2-ssl-context\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hb-lu-table-name\": {\n-                                \"description\": \"The name of the table where look ups will be run.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hb-lu-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hbase-client-service\": {\n-                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hbase-client-service\",\n-                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProvider\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hbase\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"service\"\n+                            \"authorization\",\n+                            \"oauth2\",\n+                            \"provider\"\n                         ],\n-                        \"type\": \"org.apache.nifi.hbase.HBase_2_RecordLookupService\",\n-                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n+                        \"type\": \"org.apache.nifi.oauth2.OAuth2TokenProviderImpl\",\n+                        \"typeDescription\": \"This controller service provides a way of working with access and refresh tokens via the password and client_credential grant flows in the OAuth2 specification. It is meant to provide a way for components to get a token from an oauth2 provider and pass that token as a part of a header to another service.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-lookup-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"HTTP Protocols\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n-                                    },\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"H2_HTTP_1_1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"audience\": {\n+                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n+                                \"displayName\": \"Audience\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"audience\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"authorization-server-url\": {\n+                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n+                                \"displayName\": \"Authorization Server URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"authorization-server-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                            \"client-authentication-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n+                                        \"displayName\": \"REQUEST_BODY\",\n+                                        \"value\": \"REQUEST_BODY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n+                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n+                                        \"value\": \"BASIC_AUTHENTICATION\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                                \"defaultValue\": \"REQUEST_BODY\",\n+                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n+                                \"displayName\": \"Client Authentication Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"client-authentication-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                            \"client-id\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"client-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"client-secret\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Client ID\",\n+                                        \"propertyName\": \"client-id\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client secret\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"client-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Quote Mode\": {\n+                            \"grant-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n+                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n+                                        \"displayName\": \"User Password\",\n+                                        \"value\": \"password\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n+                                        \"displayName\": \"Client Credentials\",\n+                                        \"value\": \"client_credentials\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n+                                        \"displayName\": \"Refresh Token\",\n+                                        \"value\": \"refresh_token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MINIMAL\",\n+                                \"defaultValue\": \"password\",\n+                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n+                                \"displayName\": \"Grant Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"grant-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"refresh-token\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"refresh_token\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"description\": \"Refresh Token.\",\n+                                \"displayName\": \"Refresh Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"refresh-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"refresh-window\": {\n+                                \"defaultValue\": \"0 s\",\n+                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n+                                \"displayName\": \"Refresh Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"refresh-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n+                            \"resource\": {\n+                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n+                                \"displayName\": \"Resource\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"resource\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scope\": {\n+                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n+                                \"displayName\": \"Scope\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scope\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"service-password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"password\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"description\": \"Password for the username on the service that is being accessed.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"service-password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n+                            \"service-user-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"password\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n+                                \"description\": \"Username on the service that is being accessed.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"csv-file\",\n+                                \"name\": \"service-user-name\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"access token\",\n+                            \"authorization\",\n+                            \"http\",\n+                            \"oauth2\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n+                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cache-manager\": {\n+                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n+                                \"displayName\": \"Hazelcast Cache Manager\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-cache-manager\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"hazelcast-cache-name\": {\n+                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n+                                \"displayName\": \"Hazelcast Cache Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-key-column\",\n+                                \"name\": \"hazelcast-cache-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-entry-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down.\",\n+                                \"displayName\": \"Hazelcast Entry Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-entry-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n                                 \"version\": \"1.22.0\"\n                             },\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"hazelcast\",\n+                            \"map\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"character-encoding\": {\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-clustering-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n+                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n+                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n+                                        \"displayName\": \"All Nodes\",\n+                                        \"value\": \"all_nodes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n+                                        \"displayName\": \"Explicit\",\n+                                        \"value\": \"explicit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n+                                \"displayName\": \"Hazelcast Clustering Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n+                                \"name\": \"hazelcast-clustering-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-map-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"hazelcast-instances\": {\n+                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n+                                \"displayName\": \"Hazelcast Instances\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache-service\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-instances\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-port\": {\n+                                \"defaultValue\": \"5701\",\n+                                \"description\": \"Port for the Hazelcast instance to use.\",\n+                                \"displayName\": \"Hazelcast Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-port\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"distributed\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"map\",\n-                            \"value\"\n+                            \"hazelcast\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n-                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"configuration-file\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-connection-timeout\": {\n+                                \"defaultValue\": \"20 secs\",\n+                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n+                                \"displayName\": \"Hazelcast Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-retry-backoff-initial\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n+                                \"displayName\": \"Hazelcast Initial Backoff\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-initial\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-retry-backoff-maximum\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Maximum Backoff\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-maximum\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-retry-backoff-multiplier\": {\n+                                \"defaultValue\": \"1.5\",\n+                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-server-address\": {\n+                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n+                                \"displayName\": \"Hazelcast Server Address\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hazelcast-server-address\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n                                 \"version\": \"1.22.0\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"properties\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"hazelcast\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n-                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-airtable-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"artifact\": \"nifi-airtable-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"*\",\n-                                \"value\": \"*\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"15 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"api-key\": {\n+                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"api-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"rest-lookup-basic-auth-password\": {\n-                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n+                            \"api-url\": {\n+                                \"defaultValue\": \"https://api.airtable.com/v0\",\n+                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n+                                \"displayName\": \"API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"name\": \"api-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"base-id\": {\n+                                \"description\": \"The ID of the Airtable base to be queried.\",\n+                                \"displayName\": \"Base ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"base-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-filter\": {\n+                                \"description\": \"Filter records by Airtable's formulas.\",\n+                                \"displayName\": \"Custom Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"custom-filter\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-username\": {\n-                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n-                                \"displayName\": \"Basic Authentication Username\",\n+                            \"fields\": {\n+                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-basic-auth-username\",\n+                                \"name\": \"fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-connection-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to remote service.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"max-records-per-flowfile\": {\n+                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Records Per FlowFile\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-connection-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-records-per-flowfile\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-digest-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n-                                \"displayName\": \"Use Digest Authentication\",\n+                            \"query-page-size\": {\n+                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n+                                \"displayName\": \"Query Page Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-digest-auth\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"query-page-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-read-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from remote service.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"query-time-window-lag\": {\n+                                \"defaultValue\": \"3 s\",\n+                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n+                                \"displayName\": \"Query Time Window Lag\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-read-timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"query-time-window-lag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-record-path\": {\n-                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n-                                \"displayName\": \"Record Path\",\n+                            \"table-id\": {\n+                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n+                                \"displayName\": \"Table ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"rest-lookup-record-path\",\n-                                \"required\": false,\n+                                \"name\": \"table-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-record-reader\": {\n-                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-record-reader\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"airtable\",\n+                            \"database\",\n+                            \"query\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n+                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n-                            \"rest-lookup-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-ssl-context-service\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"rest-lookup-url\": {\n-                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n-                                \"displayName\": \"URL\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"rest-lookup-url\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"el-rest-query\": {\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"json\",\n-                            \"lookup\",\n-                            \"rest\",\n-                            \"xml\"\n+                            \"delete\",\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n-                        \"typeDescription\": \"Use a REST service to look up values.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n+                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n+                                \"name\": \"elasticsearch.delete.took\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n+                                \"name\": \"elasticsearch.delete.error\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"get-es-attribute-name\": {\n+                                \"defaultValue\": \"elasticsearch.doc\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"flowfile-attribute\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"get-es-destination\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n+                                \"displayName\": \"Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Quote Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"get-es-attribute-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"get-es-destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n+                                        \"displayName\": \"FlowFile Attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"get-es-destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                            \"get-es-id\": {\n+                                \"description\": \"The _id of the document to retrieve.\",\n+                                \"displayName\": \"Document Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"csv-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"ignore-duplicates\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"Lookup value column.\",\n-                                \"displayName\": \"Lookup Value Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-value-column\",\n+                                \"name\": \"get-es-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Fetched documents are routed to this relationship.\",\n+                                \"name\": \"document\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n+                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"A key that can be looked up\",\n-                                \"value\": \"The value for the key\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"elasticsearch.index\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"elasticsearch.type\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n+                                \"name\": \"elasticsearch.get.error\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                        \"version\": \"1.22.0\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\",\n-                            \"xml\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n-                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cache Expiration\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"el-rest-format-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"el-rest-query\": {\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-value-columns\": {\n-                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Value Columns\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-value-columns\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"get\",\n+                            \"json\",\n+                            \"query\",\n+                            \"read\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cache Expiration\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n-                                \"displayName\": \"Lookup Value Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"database-file\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-file\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-anonymous-ip\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n-                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-anonymous-ip\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-city\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup Geo Enrichment\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-city\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-connection-type\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n-                                \"displayName\": \"Lookup Connection Type\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-connection-type\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-domain\": {\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use Elasticsearch \\\"scroll\\\" to page results.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" to page sorted results.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n-                                \"displayName\": \"Lookup Domain Name\",\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-domain\",\n+                                \"name\": \"el-rest-pagination-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-isp\": {\n+                            \"el-rest-query\": {\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup ISP\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-isp\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"1.22.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"anonymous\",\n-                            \"cellular\",\n-                            \"domain\",\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"ipgeo\",\n-                            \"isp\",\n-                            \"lookup\",\n-                            \"maxmind\",\n-                            \"tor\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-evtx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-evtx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"granularity\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chunk\",\n-                                        \"value\": \"Chunk\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"File\"\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Chunk\",\n-                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n-                                \"displayName\": \"Granularity\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"granularity\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the evtx file\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n                                 \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n-                                \"name\": \"bad chunk\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"event\",\n-                            \"evtx\",\n-                            \"file\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"windows\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n-                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The output filename\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request) in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"The value of the Bulk request header\"\n+                            },\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cassandra-dmc-key-field-name\": {\n-                                \"description\": \"The name of the field that acts as the unique key. (The CQL type should be \\\"blob\\\")\",\n-                                \"displayName\": \"Key Field Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-key-field-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cassandra-dmc-session-provider\": {\n-                                \"description\": \"The client service that will configure the cassandra client connection.\",\n-                                \"displayName\": \"Session Provider\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-dmc-session-provider\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"cassandra-dmc-table-name\": {\n-                                \"description\": \"The name of the table where the cache will be stored.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-table-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-dmc-ttl\": {\n-                                \"description\": \"If configured, this will set a TTL (Time to Live) for each row inserted into the table so that old cache items expire after a certain period of time.\",\n-                                \"displayName\": \"TTL\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-ttl\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-dmc-value-field-name\": {\n-                                \"description\": \"The name of the field that will store the value. (The CQL type should be \\\"blob\\\")\",\n-                                \"displayName\": \"Value Field Name\",\n+                            \"put-es-json-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cassandra-dmc-value-field-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cassandra\",\n-                            \"distributed\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.cassandra.CassandraDistributedMapCache\",\n-                        \"typeDescription\": \"Provides a DistributedMapCache client that is based on Apache Cassandra.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            },\n+                            \"put-es-json-dynamic_templates\": {\n+                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-dynamic_templates\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"put-es-json-error-documents\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this configuration property is true, the response from Elasticsearch will be examined for failed documents and the FlowFile(s) associated with the failed document(s) will be sent to the \\\"errors\\\" relationship with \\\"elasticsearch.bulk.error\\\" attributes.\",\n+                                \"displayName\": \"Output Error Documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"name\": \"put-es-json-error-documents\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-json-id-attr\": {\n+                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n+                                \"displayName\": \"Identifier Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-json-id-attr\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Type\": {\n+                            \"put-es-json-not_found-is-error\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Error Documents\",\n+                                        \"propertyName\": \"put-es-json-error-documents\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Enable compression at transport-level requests and responses\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated FlowFiles will be routed to the \\\"success\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Type\",\n+                                \"name\": \"put-es-json-not_found-is-error\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"put-es-json-script\": {\n+                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n+                                \"displayName\": \"Script\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-script\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-json-scripted-upsert\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-scripted-upsert\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-output-error-responses\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor supports the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to send over in a single batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n-                                \"required\": false,\n+                                \"name\": \"put-es-record-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"put-es-record-log-error-responses\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"put-es-record-log-error-responses\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\n-                            \"connect-timeout-ms\": {\n-                                \"description\": \"Connection timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n-                                \"displayName\": \"Connect Timout (ms)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connect-timeout-ms\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"read-timeout-ms\": {\n-                                \"description\": \"Read timeout (in milliseconds). 0 means no timeout. If no value is set, the underlying default will be used.\",\n-                                \"displayName\": \"Read Timout (ms)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"read-timeout-ms\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"If a \\\"Output Error Documents\\\" is set, any FlowFile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n                             }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"pooling\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\"\n                         ],\n-                        \"type\": \"org.apache.nifi.service.CassandraSessionProvider\",\n-                        \"typeDescription\": \"Provides connection session for Cassandra processors to work with Apache Cassandra.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n+                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n+                                \"name\": \"elasticsearch.put.error\"\n+                            },\n+                            {\n+                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"The value of the Bulk request header\"\n                             },\n                             {\n-                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"SENSITIVE.JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Connection URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Driver Class Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Total Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n+                            \"put-es-output-error-responses\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"success\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Validation-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-output-error-responses\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n+                            \"put-es-record-at-timestamp\": {\n+                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n+                                \"displayName\": \"@timestamp Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"database-driver-locations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n+                            \"put-es-record-at-timestamp-date-format\": {\n+                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"name\": \"put-es-record-at-timestamp-date-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n-                                \"displayName\": \"Max Idle Connections\",\n+                            \"put-es-record-at-timestamp-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n+                                \"displayName\": \"@timestamp Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                            \"put-es-record-at-timestamp-time-format\": {\n+                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"name\": \"put-es-record-at-timestamp-time-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            \"put-es-record-at-timestamp-timestamp-format\": {\n+                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to send over in a single batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The number of milliseconds to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n+                            \"put-es-record-dynamic-templates-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-dynamic-templates-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"put-es-record-error-writer\": {\n+                                \"description\": \"If this configuration property is set, the response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful_records\\\" relationship.\",\n+                                \"displayName\": \"Result Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"put-es-record-error-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"put-es-record-id-path\": {\n+                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n+                                \"displayName\": \"ID Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"put-es-record-index-op-path\": {\n+                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n+                                \"displayName\": \"Index Operation Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op-path\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register DBCPService\",\n-                                \"value\": \"The DBCPService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n-                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hikaricp-connection-url\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-connection-url\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-driver-classname\": {\n-                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n-                                \"displayName\": \"Database Driver Class Name\",\n+                            \"put-es-record-index-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n+                                \"displayName\": \"Index Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-driver-classname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n+                            \"put-es-record-log-error-responses\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-driver-locations\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-record-log-error-responses\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"put-es-record-not_found-is-error\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Result Record Writer\",\n+                                        \"propertyName\": \"put-es-record-error-writer\"\n+                                    }\n+                                ],\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful_records\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hikaricp-kerberos-user-service\",\n+                                \"name\": \"put-es-record-not_found-is-error\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-reader\": {\n+                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"hikaricp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n+                            \"put-es-record-retain-at-timestamp-field\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n+                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n+                                \"displayName\": \"Retain @timestamp (Record Path)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-conn-lifetime\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-max-total-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-total-conns\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-max-wait-time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-max-wait-time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-min-idle-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            \"put-es-record-retain-id-field\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"ID Record Path\",\n+                                        \"propertyName\": \"put-es-record-id-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n+                                \"displayName\": \"Retain ID (Record Path)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-min-idle-conns\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-id-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"put-es-record-script-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n+                                \"displayName\": \"Script Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-script-path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"hikaricp-username\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"put-es-record-scripted-upsert-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-scripted-upsert-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hikaricp-validation-query\": {\n-                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation Query\",\n+                            \"put-es-record-type-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n+                                \"displayName\": \"Type Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hikaricp-validation-query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that succeed in being transferred into Elasticsearch go here. Documents received by the Elasticsearch _bulk API may still result in errors on the Elasticsearch side. The Elasticsearch response will need to be examined to determine whether any Document(s)/Record(s) resulted in errors.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful_records\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"If a \\\"Result Record Writer\\\" is set, any Record(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hikari\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n+                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n+                                \"name\": \"elasticsearch.put.error\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.error.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.success.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"db-record-sink-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-catalog-name\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-dcbp-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"db-record-sink-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-record-sink-query-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-quoted-identifiers\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-format-aggregations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-quoted-table-identifiers\": {\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-output-no-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-table-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-translate-field-names\": {\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use Elasticsearch \\\"scroll\\\" to page results.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" to page sorted results.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-translate-field-names\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-unmatched-column-behavior\": {\n+                            \"el-rest-query\": {\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-unmatched-field-behavior\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n+                                \"name\": \"el-rest-split-up-hits\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"db\",\n-                            \"jdbc\",\n-                            \"record\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n-                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request) in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query\": {\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n+                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n+                                \"name\": \"elasticsearch.update.took\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n+                                \"name\": \"elasticsearch.update.error\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-datadog-nar\",\n+            \"artifact\": \"nifi-enrich-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Geo Database File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"IP Address Attribute\": {\n+                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n+                                \"displayName\": \"IP Address Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"IP Address Attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"maxmind\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.GeoEnrichIP\",\n+                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.geo.<fieldName>\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.geo.lookup.micros\"\n+                            },\n+                            {\n+                                \"description\": \"The city identified for the IP address\",\n+                                \"name\": \"X.geo.city\"\n+                            },\n+                            {\n+                                \"description\": \"The accuracy radius if provided by the database (in Kilometers)\",\n+                                \"name\": \"X.geo.accuracy\"\n+                            },\n+                            {\n+                                \"description\": \"The latitude identified for this IP address\",\n+                                \"name\": \"X.geo.latitude\"\n+                            },\n+                            {\n+                                \"description\": \"The longitude identified for this IP address\",\n+                                \"name\": \"X.geo.longitude\"\n+                            },\n+                            {\n+                                \"description\": \"Each subdivision that is identified for this IP address is added with a one-up number appended to the attribute name, starting with 0\",\n+                                \"name\": \"X.geo.subdivision.N\"\n+                            },\n+                            {\n+                                \"description\": \"The ISO code for the subdivision that is identified by X.geo.subdivision.N\",\n+                                \"name\": \"X.geo.subdivision.isocode.N\"\n+                            },\n+                            {\n+                                \"description\": \"The country identified for this IP address\",\n+                                \"name\": \"X.geo.country\"\n+                            },\n+                            {\n+                                \"description\": \"The ISO Code for the country identified\",\n+                                \"name\": \"X.geo.country.isocode\"\n+                            },\n+                            {\n+                                \"description\": \"The postal code for the country identified\",\n+                                \"name\": \"X.geo.postalcode\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-datadog-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"API key\": {\n-                                \"description\": \"Datadog API key. If specified value is 'agent', local Datadog agent will be used.\",\n-                                \"displayName\": \"API key\",\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Geo Database File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-city-record-path\": {\n+                                \"description\": \"Record path for putting the city identified for the IP address\",\n+                                \"displayName\": \"City Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-city-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-country-iso-record-path\": {\n+                                \"description\": \"Record path for putting the ISO Code for the country identified\",\n+                                \"displayName\": \"Country ISO Code Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-country-postal-record-path\": {\n+                                \"description\": \"Record path for putting the postal code for the country identified\",\n+                                \"displayName\": \"Country Postal Code Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-country-record-path\": {\n+                                \"description\": \"Record path for putting the country identified for this IP address\",\n+                                \"displayName\": \"Country Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-ip-record-path\": {\n+                                \"description\": \"The record path to retrieve the IP address for doing the lookup.\",\n+                                \"displayName\": \"IP Address Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-ip-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-latitude-record-path\": {\n+                                \"description\": \"Record path for putting the latitude identified for this IP address\",\n+                                \"displayName\": \"Latitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-latitude-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-longitude-record-path\": {\n+                                \"description\": \"Record path for putting the longitude identified for this IP address\",\n+                                \"displayName\": \"Longitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-longitude-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"geo-enrich-ip-record-reader\": {\n+                                \"description\": \"Record reader service to use for reading the flowfile contents.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"API key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"geo-enrich-ip-record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Datadog transport\": {\n+                            \"geo-enrich-ip-record-writer\": {\n+                                \"description\": \"Record writer service to use for enriching the flowfile contents.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"geo-enrich-ip-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"geo-enrich-ip-split-found-not-found\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Metrics will be sent via locally installed Datadog agent. Datadog agent needs to be installed manually before using this option\",\n-                                        \"displayName\": \"Datadog Agent\",\n-                                        \"value\": \"Datadog Agent\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Metrics will be sent via HTTP transport with no need of Agent installed. Datadog API key needs to be set\",\n-                                        \"displayName\": \"Datadog HTTP\",\n-                                        \"value\": \"Datadog HTTP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Datadog HTTP\",\n-                                \"description\": \"Transport through which metrics will be sent to Datadog\",\n-                                \"displayName\": \"Datadog transport\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Separate records that have been enriched from ones that have not. Default behavior is to send everything to the found relationship if even one record is enriched.\",\n+                                \"displayName\": \"Separate Enriched From Not Enriched\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Datadog transport\",\n+                                \"name\": \"geo-enrich-ip-split-found-not-found\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n                             },\n-                            \"Environment\": {\n-                                \"defaultValue\": \"dev\",\n-                                \"description\": \"Environment, dataflow is running in. This property will be included as metrics tag.\",\n-                                \"displayName\": \"Environment\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Environment\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The original input flowfile goes to this relationship regardless of whether the content was enriched or not.\",\n+                                \"name\": \"original\"\n                             },\n-                            \"Metrics prefix\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Prefix to be added before every metric\",\n-                                \"displayName\": \"Metrics prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Metrics prefix\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n                             }\n-                        },\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"datadog\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"maxmind\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.datadog.DataDogReportingTask\",\n-                        \"typeDescription\": \"Publishes metrics from NiFi to datadog. For accurate and informative reporting, components should have unique names.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.GeoEnrichIPRecord\",\n+                        \"typeDescription\": \"Looks up geolocation information for an IP address and adds the geo information to FlowFile attributes. The geo data is provided as a MaxMind database. This version uses the NiFi Record API to allow large scale enrichment of record-oriented data sets. Each field provided by the MaxMind database can be directed to a field of the user's choosing by providing a record path for that field configuration. \",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jslt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"jslt-transform-cache-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"jslt-transform-pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-pretty_print\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Geo Database File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation\": {\n-                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n-                                \"displayName\": \"JSLT Transformation\",\n+                            \"IP Address Attribute\": {\n+                                \"description\": \"The name of an attribute whose value is a dotted decimal IP address for which enrichment should occur\",\n+                                \"displayName\": \"IP Address Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jslt-transform-transformation\",\n+                                \"name\": \"IP Address Attribute\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n+                                \"name\": \"not found\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"jslt\",\n-                            \"json\",\n-                            \"transform\"\n+                            \"ISP\",\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"maxmind\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n-                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.ISPEnrichIP\",\n+                        \"typeDescription\": \"Looks up ISP information for an IP address and adds the information to FlowFile attributes. The ISP data is provided as a MaxMind ISP database. (Note that this is NOT the same as the GeoLite database utilized by some geo enrichment tools). The attribute that contains the IP address to lookup is provided by the 'IP Address Attribute' property. If the name of the attribute provided is 'X', then the the attributes added by enrichment will take the form X.isp.<fieldName>\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.isp.lookup.micros\"\n+                            },\n+                            {\n+                                \"description\": \"The Autonomous System Number (ASN) identified for the IP address\",\n+                                \"name\": \"X.isp.asn\"\n+                            },\n+                            {\n+                                \"description\": \"The Organization Associated with the ASN identified\",\n+                                \"name\": \"X.isp.asn.organization\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the ISP associated with the IP address provided\",\n+                                \"name\": \"X.isp.name\"\n+                            },\n+                            {\n+                                \"description\": \"The Organization associated with the IP address provided\",\n+                                \"name\": \"X.isp.organization\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"DNS_QUERY_TYPE\": {\n+                                \"defaultValue\": \"TXT\",\n+                                \"description\": \"The DNS query type to be used by the processor (e.g. TXT, A)\",\n+                                \"displayName\": \"DNS Query Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DNS_QUERY_TYPE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"DNS_RETRIES\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of attempts before giving up and moving on\",\n+                                \"displayName\": \"DNS Query Retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DNS_RETRIES\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"DNS_SERVER\": {\n+                                \"description\": \"A comma separated list of  DNS servers to be used. (Defaults to system wide if none is used)\",\n+                                \"displayName\": \"DNS Servers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DNS_SERVER\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"mongo-uri\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"DNS_TIMEOUT\": {\n+                                \"defaultValue\": \"1500 ms\",\n+                                \"description\": \"The amount of time to wait until considering a query as failed\",\n+                                \"displayName\": \"DNS Query Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"mongo-uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DNS_TIMEOUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"QUERY_INPUT\": {\n+                                \"description\": \"The value that should be used to populate the query\",\n+                                \"displayName\": \"Lookup value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"QUERY_INPUT\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"QUERY_PARSER\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"Split\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Use a regular expression to split the results into attributes \",\n+                                        \"displayName\": \"RegEx\",\n+                                        \"value\": \"RegEx\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Do not split results\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The method used to slice the results into attribute groups\",\n+                                \"displayName\": \"Results Parser\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"QUERY_PARSER\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"QUERY_PARSER_INPUT\": {\n+                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n+                                \"displayName\": \"Parser RegEx\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"QUERY_PARSER_INPUT\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"service\"\n+                            \"dns\",\n+                            \"enrich\",\n+                            \"ip\"\n                         ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.enrich.QueryDNS\",\n+                        \"typeDescription\": \"A powerful DNS query processor primary designed to enrich DataFlows with DNS based APIs (e.g. RBLs, ShadowServer's ASN lookup) but that can be also used to perform regular DNS lookups.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The captured fields of the DNS query response for each of the records received\",\n+                                \"name\": \"enrich.dns.record*.group*\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"mongo-collection-name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-collection-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-db-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"BATCH_SIZE\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor. \",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"mongo-db-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"BATCH_SIZE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-lookup-client-service\": {\n-                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"BULK_PROTOCOL\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The evaluated input of each flowfile is enclosed within begin and end tags. Each row contains a delimited set of fields\",\n+                                        \"displayName\": \"Begin/End\",\n+                                        \"value\": \"Begin/End\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Queries are made without any particular dialect\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The protocol used to perform the bulk query. \",\n+                                \"displayName\": \"Bulk Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-client-service\",\n+                                \"name\": \"BULK_PROTOCOL\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"mongo-lookup-projection\": {\n-                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n-                                \"displayName\": \"Projection\",\n+                            \"KEY_GROUP\": {\n+                                \"description\": \"When performing a batched lookup, the following RegEx numbered capture group or Column number will be used to match the whois server response with the lookup field\",\n+                                \"displayName\": \"Key lookup group (multiline / batch)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-projection\",\n+                                \"name\": \"KEY_GROUP\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-lookup-value-field\": {\n-                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n-                                \"displayName\": \"Lookup Value Field\",\n+                            \"QUERY_INPUT\": {\n+                                \"description\": \"The value that should be used to populate the query\",\n+                                \"displayName\": \"Lookup value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-value-field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"QUERY_INPUT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"QUERY_PARSER\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"Split\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"Use a regular expression to split the results into attributes \",\n+                                        \"displayName\": \"RegEx\",\n+                                        \"value\": \"RegEx\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"description\": \"Do not split results\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The method used to slice the results into attribute groups\",\n+                                \"displayName\": \"Results Parser\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"QUERY_PARSER\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"QUERY_PARSER_INPUT\": {\n+                                \"description\": \"Choice between a splitter and regex matcher used to parse the results of the query into attribute groups.\\nNOTE: This is a multiline regular expression, therefore, the DFM should decide how to handle trailing new line characters.\",\n+                                \"displayName\": \"Parser RegEx\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"QUERY_PARSER_INPUT\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"WHOIS_QUERY_TYPE\": {\n+                                \"description\": \"The Whois query type to be used by the processor (if used)\",\n+                                \"displayName\": \"Whois Query Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_QUERY_TYPE\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n-                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-windows-event-log-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-windows-event-log-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"channel\": {\n-                                \"defaultValue\": \"System\",\n-                                \"description\": \"The Windows Event Log Channel to listen to.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"inactiveDurationToReconnect\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n-                                \"displayName\": \"Inactive duration to reconnect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"inactiveDurationToReconnect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"maxBuffer\": {\n-                                \"defaultValue\": \"1048576\",\n-                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"WHOIS_SERVER\": {\n+                                \"description\": \"The Whois server to be used\",\n+                                \"displayName\": \"Whois Server\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxBuffer\",\n+                                \"name\": \"WHOIS_SERVER\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maxQueue\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n-                                \"displayName\": \"Maximum queue size\",\n+                            \"WHOIS_SERVER_PORT\": {\n+                                \"defaultValue\": \"43\",\n+                                \"description\": \"The TCP port of the remote Whois server\",\n+                                \"displayName\": \"Whois Server Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxQueue\",\n+                                \"name\": \"WHOIS_SERVER_PORT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"query\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n-                                \"displayName\": \"XPath Query\",\n+                            \"WHOIS_TIMEOUT\": {\n+                                \"defaultValue\": \"1500 ms\",\n+                                \"description\": \"The amount of time to wait until considering a query as failed\",\n+                                \"displayName\": \"Whois Query Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_TIMEOUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully consumed events.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Where to route flow files if data enrichment query rendered no results\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n+                                \"name\": \"found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"event\",\n-                            \"ingest\",\n-                            \"windows\"\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"whois\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n-                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n+                        \"type\": \"org.apache.nifi.processors.enrich.QueryWhois\",\n+                        \"typeDescription\": \"A powerful whois query processor primary designed to enrich DataFlows with whois based APIs (e.g. ShadowServer's ASN lookup) but that can be also used to perform regular whois lookups.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Will set a MIME type value of application/xml.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The captured fields of the Whois query response for each of the records received\",\n+                                \"name\": \"enrich.dns.record*.group*\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n+            \"artifact\": \"nifi-server-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n             \"artifact\": \"nifi-hbase-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n                         \"artifact\": \"nifi-hbase-nar\",\n@@ -67326,47 +64213,3292 @@\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in HBase\",\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in HBase\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to HBase\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"hadoop\",\n+                            \"hbase\",\n+                            \"json\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.hbase.PutHBaseJSON\",\n+                        \"typeDescription\": \"Adds rows to HBase based on the contents of incoming JSON documents. Each FlowFile must contain a single UTF-8 encoded JSON document, and any FlowFiles where the root element is not a single document will be routed to failure. Each JSON field name and value will become a column qualifier and value of the HBase row. Any fields with a null value will be skipped, and fields with a complex value will be handled according to the Complex Field Strategy. The row id can be specified either directly on the processor through the Row Identifier property, or can be extracted from the JSON document by specifying the Row Identifier Field Name property. This processor will hold the contents of all FlowFiles for the given batch in memory at one time.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Visibility label for everything under that column family when a specific label for a particular column qualifier is not available.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"visibility.<COLUMN FAMILY>\",\n+                                \"value\": \"visibility label for <COLUMN FAMILY>\"\n+                            },\n+                            {\n+                                \"description\": \"Visibility label for the specified column qualifier qualified by a configured column family.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"visibility.<COLUMN FAMILY>.<COLUMN QUALIFIER>\",\n+                                \"value\": \"visibility label for <COLUMN FAMILY>:<COLUMN QUALIFIER>.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of records to be sent to HBase at any one time from the record set.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Column Family\": {\n+                                \"description\": \"The Column Family to use when inserting data into HBase\",\n+                                \"displayName\": \"Column Family\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Column Family\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Complex Field Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Route entire FlowFile to failure if any elements contain complex values.\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide a warning and do not include field in row sent to HBase.\",\n+                                        \"displayName\": \"Warn\",\n+                                        \"value\": \"Warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Silently ignore and do not include in row sent to HBase.\",\n+                                        \"displayName\": \"Ignore\",\n+                                        \"value\": \"Ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use the string representation of the complex field as the value of the given column.\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Text\",\n+                                \"description\": \"Indicates how to handle complex fields, i.e. fields that do not have a single text value.\",\n+                                \"displayName\": \"Complex Field Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Complex Field Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Field Encoding Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Stores the value of each field as a UTF-8 String.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"String\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Stores the value of each field as the byte representation of the type derived from the record.\",\n+                                        \"displayName\": \"Bytes\",\n+                                        \"value\": \"Bytes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"String\",\n+                                \"description\": \"Indicates how to store the value of each field in HBase. The default behavior is to convert each value from the record to a String, and store the UTF-8 bytes. Choosing Bytes will interpret the type of each field from the record, and convert the value to the byte representation of that type, meaning an integer will be stored as the byte representation of that integer.\",\n+                                \"displayName\": \"Field Encoding Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Field Encoding Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HBase Client Service\": {\n+                                \"description\": \"Specifies the Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HBase Client Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Row Identifier Encoding Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Stores the value of row id as a UTF-8 String.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"String\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Stores the value of the rows id as a binary byte array. It expects that the row id is a binary formatted string.\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"String\",\n+                                \"description\": \"Specifies the data type of Row ID used when inserting data into HBase. The default behavior is to convert the row id to a UTF-8 byte array. Choosing Binary will convert a binary formatted string to the correct byte[] representation. The Binary option should be used if you are using Binary row keys in HBase\",\n+                                \"displayName\": \"Row Identifier Encoding Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Row Identifier Encoding Strategy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Row Identifier Field Name\": {\n+                                \"description\": \"Specifies the name of a record field whose value should be used as the row id for the given record.\",\n+                                \"displayName\": \"Row Identifier Field Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Row Identifier Field Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the HBase Table to put data into\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hbase-default-vis-string\": {\n+                                \"description\": \"When using visibility labels, any value set in this field will be applied to all cells that are written unless an attribute with the convention \\\"visibility.COLUMN_FAMILY.COLUMN_QUALIFIER\\\" is present on the flowfile. If this field is left blank, it will be assumed that no visibility is to be set unless visibility-related attributes are set. NOTE: this configuration will have no effect on your data if you have not enabled visibility labels in the HBase cluster.\",\n+                                \"displayName\": \"Default Visibility String\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"hbase-default-vis-string\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hbase-record-null-field-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use empty bytes. This can be used to overwrite existing fields or to put an empty placeholder value if you want every field to be present even if it has a null value.\",\n+                                        \"displayName\": \"Empty Bytes\",\n+                                        \"value\": \"empty-bytes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skip the field (don't process it at all).\",\n+                                        \"displayName\": \"Skip Field\",\n+                                        \"value\": \"skip-field\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"skip-field\",\n+                                \"description\": \"Handle null field values as either an empty string or skip them altogether.\",\n+                                \"displayName\": \"Null Field Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hbase-record-null-field-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-hb-rec-visibility-record-path\": {\n+                                \"description\": \"A record path that points to part of the record which contains a path to a mapping of visibility strings to record paths\",\n+                                \"displayName\": \"Visibility String Record Path Root\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-hb-rec-visibility-record-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"timestamp-field-name\": {\n+                                \"description\": \"Specifies the name of a record field whose value should be used as the timestamp for the cells in HBase. The value of this field must be a number, string, or date that can be converted to a long. If this field is left blank, HBase will use the current time.\",\n+                                \"displayName\": \"Timestamp Field Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"timestamp-field-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Reads restart.index when it needs to replay part of a record set that did not get into HBase.\",\n+                                \"name\": \"restart.index\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in HBase\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to HBase\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"hadoop\",\n+                            \"hbase\",\n+                            \"put\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.hbase.PutHBaseRecord\",\n+                        \"typeDescription\": \"Adds rows to HBase based on the contents of a flowfile using a configured record reader.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Writes restart.index when a batch fails to be insert into HBase\",\n+                                \"name\": \"restart.index\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"block-cache\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The Block Cache to enable/disable block cache on HBase scan.\",\n+                                \"displayName\": \"Block Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"block-cache\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hbase-fetch-row-authorizations\": {\n+                                \"description\": \"The list of authorizations to pass to the scanner. This will be ignored if cell visibility labels are not in use.\",\n+                                \"displayName\": \"Authorizations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"hbase-fetch-row-authorizations\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-bulk-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Limits number of rows in single flow file content. Set to 0 to avoid multiple flow files.\",\n+                                \"displayName\": \"Max rows per flow file\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-bulk-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-client-service\": {\n+                                \"description\": \"Specifies the Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scanhbase-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"scanhbase-columns\": {\n+                                \"description\": \"An optional comma-separated list of \\\"<colFamily>:<colQualifier>\\\" pairs to fetch. To return all columns for a given family, leave off the qualifier such as \\\"<colFamily1>,<colFamily2>\\\".\",\n+                                \"displayName\": \"Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-decode-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set used to decode data from HBase.\",\n+                                \"displayName\": \"Decode Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scanhbase-decode-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-encode-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set used to encode the JSON representation of the row.\",\n+                                \"displayName\": \"Encode Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scanhbase-encode-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-end-rowkey\": {\n+                                \"description\": \"The row key to end scan by.\",\n+                                \"displayName\": \"End rowkey\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-end-rowkey\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-filter-expression\": {\n+                                \"description\": \"An HBase filter expression that will be applied to the scan. This property can not be used when also using the Columns property. Example: \\\"ValueFilter( =, 'binaryprefix:commit' )\\\"\",\n+                                \"displayName\": \"Filter expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-filter-expression\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-json-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Creates a JSON document with the format: {\\\"row\\\":<row-id>, \\\"cells\\\":[{\\\"fam\\\":<col-fam>, \\\"qual\\\":<col-val>, \\\"val\\\":<value>, \\\"ts\\\":<timestamp>}]}.\",\n+                                        \"displayName\": \"full-row\",\n+                                        \"value\": \"full-row\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Creates a JSON document with the format: {\\\"<col-qual>\\\":\\\"<value>\\\", \\\"<col-qual>\\\":\\\"<value>\\\".\",\n+                                        \"displayName\": \"col-qual-and-val\",\n+                                        \"value\": \"col-qual-and-val\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full-row\",\n+                                \"description\": \"Specifies how to represent the HBase row as a JSON document.\",\n+                                \"displayName\": \"JSON Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scanhbase-json-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-limit\": {\n+                                \"description\": \"Limit number of rows retrieved by scan.\",\n+                                \"displayName\": \"Limit rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-reversed-order\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Set whether this scan is a reversed one. This is false by default which means forward(normal) scan.\",\n+                                \"displayName\": \"Reversed order\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scanhbase-reversed-order\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-start-rowkey\": {\n+                                \"description\": \"The rowkey to start scan from.\",\n+                                \"displayName\": \"Start rowkey\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-start-rowkey\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-table-name\": {\n+                                \"description\": \"The name of the HBase Table to fetch from.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-time-range-max\": {\n+                                \"description\": \"Time range max value. Both min and max values for time range should be either blank or provided.\",\n+                                \"displayName\": \"Time range max\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-time-range-max\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"scanhbase-time-range-min\": {\n+                                \"description\": \"Time range min value. Both min and max values for time range should be either blank or provided.\",\n+                                \"displayName\": \"Time range min\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"scanhbase-time-range-min\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successful fetches are routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All failed fetches are routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input file will be routed to this destination, even if no rows are retrieved based on provided conditions.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hbase\",\n+                            \"scan\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.hbase.ScanHBase\",\n+                        \"typeDescription\": \"Scans and fetches rows from an HBase table. This processor may be used to fetch rows from hbase table by specifying a range of rowkey values (start and/or end ),by time range, by filter expression, or any combination of them. Order of records can be controlled by a property ReversedNumber of rows retrieved by the processor can be limited.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the HBase table that the row was fetched from\",\n+                                \"name\": \"hbase.table\"\n+                            },\n+                            {\n+                                \"description\": \"Set to application/json when using a Destination of flowfile-content, not set or modified otherwise\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Number of rows in the content of given flow file\",\n+                                \"name\": \"hbase.rows.count\"\n+                            },\n+                            {\n+                                \"description\": \"Indicates whether at least one row has been found in given hbase table with provided conditions. Could be null (not present) if transfered to FAILURE\",\n+                                \"name\": \"scanhbase.results.found\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cipher-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"cipher-algorithm-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Cipher Blocking Chaining Mode\",\n+                                        \"displayName\": \"CBC\",\n+                                        \"value\": \"CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Counter Mode\",\n+                                        \"displayName\": \"CTR\",\n+                                        \"value\": \"CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n+                                        \"displayName\": \"GCM\",\n+                                        \"value\": \"GCM\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GCM\",\n+                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cipher-algorithm-mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cipher-algorithm-padding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"NoPadding\",\n+                                        \"displayName\": \"NoPadding\",\n+                                        \"value\": \"NoPadding\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5Padding\",\n+                                        \"displayName\": \"PKCS5Padding\",\n+                                        \"value\": \"PKCS5Padding\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NoPadding\",\n+                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Padding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cipher-algorithm-padding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-specification\": {\n+                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n+                                \"displayName\": \"Key Specification\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"key-specification-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n+                                        \"displayName\": \"PASSWORD\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PASSWORD\",\n+                                \"description\": \"Format describing the configured Key Specification\",\n+                                \"displayName\": \"Key Specification Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"AES\",\n+                            \"Argon2\",\n+                            \"PBKDF2\",\n+                            \"bcrypt\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\",\n+                            \"scrypt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n+                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"encryption-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n+                                        \"value\": \"PBEWITHMD5ANDDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n+                                        \"value\": \"PBEWITHMD5ANDRC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n+                                        \"value\": \"PBEWITHSHA1ANDDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n+                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n+                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n+                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n+                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n+                                \"displayName\": \"Encryption Scheme\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"encryption-scheme\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-derivation-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n+                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n+                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n+                                        \"displayName\": \"JASYPT_STANDARD\",\n+                                        \"value\": \"JASYPT_STANDARD\"\n+                                    }\n+                                ],\n+                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n+                                \"displayName\": \"Key Derivation Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-derivation-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"password\": {\n+                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"Jasypt\",\n+                            \"OpenSSL\",\n+                            \"PBES1\",\n+                            \"PKCS5\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n+                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Password-Based Encryption Scheme\",\n+                                \"name\": \"pbe.scheme\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Block Cipher\",\n+                                \"name\": \"pbe.symmetric.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n+                                \"name\": \"pbe.digest.algorithm\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"mac-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA256\",\n+                                        \"value\": \"HmacSHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA512\",\n+                                        \"value\": \"HmacSHA512\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hashed Message Authentication Code Function\",\n+                                \"displayName\": \"Message Authentication Code Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mac-algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-authentication-code\": {\n+                                \"description\": \"The MAC to compare with the calculated value\",\n+                                \"displayName\": \"Message Authentication Code\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"message-authentication-code\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-authentication-code-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Message Authentication Code\",\n+                                \"displayName\": \"Message Authentication Code Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-authentication-code-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"secret-key\": {\n+                                \"description\": \"Secret key to calculate the hash\",\n+                                \"displayName\": \"Secret Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"secret-key-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF8\",\n+                                        \"value\": \"UTF8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Secret Key\",\n+                                \"displayName\": \"Secret Key Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-key-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Signature Verification Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Verification Failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"HMAC\",\n+                            \"MAC\",\n+                            \"Signing\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n+                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n+                                \"name\": \"mac.calculated\"\n+                            },\n+                            {\n+                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n+                                \"name\": \"mac.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n+                                \"name\": \"mac.algorithm\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-amqp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"AMQP Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0.9.1\",\n+                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n+                                \"displayName\": \"AMQP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AMQP Version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Brokers\": {\n+                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n+                                \"displayName\": \"Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Brokers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Name\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Host Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Host Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"5672\",\n+                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue\": {\n+                                \"description\": \"The name of the existing AMQP Queue from which messages will be consumed. Usually pre-defined by AMQP administrator. \",\n+                                \"displayName\": \"Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"User Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Virtual Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.acknowledge\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \" If false (Non-Auto-Acknowledge), the messages will be acknowledged by the processor after transferring the FlowFiles to success and committing the NiFi session. Non-Auto-Acknowledge mode provides 'at-least-once' delivery semantics. If true (Auto-Acknowledge), messages that are delivered to the AMQP Client will be auto-acknowledged by the AMQP Broker just after sending them out. This generally will provide better throughput but will also result in messages being lost upon restart/crash of the AMQP Broker, NiFi or the processor. Auto-Acknowledge mode provides 'at-most-once' delivery semantics and it is recommended only if loosing messages is acceptable.\",\n+                                \"displayName\": \"Auto-Acknowledge Messages\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"auto.acknowledge\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"batch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of messages that should be processed in a single session. Once this many messages have been received (or once no more messages are readily available), the messages received will be transferred to the 'success' relationship and the messages will be acknowledged to the AMQP Broker. Setting this value to a larger number could result in better performance, particularly for very small messages, but can also result in more messages being duplicated upon sudden restart of NiFi.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cert-authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n+                                \"displayName\": \"Use Client Certificate Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cert-authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"header.separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"The character that is used to separate key-value for header in String. The value must only one character.Otherwise you will get an error message\",\n+                                \"displayName\": \"Header Separator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header.separator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"remove.curly.braces\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"If true Remove Curly Braces, Curly Braces in the header will be automatically remove.\",\n+                                \"displayName\": \"Remove Curly Braces\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"remove.curly.braces\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"The property has no effect and therefore deprecated.\",\n+                                \"displayName\": \"Client Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received from the AMQP queue are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"amqp\",\n+                            \"consume\",\n+                            \"get\",\n+                            \"message\",\n+                            \"rabbit\",\n+                            \"receive\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.amqp.processors.ConsumeAMQP\",\n+                        \"typeDescription\": \"Consumes AMQP Messages from an AMQP Broker using the AMQP 0.9.1 protocol. Each message that is received from the AMQP Broker will be emitted as its own FlowFile to the 'success' relationship.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The App ID field from the AMQP Message\",\n+                                \"name\": \"amqp$appId\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Encoding reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentEncoding\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Type reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentType\"\n+                            },\n+                            {\n+                                \"description\": \"The headers present on the AMQP Message\",\n+                                \"name\": \"amqp$headers\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n+                                \"name\": \"amqp$deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"The Message priority\",\n+                                \"name\": \"amqp$priority\"\n+                            },\n+                            {\n+                                \"description\": \"The Message's Correlation ID\",\n+                                \"name\": \"amqp$correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message's Reply-To field\",\n+                                \"name\": \"amqp$replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"The Message Expiration\",\n+                                \"name\": \"amqp$expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The unique ID of the Message\",\n+                                \"name\": \"amqp$messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n+                                \"name\": \"amqp$timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The type of message\",\n+                                \"name\": \"amqp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the user\",\n+                                \"name\": \"amqp$userId\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the AMQP Cluster\",\n+                                \"name\": \"amqp$clusterId\"\n+                            },\n+                            {\n+                                \"description\": \"The routingKey of the AMQP Message\",\n+                                \"name\": \"amqp$routingKey\"\n+                            },\n+                            {\n+                                \"description\": \"The exchange from which AMQP Message was received\",\n+                                \"name\": \"amqp$exchange\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"AMQP Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0.9.1\",\n+                                \"description\": \"AMQP Version. Currently only supports AMQP v0.9.1.\",\n+                                \"displayName\": \"AMQP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AMQP Version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Brokers\": {\n+                                \"description\": \"A comma-separated list of known AMQP Brokers in the format <host>:<port> (e.g., localhost:5672). If this is set, Host Name and Port are ignored. Only include hosts from the same AMQP cluster.\",\n+                                \"displayName\": \"Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Brokers\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Exchange Name\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The name of the AMQP Exchange the messages will be sent to. Usually provided by the AMQP administrator (e.g., 'amq.direct'). It is an optional property. If kept empty the messages will be sent to a default AMQP exchange.\",\n+                                \"displayName\": \"Exchange Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Exchange Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Name\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Network address of AMQP broker (e.g., localhost). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Host Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Host Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"5672\",\n+                                \"description\": \"Numeric value identifying Port of AMQP broker (e.g., 5671). If Brokers is set, then this property is ignored.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Routing Key\": {\n+                                \"description\": \"The name of the Routing Key that will be used by AMQP to route messages from the exchange to a destination queue(s). Usually provided by the administrator (e.g., 'myKey')In the event when messages are sent to a default exchange this property corresponds to a destination queue name, otherwise a binding from the Exchange to a Queue via Routing Key must be set (usually by the AMQP administrator)\",\n+                                \"displayName\": \"Routing Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Routing Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"User Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Virtual Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cert-authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n+                                \"displayName\": \"Use Client Certificate Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cert-authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"header.separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"The character that is used to split key-value for headers. The value must only one character. Otherwise you will get an error message\",\n+                                \"displayName\": \"Header Separator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header.separator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"The property has no effect and therefore deprecated.\",\n+                                \"displayName\": \"Client Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The App ID field to set on the AMQP Message\",\n+                                \"name\": \"amqp$appId\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Encoding to set on the AMQP Message\",\n+                                \"name\": \"amqp$contentEncoding\"\n+                            },\n+                            {\n+                                \"description\": \"The Content Type to set on the AMQP Message\",\n+                                \"name\": \"amqp$contentType\"\n+                            },\n+                            {\n+                                \"description\": \"The headers to set on the AMQP Message\",\n+                                \"name\": \"amqp$headers\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n+                                \"name\": \"amqp$deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"The Message priority\",\n+                                \"name\": \"amqp$priority\"\n+                            },\n+                            {\n+                                \"description\": \"The Message's Correlation ID\",\n+                                \"name\": \"amqp$correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message's Reply-To field\",\n+                                \"name\": \"amqp$replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"The Message Expiration\",\n+                                \"name\": \"amqp$expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The unique ID of the Message\",\n+                                \"name\": \"amqp$messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Message, as the number of milliseconds since epoch\",\n+                                \"name\": \"amqp$timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The type of message\",\n+                                \"name\": \"amqp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the user\",\n+                                \"name\": \"amqp$userId\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the AMQP Cluster\",\n+                                \"name\": \"amqp$clusterId\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are sent to the AMQP destination are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be routed to the AMQP destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"amqp\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"rabbit\",\n+                            \"send\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.amqp.processors.PublishAMQP\",\n+                        \"typeDescription\": \"Creates an AMQP Message from the contents of a FlowFile and sends the message to an AMQP Exchange. In a typical AMQP exchange model, the message that is sent to the AMQP Exchange will be routed based on the 'Routing Key' to its final destination in the queue (the binding). If due to some misconfiguration the binding between the Exchange, Routing Key and Queue is not set up, the message will have no final destination and will return (i.e., the data will not make it to the queue). If that happens you will see a log in both app-log and bulletin stating to that effect, and the FlowFile will be routed to the 'failure' relationship.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mqtt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Broker URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Group ID\": {\n+                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n+                                \"displayName\": \"Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Group ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will QoS Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will QoS Level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Retain\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Retain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Topic\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"MQTT Specification Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"MQTT Specification Version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Queue Size\": {\n+                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n+                                \"displayName\": \"Max Queue Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Queue Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Quality of Service(QoS)\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Quality of Service(QoS)\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"false\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    }\n+                                ],\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Session state\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session state\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Topic Filter\": {\n+                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n+                                \"displayName\": \"Topic Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Topic Filter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"add-attributes-as-fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n+                                \"displayName\": \"Add attributes as fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"add-attributes-as-fields\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n+                            },\n+                            {\n+                                \"description\": \"The MQTT message output\",\n+                                \"name\": \"Message\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n+                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"MQTT broker that was the message source\",\n+                                \"name\": \"mqtt.broker\"\n+                            },\n+                            {\n+                                \"description\": \"MQTT topic on which message was received\",\n+                                \"name\": \"mqtt.topic\"\n+                            },\n+                            {\n+                                \"description\": \"The quality of service for this message.\",\n+                                \"name\": \"mqtt.qos\"\n+                            },\n+                            {\n+                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n+                                \"name\": \"mqtt.isDuplicate\"\n+                            },\n+                            {\n+                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n+                                \"name\": \"mqtt.isRetained\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Broker URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will QoS Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will QoS Level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Retain\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Retain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Will Topic\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n+                                    }\n+                                ],\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"MQTT Specification Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"MQTT Specification Version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Quality of Service(QoS)\": {\n+                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Quality of Service(QoS)\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Retain Message\": {\n+                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n+                                \"displayName\": \"Retain Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Retain Message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"false\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    }\n+                                ],\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Session state\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session state\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Topic\": {\n+                                \"description\": \"The topic to publish the message to.\",\n+                                \"displayName\": \"Topic\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"publish\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n+                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"box-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"box-file-id\": {\n+                                \"defaultValue\": \"${box.id}\",\n+                                \"description\": \"The ID of the File to fetch\",\n+                                \"displayName\": \"File ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"box-file-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.ListBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"fetch\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"box-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files.\",\n+                                \"displayName\": \"Folder ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"box-folder-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"recursive-search\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n+                                \"displayName\": \"Search Recursively\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"recursive-search\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n+                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"box-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"box-folder-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-folder\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Subfolder Name\",\n+                                        \"propertyName\": \"subfolder-name\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n+                                \"displayName\": \"Create Subfolder\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"create-folder\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n+                                \"displayName\": \"Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"subfolder-name\": {\n+                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n+                                \"displayName\": \"Subfolder Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"subfolder-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.ListBoxFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to HBase\",\n+                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"hadoop\",\n-                            \"hbase\",\n-                            \"json\",\n-                            \"put\"\n+                            \"box\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.hbase.PutHBaseJSON\",\n-                        \"typeDescription\": \"Adds rows to HBase based on the contents of incoming JSON documents. Each FlowFile must contain a single UTF-8 encoded JSON document, and any FlowFiles where the root element is not a single document will be routed to failure. Each JSON field name and value will become a column qualifier and value of the HBase row. Any fields with a null value will be skipped, and fields with a complex value will be handled according to the Complex Field Strategy. The row id can be specified either directly on the processor through the Row Identifier property, or can be extracted from the JSON document by specifying the Row Identifier Field Name property. This processor will hold the contents of all FlowFiles for the given batch in memory at one time.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n+                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n+                        \"typeDescription\": \"Puts content to a Box folder.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hbase-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -67375,286 +67507,259 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Visibility label for everything under that column family when a specific label for a particular column qualifier is not available.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"visibility.<COLUMN FAMILY>\",\n-                                \"value\": \"visibility label for <COLUMN FAMILY>\"\n-                            },\n-                            {\n-                                \"description\": \"Visibility label for the specified column qualifier qualified by a configured column family.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"visibility.<COLUMN FAMILY>.<COLUMN QUALIFIER>\",\n-                                \"value\": \"visibility label for <COLUMN FAMILY>:<COLUMN QUALIFIER>.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of records to be sent to HBase at any one time from the record set.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Column Family\": {\n-                                \"description\": \"The Column Family to use when inserting data into HBase\",\n-                                \"displayName\": \"Column Family\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Column Family\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Complex Field Strategy\": {\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Route entire FlowFile to failure if any elements contain complex values.\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Provide a warning and do not include field in row sent to HBase.\",\n-                                        \"displayName\": \"Warn\",\n-                                        \"value\": \"Warn\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Silently ignore and do not include in row sent to HBase.\",\n-                                        \"displayName\": \"Ignore\",\n-                                        \"value\": \"Ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n-                                        \"description\": \"Use the string representation of the complex field as the value of the given column.\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Indicates how to handle complex fields, i.e. fields that do not have a single text value.\",\n-                                \"displayName\": \"Complex Field Strategy\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Complex Field Strategy\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Field Encoding Strategy\": {\n+                            \"delete-mongo-delete-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Stores the value of each field as a UTF-8 String.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"String\"\n+                                        \"description\": \"Delete only the first document that matches the query.\",\n+                                        \"displayName\": \"Delete One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"Stores the value of each field as the byte representation of the type derived from the record.\",\n-                                        \"displayName\": \"Bytes\",\n-                                        \"value\": \"Bytes\"\n+                                        \"description\": \"Delete every document that matches the query.\",\n+                                        \"displayName\": \"Delete Many\",\n+                                        \"value\": \"many\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n+                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n+                                        \"value\": \"attr\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"String\",\n-                                \"description\": \"Indicates how to store the value of each field in HBase. The default behavior is to convert each value from the record to a String, and store the UTF-8 bytes. Choosing Bytes will interpret the type of each field from the record, and convert the value to the byte representation of that type, meaning an integer will be stored as the byte representation of that integer.\",\n-                                \"displayName\": \"Field Encoding Strategy\",\n+                                \"defaultValue\": \"one\",\n+                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n+                                \"displayName\": \"Delete Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Field Encoding Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"delete-mongo-delete-mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"HBase Client Service\": {\n-                                \"description\": \"Specifies the Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HBase Client Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Row Identifier Encoding Strategy\": {\n+                            \"delete-mongo-fail-on-no-delete\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Stores the value of row id as a UTF-8 String.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"String\"\n+                                        \"description\": \"Fail when no documents are deleted.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Stores the value of the rows id as a binary byte array. It expects that the row id is a binary formatted string.\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Do not fail when nothing is deleted.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"String\",\n-                                \"description\": \"Specifies the data type of Row ID used when inserting data into HBase. The default behavior is to convert the row id to a UTF-8 byte array. Choosing Binary will convert a binary formatted string to the correct byte[] representation. The Binary option should be used if you are using Binary row keys in HBase\",\n-                                \"displayName\": \"Row Identifier Encoding Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n+                                \"displayName\": \"Fail When Nothing Is Deleted\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Row Identifier Encoding Strategy\",\n+                                \"name\": \"delete-mongo-fail-on-no-delete\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Row Identifier Field Name\": {\n-                                \"description\": \"Specifies the name of a record field whose value should be used as the row id for the given record.\",\n-                                \"displayName\": \"Row Identifier Field Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Row Identifier Field Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the HBase Table to put data into\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hbase-default-vis-string\": {\n-                                \"description\": \"When using visibility labels, any value set in this field will be applied to all cells that are written unless an attribute with the convention \\\"visibility.COLUMN_FAMILY.COLUMN_QUALIFIER\\\" is present on the flowfile. If this field is left blank, it will be assumed that no visibility is to be set unless visibility-related attributes are set. NOTE: this configuration will have no effect on your data if you have not enabled visibility labels in the HBase cluster.\",\n-                                \"displayName\": \"Default Visibility String\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"hbase-default-vis-string\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"hbase-record-null-field-strategy\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use empty bytes. This can be used to overwrite existing fields or to put an empty placeholder value if you want every field to be present even if it has a null value.\",\n-                                        \"displayName\": \"Empty Bytes\",\n-                                        \"value\": \"empty-bytes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Skip the field (don't process it at all).\",\n-                                        \"displayName\": \"Skip Field\",\n-                                        \"value\": \"skip-field\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"skip-field\",\n-                                \"description\": \"Handle null field values as either an empty string or skip them altogether.\",\n-                                \"displayName\": \"Null Field Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hbase-record-null-field-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-hb-rec-visibility-record-path\": {\n-                                \"description\": \"A record path that points to part of the record which contains a path to a mapping of visibility strings to record paths\",\n-                                \"displayName\": \"Visibility String Record Path Root\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-hb-rec-visibility-record-path\",\n+                                \"name\": \"ssl-client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"timestamp-field-name\": {\n-                                \"description\": \"Specifies the name of a record field whose value should be used as the timestamp for the cells in HBase. The value of this field must be a number, string, or date that can be converted to a long. If this field is left blank, HBase will use the current time.\",\n-                                \"displayName\": \"Timestamp Field Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"timestamp-field-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Reads restart.index when it needs to replay part of a record set that did not get into HBase.\",\n-                                \"name\": \"restart.index\"\n+                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n+                                \"name\": \"mongodb.delete.mode\"\n                             }\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after it has been successfully stored in HBase\",\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be sent to HBase\",\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"hadoop\",\n-                            \"hbase\",\n-                            \"put\",\n-                            \"record\"\n+                            \"delete\",\n+                            \"mongo\",\n+                            \"mongodb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.hbase.PutHBaseRecord\",\n-                        \"typeDescription\": \"Adds rows to HBase based on the contents of a flowfile using a configured record reader.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Writes restart.index when a batch fails to be insert into HBase\",\n-                                \"name\": \"restart.index\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n+                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hbase-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67663,304 +67768,317 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"block-cache\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The Block Cache to enable/disable block cache on HBase scan.\",\n-                                \"displayName\": \"Block Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"block-cache\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hbase-fetch-row-authorizations\": {\n-                                \"description\": \"The list of authorizations to pass to the scanner. This will be ignored if cell visibility labels are not in use.\",\n-                                \"displayName\": \"Authorizations\",\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"hbase-fetch-row-authorizations\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-bulk-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Limits number of rows in single flow file content. Set to 0 to avoid multiple flow files.\",\n-                                \"displayName\": \"Max rows per flow file\",\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-bulk-size\",\n+                                \"name\": \"Limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-client-service\": {\n-                                \"description\": \"Specifies the Controller Service to use for accessing HBase.\",\n-                                \"displayName\": \"HBase Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scanhbase-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"scanhbase-columns\": {\n-                                \"description\": \"An optional comma-separated list of \\\"<colFamily>:<colQualifier>\\\" pairs to fetch. To return all columns for a given family, leave off the qualifier such as \\\"<colFamily1>,<colFamily2>\\\".\",\n-                                \"displayName\": \"Columns\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-columns\",\n-                                \"required\": false,\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-decode-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set used to decode data from HBase.\",\n-                                \"displayName\": \"Decode Character Set\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scanhbase-decode-charset\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-encode-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set used to encode the JSON representation of the row.\",\n-                                \"displayName\": \"Encode Character Set\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scanhbase-encode-charset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-end-rowkey\": {\n-                                \"description\": \"The row key to end scan by.\",\n-                                \"displayName\": \"End rowkey\",\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-end-rowkey\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-filter-expression\": {\n-                                \"description\": \"An HBase filter expression that will be applied to the scan. This property can not be used when also using the Columns property. Example: \\\"ValueFilter( =, 'binaryprefix:commit' )\\\"\",\n-                                \"displayName\": \"Filter expression\",\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-filter-expression\",\n+                                \"name\": \"Query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-json-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Creates a JSON document with the format: {\\\"row\\\":<row-id>, \\\"cells\\\":[{\\\"fam\\\":<col-fam>, \\\"qual\\\":<col-val>, \\\"val\\\":<value>, \\\"ts\\\":<timestamp>}]}.\",\n-                                        \"displayName\": \"full-row\",\n-                                        \"value\": \"full-row\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates a JSON document with the format: {\\\"<col-qual>\\\":\\\"<value>\\\", \\\"<col-qual>\\\":\\\"<value>\\\".\",\n-                                        \"displayName\": \"col-qual-and-val\",\n-                                        \"value\": \"col-qual-and-val\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"full-row\",\n-                                \"description\": \"Specifies how to represent the HBase row as a JSON document.\",\n-                                \"displayName\": \"JSON Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scanhbase-json-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"scanhbase-limit\": {\n-                                \"description\": \"Limit number of rows retrieved by scan.\",\n-                                \"displayName\": \"Limit rows\",\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-limit\",\n+                                \"name\": \"Sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-reversed-order\": {\n+                            \"get-mongo-send-empty\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Set whether this scan is a reversed one. This is false by default which means forward(normal) scan.\",\n-                                \"displayName\": \"Reversed order\",\n+                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n+                                \"displayName\": \"Send Empty Result\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scanhbase-reversed-order\",\n+                                \"name\": \"get-mongo-send-empty\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-start-rowkey\": {\n-                                \"description\": \"The rowkey to start scan from.\",\n-                                \"displayName\": \"Start rowkey\",\n+                            \"json-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"json-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-start-rowkey\",\n-                                \"required\": false,\n+                                \"name\": \"mongo-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-table-name\": {\n-                                \"description\": \"The name of the HBase Table to fetch from.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-table-name\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-time-range-max\": {\n-                                \"description\": \"Time range max value. Both min and max values for time range should be either blank or provided.\",\n-                                \"displayName\": \"Time range max\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-time-range-max\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"scanhbase-time-range-min\": {\n-                                \"description\": \"Time range min value. Both min and max values for time range should be either blank or provided.\",\n-                                \"displayName\": \"Time range min\",\n+                            \"results-per-flowfile\": {\n+                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"scanhbase-time-range-min\",\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"use-pretty-printing\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n+                                \"displayName\": \"Pretty Print Results JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-pretty-printing\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful fetches are routed to this relationship.\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All failed fetches are routed to this relationship.\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original input file will be routed to this destination, even if no rows are retrieved based on provided conditions.\",\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"fetch\",\n                             \"get\",\n-                            \"hbase\",\n-                            \"scan\"\n+                            \"mongodb\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.hbase.ScanHBase\",\n-                        \"typeDescription\": \"Scans and fetches rows from an HBase table. This processor may be used to fetch rows from hbase table by specifying a range of rowkey values (start and/or end ),by time range, by filter expression, or any combination of them. Order of records can be controlled by a property ReversedNumber of rows retrieved by the processor can be limited.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n+                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the HBase table that the row was fetched from\",\n-                                \"name\": \"hbase.table\"\n-                            },\n-                            {\n-                                \"description\": \"Set to application/json when using a Destination of flowfile-content, not set or modified otherwise\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Number of rows in the content of given flow file\",\n-                                \"name\": \"hbase.rows.count\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n                             },\n                             {\n-                                \"description\": \"Indicates whether at least one row has been found in given hbase table with provided conditions. Could be null (not present) if transfered to FAILURE\",\n-                                \"name\": \"scanhbase.results.found\"\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-slack-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67968,597 +68086,505 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The property value will be converted to JSON and will be added to the array of attachments in the JSON payload being sent to Slack. The property name will not be used by the processor.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"<Arbitrary name>\",\n-                                \"value\": \"JSON snippet specifying a Slack message \\\"attachment\\\"\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi.\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"channel\": {\n-                                \"description\": \"Slack channel, private group, or IM channel to send the message to.\",\n-                                \"displayName\": \"Channel\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"channel\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-mime-type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"Mime type of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the mime type will be set to 'application/octet-stream' in the Slack message.\",\n-                                \"displayName\": \"File Mime Type\",\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-mime-type\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the file to be uploaded. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'. If the property evaluated to null or empty string, then the file name will be set to 'file' in the Slack message.\",\n-                                \"displayName\": \"File Name\",\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"Query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-title\": {\n-                                \"description\": \"Title of the file displayed in the Slack message. The property value will only be used if 'Upload FlowFile' has been set to 'Yes'.\",\n-                                \"displayName\": \"File Title\",\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-title\",\n+                                \"name\": \"Sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-upload-url\": {\n-                                \"defaultValue\": \"https://slack.com/api/files.upload\",\n-                                \"description\": \"Slack Web API URL for uploading files to channels. It only needs to be changed if Slack changes its API URL.\",\n-                                \"displayName\": \"File Upload URL\",\n+                            \"get-mongo-record-writer-factory\": {\n+                                \"description\": \"The record writer to use to write the result sets.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-upload-url\",\n+                                \"name\": \"get-mongo-record-writer-factory\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"post-message-url\": {\n-                                \"defaultValue\": \"https://slack.com/api/chat.postMessage\",\n-                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n-                                \"displayName\": \"Post Message URL\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"post-message-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"text\": {\n-                                \"description\": \"Text of the Slack message to send. Only required if no attachment has been specified and 'Upload File' has been set to 'No'.\",\n-                                \"displayName\": \"Text\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"text\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"upload-flowfile\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Upload and attach FlowFile content to the Slack message.\",\n-                                        \"displayName\": \"Yes\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Don't upload and attach FlowFile content to the Slack message.\",\n-                                        \"displayName\": \"No\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to upload and attach the FlowFile content to the Slack message.\",\n-                                \"displayName\": \"Upload FlowFile\",\n+                            \"mongodb-schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"upload-flowfile\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongodb-schema-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"message\",\n-                            \"notify\",\n-                            \"post\",\n-                            \"slack\",\n-                            \"upload\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"json\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PostSlack\",\n-                        \"typeDescription\": \"Sends a message on Slack. The FlowFile content (e.g. an image) can be uploaded and attached to the message.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n+                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Slack URL of the uploaded file. It will be added if 'Upload FlowFile' has been set to 'Yes'.\",\n-                                \"name\": \"slack.file.url\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n+                            },\n+                            {\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Converts the contents of each value specified by the Dynamic Property's value to JSON and appends it to the payload being sent to Slack.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A JSON object to add to Slack's \\\"attachments\\\" JSON payload.\",\n-                                \"value\": \"JSON-formatted string to add to Slack's payload JSON appended to the \\\"attachments\\\" JSON array.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"channel\": {\n-                                \"description\": \"A public channel using #channel or direct message using @username. If not specified, the default webhook channel as specified in Slack's Incoming Webhooks web interface is used.\",\n-                                \"displayName\": \"Channel\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the data is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"channel\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"icon-emoji\": {\n-                                \"description\": \"Icon Emoji to be used for the message. Must begin and end with a colon, e.g. :ghost:\",\n-                                \"displayName\": \"Icon Emoji\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"insert\",\n+                                        \"value\": \"insert\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"update\",\n+                                        \"value\": \"update\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"insert\",\n+                                \"description\": \"Indicates whether the processor should insert or update content\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"icon-emoji\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"icon-url\": {\n-                                \"description\": \"Icon URL to be used for the message\",\n-                                \"displayName\": \"Icon URL\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"icon-url\",\n-                                \"required\": false,\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"description\": \"The displayed Slack username\",\n-                                \"displayName\": \"Username\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"webhook-text\": {\n-                                \"description\": \"The text sent in the webhook message\",\n-                                \"displayName\": \"Webhook Text\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"webhook-text\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"webhook-url\": {\n-                                \"description\": \"The POST URL provided by Slack to send messages into a channel.\",\n-                                \"displayName\": \"Webhook URL\",\n+                            \"Update Query Key\": {\n+                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n+                                \"displayName\": \"Update Query Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"webhook-url\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure if unable to be sent to Slack\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"notify\",\n-                            \"put\",\n-                            \"slack\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PutSlack\",\n-                        \"typeDescription\": \"Sends a message to your team on slack.com\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hadoop-libraries-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-metrics-reporter-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-asana-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"asana-api-url\": {\n-                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n-                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n-                                \"displayName\": \"API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-api-url\",\n-                                \"required\": true,\n+                                \"name\": \"Update Query Key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-personal-access-token\": {\n-                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n-                                \"displayName\": \"Personal Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-personal-access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"asana-workspace-name\": {\n-                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n-                                \"displayName\": \"Workspace\",\n+                            \"Upsert\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n+                                \"displayName\": \"Upsert\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-workspace-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-asana-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"asana\",\n-                            \"authentication\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n-                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hl7-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n+                                \"name\": \"Upsert\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hl7-input-version\": {\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"autodetect\",\n-                                        \"value\": \"autodetect\"\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.2\",\n-                                        \"value\": \"2.2\"\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3\",\n-                                        \"value\": \"2.3\"\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3.1\",\n-                                        \"value\": \"2.3.1\"\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.4\",\n-                                        \"value\": \"2.4\"\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5\",\n-                                        \"value\": \"2.5\"\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5.1\",\n-                                        \"value\": \"2.5.1\"\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.6\",\n-                                        \"value\": \"2.6\"\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"autodetect\",\n-                                \"description\": \"The HL7 version to use for parsing and validation\",\n-                                \"displayName\": \"HL7 Input Version\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hl7-input-version\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"parse-segment-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n-                                \"displayName\": \"Parse Segment Fields\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parse-segment-fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"skip-validation\": {\n+                            \"put-mongo-update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"With whole document\",\n+                                        \"value\": \"doc\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"With operators enabled\",\n+                                        \"value\": \"operators\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate HL7 message values\",\n-                                \"displayName\": \"Skip Validation\",\n+                                \"defaultValue\": \"doc\",\n+                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n+                                \"displayName\": \"Update Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n+                                \"name\": \"put-mongo-update-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-segment-names\": {\n+                            \"putmongo-update-query\": {\n+                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n+                                \"displayName\": \"Update Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putmongo-update-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n-                                \"displayName\": \"Use Segment Names\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-segment-names\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"HL7\",\n-                            \"attributes\",\n-                            \"extract\",\n-                            \"health level 7\",\n-                            \"healthcare\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n-                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -68567,1079 +68593,861 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of a Relationship\",\n-                                \"value\": \"An HL7 Query Language query\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n-                                \"name\": \"failure\"\n                             },\n-                            {\n-                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"HL7\",\n-                            \"Health Level 7\",\n-                            \"healthcare\",\n-                            \"route\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n-                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n-                                \"name\": \"RouteHL7.Route\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-6-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Mongo URI\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Write Concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"Write Concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"bypass-validation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Bypass schema validation during insert/upsert\",\n+                                \"displayName\": \"Bypass Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"bypass-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"insert_count\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"insert_count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"ordered\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Perform ordered or unordered operations\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"ordered\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"update-key-fields\": {\n+                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n+                                \"displayName\": \"Update Key Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"update-key-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"update-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Updates only the first document that matches the query.\",\n+                                        \"displayName\": \"Update One\",\n+                                        \"value\": \"one\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Updates every document that matches the query.\",\n+                                        \"displayName\": \"Update Many\",\n+                                        \"value\": \"many\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n+                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Update Key Fields\",\n+                                        \"propertyName\": \"update-key-fields\"\n+                                    }\n+                                ],\n+                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n+                                \"displayName\": \"Update Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"update-mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n+                                \"name\": \"mongodb.update.mode\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"kafka\",\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n                             \"record\",\n-                            \"sink\"\n+                            \"update\",\n+                            \"upsert\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n-                                \"displayName\": \"Commit Offsets\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of elements returned from the server in one batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Mongo URI\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"name\": \"Mongo URI\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"allow-disk-use\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n+                                \"displayName\": \"Allow Disk Use\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"allow-disk-use\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte-array\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n-                                \"displayName\": \"Key Format\",\n+                            \"mongo-agg-query\": {\n+                                \"description\": \"The aggregation query to be executed.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-agg-query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-record-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"key-format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-record-reader\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON. Full documentation for format characters can be found here: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"results-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"results-per-flowfile\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"output-strategy\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Value Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Value Writer\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n+                                \"name\": \"results\"\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"aggregate\",\n+                            \"aggregation\",\n+                            \"mongo\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n+                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"delete-gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"delete-gridfs-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"gridfs-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"delete\",\n+                            \"gridfs\",\n+                            \"mongodb\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n+                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-operation-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n+                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n+                                        \"displayName\": \"Full Query Fetch\",\n+                                        \"value\": \"all-at-once\"\n                                     },\n                                     {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n+                                        \"displayName\": \"Stream Query Results\",\n+                                        \"value\": \"streaming\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                                \"defaultValue\": \"all-at-once\",\n+                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n+                                \"displayName\": \"Operation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n+                                \"name\": \"mongo-operation-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"fetch\",\n+                            \"gridfs\",\n+                            \"mongo\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n+                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n+                                \"name\": \"gridfs.file.metadata\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -69647,1294 +69455,1116 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n-                                \"displayName\": \"Commit Offsets\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"gridfs-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"putgridfs-chunk-size\": {\n+                                \"defaultValue\": \"256 KB\",\n+                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n+                                \"displayName\": \"Chunk Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-chunk-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n+                            \"putgridfs-enforce-uniqueness\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"No uniqueness will be enforced.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Both the filename and hash must be unique.\",\n+                                        \"displayName\": \"Both\",\n+                                        \"value\": \"both\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Only the filename must be unique.\",\n+                                        \"displayName\": \"Name\",\n+                                        \"value\": \"name\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n+                                        \"description\": \"Only the file hash must be unique.\",\n+                                        \"displayName\": \"Hash\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n+                                \"displayName\": \"Enforce Uniqueness\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"putgridfs-enforce-uniqueness\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            \"putgridfs-hash-attribute\": {\n+                                \"defaultValue\": \"hash.value\",\n+                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n+                                \"displayName\": \"Hash Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"message-demarcator\",\n+                                \"name\": \"putgridfs-hash-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"putgridfs-properties-prefix\": {\n+                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n+                                \"displayName\": \"File Properties Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-properties-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            {\n+                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n+                                \"name\": \"duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"file\",\n+                            \"gridfs\",\n+                            \"mongo\",\n+                            \"put\",\n+                            \"store\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n+                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-rethinkdb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-dbname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"rethinkdb-document-identifier\": {\n+                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-document-identifier\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"rethinkdb-durability\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"Save change to disk before ack\",\n+                                        \"displayName\": \"Hard\",\n+                                        \"value\": \"hard\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"Don't save changes to disk before ack\",\n+                                        \"displayName\": \"Soft\",\n+                                        \"value\": \"soft\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"hard\",\n+                                \"description\": \"Durability of documents being inserted\",\n+                                \"displayName\": \"Durablity of documents\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-durability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"rethinkdb-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n+                            \"rethinkdb-return-result\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"description\": \"Return changed document\",\n+                                        \"displayName\": \"True\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"description\": \"Do not return changed document\",\n+                                        \"displayName\": \"False\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Return old value which were deleted\",\n+                                \"displayName\": \"Return deleted value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-return-result\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"rethinkdb-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n+                                \"name\": \"rethinkdb-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Document not found are routed to this relationship\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"delete\",\n+                            \"remove\",\n+                            \"rethinkdb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                        \"typeDescription\": \"Processor to remove a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n                             },\n                             {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n+                                \"description\": \"Error count while delete documents\",\n+                                \"name\": \"rethinkdb.delete.errors\"\n                             },\n                             {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n+                                \"description\": \"Number of documents deleted\",\n+                                \"name\": \"rethinkdb.delete.deleted\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"Number of documents inserted\",\n+                                \"name\": \"rethinkdb.delete.inserted\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"Number of documents replaced\",\n+                                \"name\": \"rethinkdb.delete.replaced\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"Number of documents skipped\",\n+                                \"name\": \"rethinkdb.delete.skipped\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents unchanged since they already existed\",\n+                                \"name\": \"rethinkdb.delete.unchanged\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Metadata Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n-                                        \"displayName\": \"Use Configured Values\",\n-                                        \"value\": \"Use Configured Values\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n-                                        \"displayName\": \"Metadata From Record\",\n-                                        \"value\": \"Metadata From Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Use Configured Values\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n-                                \"displayName\": \"Record Metadata Strategy\",\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Metadata Strategy\",\n+                                \"name\": \"rethinkdb-dbname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"rethinkdb-document-identifier\": {\n+                                \"description\": \"A FlowFile attribute, or attribute expression used for determining RethinkDB key for the Flow File content\",\n+                                \"displayName\": \"Document Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-document-identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"rethinkdb-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"rethinkdb-max-document-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n+                                \"displayName\": \"Max size of documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-max-document-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"rethinkdb-read-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"Read values from memory from primary replica (Default)\",\n+                                        \"displayName\": \"Single\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Read values committed to disk on majority of replicas\",\n+                                        \"displayName\": \"Majority\",\n+                                        \"value\": \"majority\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"description\": \"Read values from memory from an arbitrary replica \",\n+                                        \"displayName\": \"Outdated\",\n+                                        \"value\": \"outdated\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"Read mode used for consistency\",\n+                                \"displayName\": \"Read Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-read-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"rethinkdb-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"rethinkdb-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"message-key-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Document not found are routed to this relationship\",\n+                                \"name\": \"not_found\"\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                            {\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"fetch\",\n+                            \"get\",\n+                            \"read\",\n+                            \"rethinkdb\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\",\n+                        \"typeDescription\": \"Processor to get a JSON document from RethinkDB (https://www.rethinkdb.com/) using the document id. The FlowFile will contain the retrieved document\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-rethinkdb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"rethinkdb-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"rethinkdb-conflict-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"Update the document having same id with new values\",\n+                                        \"displayName\": \"Update\",\n+                                        \"value\": \"update\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                        \"description\": \"Replace the document with having same id new document\",\n+                                        \"displayName\": \"Replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"Return error if the document with same id exists\",\n+                                        \"displayName\": \"Error\",\n+                                        \"value\": \"error\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"update\",\n+                                \"description\": \"Conflict strategy to be used in case of inserting existing document.\",\n+                                \"displayName\": \"Conflict strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-conflict-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"rethinkdb-dbname\": {\n+                                \"description\": \"RethinkDB database to connect to\",\n+                                \"displayName\": \"DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"rethinkdb-dbname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"publish-strategy\": {\n+                            \"rethinkdb-durability\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n-                                        \"displayName\": \"Use Content as Record Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"Save change to disk before ack\",\n+                                        \"displayName\": \"Hard\",\n+                                        \"value\": \"hard\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"Don't save changes to disk before ack\",\n+                                        \"displayName\": \"Soft\",\n+                                        \"value\": \"soft\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                                \"defaultValue\": \"hard\",\n+                                \"description\": \"Durability of documents being inserted\",\n+                                \"displayName\": \"Durablity of documents\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"publish-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"rethinkdb-durability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-key-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n-                                \"displayName\": \"Record Key Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-key-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"rethinkdb-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"RethinkDB hostname\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"rethinkdb-host\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"rethinkdb-max-document-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of documents allowed to be posted in one batch\",\n+                                \"displayName\": \"Max size of documents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"rethinkdb-max-document-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"rethinkdb-password\": {\n+                                \"description\": \"Password for user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            \"rethinkdb-port\": {\n+                                \"defaultValue\": \"28015\",\n+                                \"description\": \"RethinkDB database port to connect to\",\n+                                \"displayName\": \"DB Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"rethinkdb-table\": {\n+                                \"description\": \"RethinkDB table to connect to\",\n+                                \"displayName\": \"Table name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"rethinkdb-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"rethinkdb-username\": {\n+                                \"description\": \"Username for accessing RethinkDB\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rethinkdb-username\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.rethinkdb.DeleteRethinkDB\",\n+                            \"org.apache.nifi.processors.rethinkdb.GetRethinkDB\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Sucessful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n+                            {\n+                                \"description\": \"Failed FlowFiles are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"insert\",\n+                            \"put\",\n+                            \"rethinkdb\",\n+                            \"stream\",\n+                            \"update\",\n+                            \"write\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.rethinkdb.PutRethinkDB\",\n+                        \"typeDescription\": \"Processor to write the JSON content of a FlowFile to RethinkDB (https://www.rethinkdb.com/). The flow file should contain either JSON Object an array of JSON documents\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"RethinkDB error message\",\n+                                \"name\": \"rethinkdb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Error count while inserting documents\",\n+                                \"name\": \"rethinkdb.insert.errors\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents deleted\",\n+                                \"name\": \"rethinkdb.insert.deleted\"\n+                            },\n+                            {\n+                                \"description\": \"Keys generated on inserting documents\",\n+                                \"name\": \"rethinkdb.insert.generated_keys\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents inserted\",\n+                                \"name\": \"rethinkdb.insert.inserted\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents replaced\",\n+                                \"name\": \"rethinkdb.insert.replaced\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents skipped because they already existed\",\n+                                \"name\": \"rethinkdb.insert.skipped\"\n+                            },\n+                            {\n+                                \"description\": \"Number of documents unchanged since they already existed\",\n+                                \"name\": \"rethinkdb.insert.unchanged\"\n+                            },\n+                            {\n+                                \"description\": \"First error while inserting documents\",\n+                                \"name\": \"rethinkdb.insert.first_error\"\n+                            },\n+                            {\n+                                \"description\": \"Warning message in case of large number of ids being returned on insertion\",\n+                                \"name\": \"rethinkdb.insert.warnings\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateless-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jolt-record-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-jolt-record-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"jolt-record-custom-class\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"jolt-transform-custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Jolt Specification\",\n+                                        \"propertyName\": \"jolt-record-spec\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-record-custom-class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n+                            \"jolt-record-custom-modules\": {\n                                 \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Jolt Specification\",\n+                                        \"propertyName\": \"jolt-record-spec\"\n                                     }\n                                 ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"name\": \"jolt-record-custom-modules\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"jolt-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"jolt-record-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"jolt-record-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n+                                \"name\": \"jolt-record-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"jolt-record-spec\": {\n+                                \"description\": \"Jolt Specification for transform of record data. This value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"name\": \"jolt-record-spec\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\n+                            \"jolt-record-transform\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Change the cardinality of input elements to create the output.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Apply default values to the output.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when field name is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Remove values from input data to create the output.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Shift input data to create the output.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Sort input field name values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transformation DSL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"jolt-record-transform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-record-transform-cache-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-transform-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"logs\"\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"record\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.jolt.record.JoltTransformRecord\",\n+                        \"typeDescription\": \"Applies a list of Jolt specifications to the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-social-media-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70942,3561 +70572,3374 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"backfill-minutes\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n+                                \"displayName\": \"Backfill Minutes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"backfill-minutes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"backoff-attempts\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n+                                \"displayName\": \"Backoff Attempts\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"backoff-attempts\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"backoff-time\": {\n+                                \"defaultValue\": \"1 mins\",\n+                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n+                                \"displayName\": \"Backoff Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"backoff-time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"base-path\": {\n+                                \"defaultValue\": \"https://api.twitter.com\",\n+                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"base-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n+                            \"bearer-token\": {\n+                                \"description\": \"The Bearer Token provided by Twitter.\",\n+                                \"displayName\": \"Bearer Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bearer-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Service supporting generalized credentials authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"connect-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"expansions\": {\n+                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n+                                \"displayName\": \"Expansions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"expansions\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                            \"maximum-backoff-time\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n+                                \"displayName\": \"Maximum Backoff Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"maximum-backoff-time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"media-fields\": {\n+                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n+                                \"displayName\": \"Media Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"media-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"place-fields\": {\n+                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n+                                \"displayName\": \"Place Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n+                                \"name\": \"place-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            \"poll-fields\": {\n+                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n+                                \"displayName\": \"Poll Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"poll-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"queue-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum size of internal queue for streamed messages\",\n+                                \"displayName\": \"Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"queue-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"stream-endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n+                                        \"displayName\": \"Sample Stream\",\n+                                        \"value\": \"Sample Endpoint\"\n                                     },\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n+                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n+                                        \"displayName\": \"Search Stream\",\n+                                        \"value\": \"Search Endpoint\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                                \"defaultValue\": \"Sample Endpoint\",\n+                                \"description\": \"The source from which the processor will consume Tweets.\",\n+                                \"displayName\": \"Stream Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"stream-endpoint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.keytab\": {\n-                                \"description\": \"Keytab credentials used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"tweet-fields\": {\n+                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n+                                \"displayName\": \"Tweet Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.keytab\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tweet-fields\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.kerberos.principal\": {\n-                                \"description\": \"Principal used for authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"user-fields\": {\n+                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n+                                \"displayName\": \"User Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"user-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"json\",\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n+                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The MIME Type set to application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n+                            {\n+                                \"description\": \"The number of Tweets in the FlowFile\",\n+                                \"name\": \"tweets\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.twitter.ConsumeTwitter\"\n+                        ],\n+                        \"deprecationReason\": \"GetTwitter relies on the Twitter Hosebird client, which is not maintained. This processor will be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows users to specify the name/value of a query parameter to add to the Twitter query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name of a query parameter to add to the Twitter query\",\n+                                \"value\": \"The value of a query parameter to add to the Twitter query\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Access Token\": {\n+                                \"description\": \"The Access Token provided by Twitter\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Access Token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"Access Token Secret\": {\n+                                \"description\": \"The Access Token Secret provided by Twitter\",\n+                                \"displayName\": \"Access Token Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"Access Token Secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"Consumer Key\": {\n+                                \"description\": \"The Consumer Key provided by Twitter\",\n+                                \"displayName\": \"Consumer Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Consumer Key\",\n+                                \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"Consumer Secret\": {\n+                                \"description\": \"The Consumer Secret provided by Twitter\",\n+                                \"displayName\": \"Consumer Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Consumer Secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"IDs to Follow\": {\n+                                \"description\": \"A comma-separated list of Twitter User ID's to follow. Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n+                                \"displayName\": \"IDs to Follow\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"IDs to Follow\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"Languages\": {\n+                                \"description\": \"A comma-separated list of languages for which tweets should be fetched\",\n+                                \"displayName\": \"Languages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"Languages\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Locations to Filter On\": {\n+                                \"description\": \"A comma-separated list of coordinates specifying one or more bounding boxes to filter on.Each bounding box is specified by a pair of coordinates in the format: swLon,swLat,neLon,neLat. Multiple bounding boxes can be specified as such: swLon1,swLat1,neLon1,neLat1,swLon2,swLat2,neLon2,neLat2.Ignored unless Endpoint is set to 'Filter Endpoint'.\",\n+                                \"displayName\": \"Locations to Filter On\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"Locations to Filter On\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n+                            \"Terms to Filter On\": {\n+                                \"description\": \"A comma-separated list of terms to filter on. Ignored unless Endpoint is set to 'Filter Endpoint'. The filter works such that if any term matches, the status update will be retrieved; multiple terms separated by a space function as an 'AND'. I.e., 'it was, hello' will retrieve status updates that have either 'hello' or both 'it' AND 'was'\",\n+                                \"displayName\": \"Terms to Filter On\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Terms to Filter On\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\n+                            \"Twitter Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The endpoint that provides public data, aka a 'garden hose'\",\n+                                        \"displayName\": \"Sample Endpoint\",\n+                                        \"value\": \"Sample Endpoint\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The endpoint that provides access to all tweets\",\n+                                        \"displayName\": \"Firehose Endpoint\",\n+                                        \"value\": \"Firehose Endpoint\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Endpoint that allows the stream to be filtered by specific terms or User IDs\",\n+                                        \"displayName\": \"Filter Endpoint\",\n+                                        \"value\": \"Filter Endpoint\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"Sample Endpoint\",\n+                                \"description\": \"Specifies which endpoint data should be pulled from\",\n+                                \"displayName\": \"Twitter Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"Twitter Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-client-error-retries\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of retries to attempt when client experience retryable connection errors. Client continues attempting to reconnect using an exponential back-off pattern until it successfully reconnects or until it reaches the retry limit.  It is recommended to raise this value when client is getting rate limited by Twitter API. Default value is 5.\",\n+                                \"displayName\": \"Max Client Error Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-client-error-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"All status updates will be routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"json\",\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.twitter.GetTwitter\",\n+                        \"typeDescription\": \"Pulls status changes from Twitter's streaming API. In versions starting with 1.9.0, the Consumer Key and Access Token are marked as sensitive according to https://developer.twitter.com/en/docs/basics/authentication/guides/securing-keys-and-tokens\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"Sets mime type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-smb-client-api-nar\",\n+            \"artifact\": \"nifi-image-viewer-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-server-nar\",\n+            \"artifact\": \"nifi-asana-services-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [],\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-asana-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"asana-api-url\": {\n+                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n+                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n+                                \"displayName\": \"API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-api-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-personal-access-token\": {\n+                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n+                                \"displayName\": \"Personal Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-personal-access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"asana-workspace-name\": {\n+                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n+                                \"displayName\": \"Workspace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-workspace-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-asana-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"asana\",\n+                            \"authentication\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n+                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         },\n         {\n-            \"artifact\": \"nifi-spring-nar\",\n+            \"artifact\": \"nifi-standard-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-spring-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application Context class path\": {\n-                                \"description\": \"Path to the directory with resources (i.e., JARs, configuration files etc.) required to be on the classpath of the ApplicationContext.\",\n-                                \"displayName\": \"Application Context class path\",\n+                            \"attribute-list\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n+                                \"displayName\": \"Attribute List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"attribute-list\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attributes-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"attributes-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Context class path\",\n+                                \"name\": \"destination\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Application Context config path\": {\n-                                \"description\": \"The path to the Spring Application Context configuration file relative to the classpath\",\n-                                \"displayName\": \"Application Context config path\",\n+                            \"include-core-attributes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Context config path\",\n+                                \"name\": \"include-core-attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Timeout\": {\n-                                \"description\": \"Timeout for receiving date from Spring context. Defaults to 0.\",\n-                                \"displayName\": \"Receive Timeout\",\n+                            \"include-schema\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n+                                \"displayName\": \"Include Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"include-schema\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Timeout\": {\n-                                \"description\": \"Timeout for sending data to Spring Application Context. Defaults to 0.\",\n-                                \"displayName\": \"Send Timeout\",\n+                            \"null-value\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n+                                \"displayName\": \"Null Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"null-value\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are successfully received from Spring Application Context are routed to this relationship\",\n+                                \"description\": \"Successfully converted attributes to CSV\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be sent to Spring Application Context are routed to this relationship\",\n+                                \"description\": \"Failed to convert attributes to CSV\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Get\",\n-                            \"Integration\",\n-                            \"Message\",\n-                            \"Put\",\n-                            \"Spring\"\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"flowfile\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.spring.SpringContextProcessor\",\n-                        \"typeDescription\": \"A Processor that supports sending and receiving data from application defined in Spring Application Context via predefined in/out MessageChannels.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-cf-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n+                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"CSV representation of the Schema\",\n+                                \"name\": \"CSVSchema\"\n+                            },\n+                            {\n+                                \"description\": \"CSV representation of Attributes\",\n+                                \"name\": \"CSVData\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"20 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"Attributes List\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n+                                \"displayName\": \"Attributes List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Attributes List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Zendesk Authentication Type\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Zendesk Authentication Credential\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"zendesk-export-method\": {\n+                            \"Include Core Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n-                                        \"displayName\": \"Cursor Based\",\n-                                        \"value\": \"cursor\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n-                                        \"displayName\": \"Time Based\",\n-                                        \"value\": \"time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Method for incremental export.\",\n-                                \"displayName\": \"Zendesk Export Method\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-export-method\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-query-start-timestamp\": {\n-                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n-                                \"displayName\": \"Zendesk Query Start Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"name\": \"Include Core Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-resource\": {\n+                            \"JSON Handling Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/api/v2/incremental/tickets\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n-                                        \"displayName\": \"Ticket Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_events\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n-                                        \"displayName\": \"Ticket Metric Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"/api/v2/incremental/users\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n-                                        \"displayName\": \"Organizations\",\n-                                        \"value\": \"/api/v2/incremental/organizations\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n-                                        \"displayName\": \"Articles\",\n-                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n-                                        \"displayName\": \"NPS - Responses\",\n-                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                        \"description\": \"Escapes JSON attribute values to strings\",\n+                                        \"displayName\": \"Escaped\",\n+                                        \"value\": \"ESCAPED\"\n                                     },\n                                     {\n-                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n-                                        \"displayName\": \"NPS - Recipients\",\n-                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n+                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n+                                        \"displayName\": \"Nested\",\n+                                        \"value\": \"NESTED\"\n                                     }\n                                 ],\n-                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n-                                \"displayName\": \"Zendesk Resource\",\n+                                \"defaultValue\": \"ESCAPED\",\n+                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n+                                \"displayName\": \"JSON Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-resource\",\n+                                \"name\": \"JSON Handling Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Zendesk Subdomain Name\",\n+                            \"Null Value\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n+                                \"displayName\": \"Null Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Null Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"Zendesk User Name\",\n+                            \"attributes-to-json-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"attributes-to-json-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"Successfully converted attributes to JSON\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Failed to convert attributes to JSON\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"zendesk\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"json\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n-                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n+                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records fetched by the processor.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"JSON representation of Attributes\",\n+                                \"name\": \"JSONAttributes\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-shopify-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-shopify-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.EncodeContent\"\n+                        ],\n+                        \"deprecationReason\": \"EncodeContent supports Base64 and additional encoding schemes\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CUSTOMERS\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"customers\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CUSTOMERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\n                                     }\n                                 ],\n-                                \"description\": \"Customer resource to query\",\n-                                \"displayName\": \"Customer Category\",\n+                                \"defaultValue\": \"Encode\",\n+                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CUSTOMERS\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n-                            \"DISCOUNTS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n-                                        \"displayName\": \"Price Rules\",\n-                                        \"value\": \"price_rules\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"DISCOUNTS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Discount resource to query\",\n-                                \"displayName\": \"Discount Category\",\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"base64\",\n+                            \"encode\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Base64EncodeContent\",\n+                        \"typeDescription\": \"Encodes or decodes content to and from base64\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"record-stats-limit\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n+                                \"displayName\": \"record-stats-limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DISCOUNTS\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"record-stats-limit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INVENTORY\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n-                                        \"displayName\": \"Locations\",\n-                                        \"value\": \"locations\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"INVENTORY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Inventory resource to query\",\n-                                \"displayName\": \"Inventory Category\",\n+                            \"record-stats-reader\": {\n+                                \"description\": \"A record reader to use for reading the records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INVENTORY\",\n+                                \"name\": \"record-stats-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"ONLINE_STORE\": {\n+                            {\n+                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"metrics\",\n+                            \"record\",\n+                            \"stats\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n+                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n+                            },\n+                            {\n+                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Compression Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n-                                        \"displayName\": \"Blogs\",\n-                                        \"value\": \"blogs\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n-                                        \"displayName\": \"Comments\",\n-                                        \"value\": \"comments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n-                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n-                                        \"displayName\": \"Pages\",\n-                                        \"value\": \"pages\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n                                     },\n                                     {\n-                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n-                                        \"displayName\": \"Redirects\",\n-                                        \"value\": \"redirects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n                                     },\n                                     {\n-                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n-                                        \"displayName\": \"Script Tags\",\n-                                        \"value\": \"script_tags\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n                                     },\n                                     {\n-                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n-                                        \"displayName\": \"Themes\",\n-                                        \"value\": \"themes\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ONLINE_STORE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Online Store resource to query\",\n-                                \"displayName\": \"Online Store Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ONLINE_STORE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ORDERS\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n                                     {\n-                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n-                                        \"displayName\": \"Abandoned Checkouts\",\n-                                        \"value\": \"checkouts\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n-                                        \"displayName\": \"Draft Orders\",\n-                                        \"value\": \"draft_orders\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n                                     },\n                                     {\n-                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"orders\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ORDERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"description\": \"Order resource to query\",\n-                                \"displayName\": \"Order Category\",\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ORDERS\",\n+                                \"name\": \"Compression Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"PRODUCT\": {\n+                            \"Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n-                                        \"displayName\": \"Collects\",\n-                                        \"value\": \"collects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n-                                        \"displayName\": \"Custom Collections\",\n-                                        \"value\": \"custom_collections\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"Get products in a merchant's store \",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"products\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n-                                        \"displayName\": \"Smart Collections\",\n-                                        \"value\": \"smart_collections\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PRODUCT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Product resource to query\",\n-                                \"displayName\": \"Product Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PRODUCT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SALES_CHANNELS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n-                                        \"displayName\": \"Collection Listings\",\n-                                        \"value\": \"collection_listings\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n-                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n-                                        \"displayName\": \"Product Listings\",\n-                                        \"value\": \"product_listings\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SALES_CHANNELS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sales Channel resource to query\",\n-                                \"displayName\": \"Sales Channel Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SALES_CHANNELS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"STORE_PROPERTIES\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n                                     {\n-                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n-                                        \"displayName\": \"Countries\",\n-                                        \"value\": \"countries\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n-                                        \"displayName\": \"Currencies\",\n-                                        \"value\": \"currencies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n                                     },\n                                     {\n-                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n-                                        \"displayName\": \"Policies\",\n-                                        \"value\": \"policies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n                                     },\n                                     {\n-                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n-                                        \"displayName\": \"Shipping Zones\",\n-                                        \"value\": \"shipping_zones\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"STORE_PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n                                     }\n                                 ],\n-                                \"description\": \"Store Property resource to query\",\n-                                \"displayName\": \"Store Property Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STORE_PROPERTIES\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"api-version\": {\n-                                \"defaultValue\": \"2022-10\",\n-                                \"description\": \"The Shopify REST API version\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"3 sec\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n-                                \"displayName\": \"Incremental Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-delay\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"Compression Format\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"compress\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     }\n                                 ],\n-                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n+                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"incremental-initial-start-time\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression Level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"is-incremental\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"compress\",\n+                                        \"value\": \"compress\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"decompress\",\n+                                        \"value\": \"decompress\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n-                                \"displayName\": \"Incremental Loading\",\n+                                \"defaultValue\": \"compress\",\n+                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"object-category\": {\n+                            \"Update Filename\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Query a Customer resource\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"CUSTOMERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query a Discount resource\",\n-                                        \"displayName\": \"Discounts\",\n-                                        \"value\": \"DISCOUNTS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Inventory resource\",\n-                                        \"displayName\": \"Inventory\",\n-                                        \"value\": \"INVENTORY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Online Store resource\",\n-                                        \"displayName\": \"Online Store\",\n-                                        \"value\": \"ONLINE_STORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query an Order resource\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"ORDERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query a Product resource\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"PRODUCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Query a Sales Channel resource\",\n-                                        \"displayName\": \"Sales Channels\",\n-                                        \"value\": \"SALES_CHANNELS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Store Property resource\",\n-                                        \"displayName\": \"Store Properties\",\n-                                        \"value\": \"STORE_PROPERTIES\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Shopify object category\",\n-                                \"displayName\": \"Object Category\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n+                                \"displayName\": \"Update Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-category\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"result-limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"store-domain\": {\n-                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n-                                \"displayName\": \"Store Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"store-domain\",\n+                                \"name\": \"Update Filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"shopify\"\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"decompress\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n-                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n+                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n                                 \"name\": \"mime.type\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-solr-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Number of rows per Solr query\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Date Field\": {\n-                                \"description\": \"The name of a date field in Solr used to filter results\",\n-                                \"displayName\": \"Date Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Field\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Initial Date Filter\": {\n-                                \"description\": \"Date value to filter results. Documents with an earlier date will not be fetched. The format has to correspond to the date pattern of Solr 'YYYY-MM-DDThh:mm:ssZ'\",\n-                                \"displayName\": \"Initial Date Filter\",\n+                            \"Grouping Attribute\": {\n+                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Grouping Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Initial Date Filter\",\n+                                \"name\": \"Grouping Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Return Fields\": {\n-                                \"description\": \"Comma-separated list of field names to return\",\n-                                \"displayName\": \"Return Fields\",\n+                            \"Maximum Data Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n+                                \"displayName\": \"Maximum Data Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Fields\",\n+                                \"name\": \"Maximum Data Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n-                                    },\n+                            \"Maximum FlowFile Rate\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Records\",\n-                                        \"value\": \"Records\"\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"XML\",\n-                                \"description\": \"Write Solr documents to FlowFiles as XML or using a Record Writer\",\n-                                \"displayName\": \"Return Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n+                                \"displayName\": \"Maximum FlowFile Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Maximum FlowFile Rate\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Query\": {\n-                                \"description\": \"A query to execute against Solr\",\n-                                \"displayName\": \"Solr Query\",\n+                            \"Maximum Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate\",\n+                                            \"attribute value\",\n+                                            \"flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n+                                \"displayName\": \"Maximum Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Query\",\n+                                \"name\": \"Maximum Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Type\": {\n+                            \"Rate Control Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n+                                        \"displayName\": \"data rate\",\n+                                        \"value\": \"data rate\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n+                                        \"displayName\": \"flowfile count\",\n+                                        \"value\": \"flowfile count\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n+                                        \"displayName\": \"attribute value\",\n+                                        \"value\": \"attribute value\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n+                                        \"displayName\": \"data rate or flowfile count\",\n+                                        \"value\": \"data rate or flowfile count\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"data rate\",\n+                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Control Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n+                                \"name\": \"Rate Control Criteria\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                            \"Rate Controlled Attribute\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"attribute value\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Controlled Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"name\": \"Rate Controlled Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Time Duration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Time Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"name\": \"Time Duration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores latest date of Date Field so that the same data will not be fetched multiple times.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The results of querying Solr\",\n+                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Get\",\n-                            \"Pull\",\n-                            \"Records\",\n-                            \"Solr\"\n+                            \"rate\",\n+                            \"rate control\",\n+                            \"throttle\",\n+                            \"throughput\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.GetSolr\",\n-                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n+                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Commit Within\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The number of milliseconds before the given update is committed\",\n-                                \"displayName\": \"Commit Within\",\n+                            \"Input Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to expect for Input\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Commit Within\",\n-                                \"required\": false,\n+                                \"name\": \"Input Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Stream Path\": {\n-                                \"defaultValue\": \"/update/json/docs\",\n-                                \"description\": \"The path in Solr to post the ContentStream\",\n-                                \"displayName\": \"Content Stream Path\",\n+                            \"Output Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to convert to\",\n+                                \"displayName\": \"Output Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content Stream Path\",\n+                                \"name\": \"Output Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"application/json\",\n-                                \"description\": \"Content-Type being sent to Solr\",\n-                                \"displayName\": \"Content-Type\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"character set\",\n+                            \"characterset\",\n+                            \"convert\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n+                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Catalog Name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Catalog Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"JDBC Connection Pool\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n+                            \"Schema Name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"Statement Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the type of SQL Statement to generate\",\n+                                \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"name\": \"Statement Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the table that the statement should update\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"Translate Field Names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Translate Field Names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"Unmatched Column Behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Unmatched Column Behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n+                            \"Unmatched Field Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n+                                \"name\": \"Unmatched Field Behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n+                            \"Update Keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Update Keys\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"jts-quoted-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n+                                \"name\": \"jts-quoted-identifiers\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"jts-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n+                                \"name\": \"jts-quoted-table-identifiers\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"jts-sql-param-attr-prefix\": {\n+                                \"defaultValue\": \"sql\",\n+                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n+                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jts-sql-param-attr-prefix\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"table-schema-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many Table Schemas should be cached\",\n+                                \"displayName\": \"Table Schema Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"table-schema-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n+                                \"name\": \"sql\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n-                                \"name\": \"connection_failure\"\n+                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Put\",\n-                            \"Send\",\n-                            \"Solr\"\n+                            \"database\",\n+                            \"delete\",\n+                            \"flat\",\n+                            \"insert\",\n+                            \"json\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.PutSolrContentStream\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a ContentStream to Solr\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n+                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.table\"\n+                            },\n+                            {\n+                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.catalog\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.value\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The number of solr documents to index per batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Commit Within\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The number of milliseconds before the given update is committed\",\n-                                \"displayName\": \"Commit Within\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Commit Within\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Fields To Index\": {\n-                                \"description\": \"Comma-separated list of field names to write\",\n-                                \"displayName\": \"Fields To Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Fields To Index\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Type\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Update Path\": {\n-                                \"defaultValue\": \"/update\",\n-                                \"description\": \"The path in Solr to post the Flowfile Records\",\n-                                \"displayName\": \"Solr Update Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Solr Update Path\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"put-solr-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-solr-record-record-reader\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile\",\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed for any reason other than Solr being unreachable\",\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed because Solr is unreachable\",\n-                                \"name\": \"connection_failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"Solr\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.PutSolrRecord\",\n-                        \"typeDescription\": \"Indexes the Records from a FlowFile into Solr\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-solr-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These parameters will be passed to Solr on the request\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A Solr request parameter name\",\n-                                \"value\": \"A Solr request parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Collection\": {\n-                                \"description\": \"The Solr collection name, only used with a Solr Type of Cloud\",\n-                                \"displayName\": \"Collection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Collection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to write Solr documents to FlowFiles. Must be set if \\\"Records\\\" is used as return type.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. This property must be set when communicating with a Solr over https.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Solr Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Connection Timeout\",\n+                            \"ajust-immediately\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n+                                \"displayName\": \"Call Immediate Adjustment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Solr Location\": {\n-                                \"description\": \"The Solr url for a Solr Type of Standard (ex: http://localhost:8984/solr/gettingstarted), or the ZooKeeper hosts for a Solr Type of Cloud (ex: localhost:9983).\",\n-                                \"displayName\": \"Solr Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Solr Location\",\n+                                \"name\": \"ajust-immediately\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of total connections allowed from the Solr client to Solr.\",\n-                                \"displayName\": \"Solr Maximum Connections\",\n+                            \"character-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Maximum Connections Per Host\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of connections allowed from the Solr client to a single Solr host.\",\n-                                \"displayName\": \"Solr Maximum Connections Per Host\",\n+                            \"split-words-on-symbols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n+                                \"displayName\": \"Split Words on Symbols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Maximum Connections Per Host\",\n+                                \"name\": \"split-words-on-symbols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Socket Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a socket connection to Solr. A value of 0 indicates an infinite timeout.\",\n-                                \"displayName\": \"Solr Socket Timeout\",\n+                            \"text-character-count\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n+                                \"displayName\": \"Count Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Socket Timeout\",\n+                                \"name\": \"text-character-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Solr Type\": {\n+                            \"text-line-count\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A SolrCloud instance.\",\n-                                        \"displayName\": \"Cloud\",\n-                                        \"value\": \"Cloud\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"A stand-alone Solr instance.\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"The type of Solr instance, Cloud or Standard.\",\n-                                \"displayName\": \"Solr Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n+                                \"displayName\": \"Count Lines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Solr Type\",\n+                                \"name\": \"text-line-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to use when Solr is configured with basic authentication.\",\n-                                \"displayName\": \"Basic Auth Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Client Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for data on a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Client Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Client Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ZooKeeper Connection Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait when establishing a connection to ZooKeeper, only used with a Solr Type of Cloud.\",\n-                                \"displayName\": \"ZooKeeper Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ZooKeeper Connection Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"amount_documents_to_return\": {\n+                            \"text-line-nonempty-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Entire results\",\n-                                        \"value\": \"return_all_results\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Only top results\",\n-                                        \"value\": \"return_only_top_results\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"return_only_top_results\",\n-                                \"description\": \"Total amount of Solr documents to be returned. If this property is set to \\\"Only top results\\\", only single requests will be sent to Solr and the results will be written into single FlowFiles. If it is set to \\\"Entire results\\\", all results matching to the query are retrieved via multiple Solr requests and returned in multiple FlowFiles. For both options, the number of Solr documents to be returned in a FlowFile depends on the configuration of the \\\"Rows\\\" property\",\n-                                \"displayName\": \"Total amount of returned results\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n+                                \"displayName\": \"Count Non-Empty Lines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amount_documents_to_return\",\n+                                \"name\": \"text-line-nonempty-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating to Solr via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"return_type\": {\n+                            \"text-word-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Records\",\n-                                        \"value\": \"Records\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"XML\",\n-                                \"description\": \"Output format of Solr results. Write Solr documents to FlowFiles as XML or using a Record Writer\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n+                                \"displayName\": \"Count Words\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"return_type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_field_list\": {\n-                                \"description\": \"Comma separated list of fields to be included into results, e. g. field1,field2\",\n-                                \"displayName\": \"Field List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_field_list\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_query\": {\n-                                \"defaultValue\": \"*:*\",\n-                                \"description\": \"Solr Query, e. g. field:value\",\n-                                \"displayName\": \"Solr Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_request_handler\": {\n-                                \"defaultValue\": \"/select\",\n-                                \"description\": \"Define a request handler here, e. g. /query\",\n-                                \"displayName\": \"Request Handler\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_request_handler\",\n+                                \"name\": \"text-word-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"solr_param_rows\": {\n-                                \"description\": \"Number of results to be returned for a single request\",\n-                                \"displayName\": \"Rows\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_rows\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_sort\": {\n-                                \"description\": \"Comma separated sort clauses to define the sorting of results, e. g. field1 asc, field2 desc\",\n-                                \"displayName\": \"Sorting of result list\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"solr_param_start\": {\n-                                \"description\": \"Offset of result set\",\n-                                \"displayName\": \"Start of results\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"solr_param_start\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.SplitText\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Stats about Solr index\",\n-                                \"name\": \"stats\"\n-                            },\n-                            {\n-                                \"description\": \"Results of Solr queries\",\n-                                \"name\": \"results\"\n-                            },\n-                            {\n-                                \"description\": \"Results of faceted search\",\n-                                \"name\": \"facets\"\n+                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failure relationship\",\n+                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Original flowfile\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Get\",\n-                            \"Query\",\n-                            \"Records\",\n-                            \"Solr\"\n+                            \"character\",\n+                            \"count\",\n+                            \"line\",\n+                            \"text\",\n+                            \"word\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.solr.QuerySolr\",\n-                        \"typeDescription\": \"Queries Solr and outputs the results as a FlowFile in the format of XML or using a Record Writer\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n+                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Solr connect string\",\n-                                \"name\": \"solr.connect\"\n-                            },\n-                            {\n-                                \"description\": \"Solr collection\",\n-                                \"name\": \"solr.collection\"\n-                            },\n-                            {\n-                                \"description\": \"Query string sent to Solr\",\n-                                \"name\": \"solr.query\"\n-                            },\n-                            {\n-                                \"description\": \"Cursor mark can be used for scrolling Solr\",\n-                                \"name\": \"solr.cursor.mark\"\n-                            },\n-                            {\n-                                \"description\": \"Status code of Solr request. A status code of 0 indicates that the request was successfully processed\",\n-                                \"name\": \"solr.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"The elapsed time to process the query (in ms)\",\n-                                \"name\": \"solr.query.time\"\n-                            },\n-                            {\n-                                \"description\": \"Solr start parameter (result offset) for the query\",\n-                                \"name\": \"solr.start\"\n-                            },\n-                            {\n-                                \"description\": \"Number of Solr documents to be returned for the query\",\n-                                \"name\": \"solr.rows\"\n-                            },\n-                            {\n-                                \"description\": \"Number of Solr documents that match the query\",\n-                                \"name\": \"solr.number.results\"\n+                                \"description\": \"The number of lines of text present in the FlowFile content\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The mime type of the data format\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n+                                \"name\": \"text.line.nonempty.count\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"querysolr.exeption.class\"\n+                                \"description\": \"The number of words present in the original FlowFile\",\n+                                \"name\": \"text.word.count\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"querysolr.exeption.message\"\n+                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n+                                \"name\": \"text.character.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n+                        ],\n+                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                                \"description\": \"The property name defines the attribute to look for and hash in the incoming flowfile. The property value defines the name to give the generated attribute. Attribute names must be unique.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A flowfile attribute key for attribute inspection\",\n+                                \"value\": \"Attribute Name\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"character_set\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"US-ASCII\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ISO-8859-1\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-8\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-16BE\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"UTF-16LE\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This character set normally decodes using an optional BOM at the beginning of the data but encodes by inserting a BE BOM. For hashing, it will be replaced with UTF-16BE. \",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set used to decode the attribute being hashed -- this applies to the incoming data encoding, not the resulting hash encoding. \",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"character_set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n+                            \"fail_when_empty\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Route to failure when none of the attributes that are configured for hashing are found. If set to false, then flow files that do not contain any of the attributes that are configured for hashing will just pass through to success.\",\n+                                \"displayName\": \"Fail when no attributes present\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"fail_when_empty\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                            \"hash_algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-160\",\n+                                        \"value\": \"BLAKE2-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-256\",\n+                                        \"value\": \"BLAKE2-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-384\",\n+                                        \"value\": \"BLAKE2-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-512\",\n+                                        \"value\": \"BLAKE2-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The cryptographic hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy use). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hash_algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n+                            \"missing_attr_policy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Do not route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n+                                        \"displayName\": \"Allow missing attributes\",\n+                                        \"value\": \"ALLOW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n+                                        \"displayName\": \"Fail if missing attributes\",\n+                                        \"value\": \"PROHIBIT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ALLOW\",\n+                                \"description\": \"Policy for how the processor handles attributes that are configured for hashing but are not found in the flowfile.\",\n+                                \"displayName\": \"Missing attribute policy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"missing_attr_policy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Used for flowfiles that are missing required attributes\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"attributes\",\n+                            \"blake2\",\n+                            \"cryptography\",\n+                            \"hash\",\n+                            \"keccak\",\n+                            \"md5\",\n+                            \"sha\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashAttribute\",\n+                        \"typeDescription\": \"Calculates a hash value for each of the specified attributes using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use. \",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This Processor adds an attribute whose value is the result of hashing the specified attribute. The name of this attribute is specified by the value of the dynamic property.\",\n+                                \"name\": \"<Specified Attribute Name per Dynamic Property>\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n-                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"fail_when_empty\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n+                                \"displayName\": \"Fail if the content is empty\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"fail_when_empty\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"hash_algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-160\",\n+                                        \"value\": \"BLAKE2-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-256\",\n+                                        \"value\": \"BLAKE2-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-384\",\n+                                        \"value\": \"BLAKE2-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-512\",\n+                                        \"value\": \"BLAKE2-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"hash_algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"jndi\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"blake2\",\n+                            \"content\",\n+                            \"cryptography\",\n+                            \"hash\",\n+                            \"md5\",\n+                            \"sha\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n+                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n+                                \"name\": \"content_<algorithm>\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n-                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n-                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n-                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n+                            \"@OnScheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n+                                \"displayName\": \"@OnScheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n+                                \"name\": \"@OnScheduled Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n+                            \"@OnStopped Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n+                                \"displayName\": \"@OnStopped Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n+                                \"name\": \"@OnStopped Pause Time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n+                            \"@OnUnscheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n+                                \"displayName\": \"@OnUnscheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"@OnUnscheduled Pause Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"Content Size\": {\n+                                \"defaultValue\": \"1 KB\",\n+                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n+                                \"displayName\": \"Content Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Type\": {\n+                            \"CustomValidate Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n+                                \"displayName\": \"CustomValidate Pause Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CustomValidate Pause Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fail When @OnScheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n+                                \"displayName\": \"Fail When @OnScheduled called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Fail When @OnScheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Durable subscription\": {\n+                            \"Fail When @OnStopped called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createDurableConsumer-javax.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Durable Subscription\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n+                                \"displayName\": \"Fail When @OnStopped called\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Durable subscription\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Fail When @OnStopped called\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Error Queue Name\": {\n-                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n-                                \"displayName\": \"Error Queue Name\",\n+                            \"Fail When @OnUnscheduled called\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n+                                \"displayName\": \"Fail When @OnUnscheduled called\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Error Queue Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Fail When @OnUnscheduled called\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n-                                \"displayName\": \"Message Selector\",\n+                            \"FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"FlowFile Exception Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Exception Class\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to throw exception.\",\n+                                \"displayName\": \"FlowFile Exception Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"FlowFile Failure Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n+                                \"displayName\": \"FlowFile Failure Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Session Cache size\": {\n+                            \"FlowFile Rollback Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n+                                \"displayName\": \"FlowFile Rollback Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFile Rollback Penalty Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n+                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFile Rollback Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n+                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Yield Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FlowFile Success Iterations\": {\n                                 \"defaultValue\": \"1\",\n-                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n-                                \"displayName\": \"Session Cache Size\",\n+                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n+                                \"displayName\": \"FlowFile Success Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Cache size\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Success Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared subscription\": {\n+                            \"Ignore Interrupts When Paused\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createSharedConsumer-javax.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Shared Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Shared subscription\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Subscription Name\": {\n-                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n-                                \"displayName\": \"Subscription Name\",\n+                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n+                                \"displayName\": \"Ignore Interrupts When Paused\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Subscription Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Interrupts When Paused\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"No FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"No FlowFile Exception Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Exception Class\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n+                            \"No FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Exception Iterations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Exception Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n+                            \"No FlowFile Skip Iterations\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Skip Iterations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Skip Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                            \"No FlowFile Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to yield if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Yield Iterations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"No FlowFile Yield Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n+                            \"OnTrigger Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n+                                \"displayName\": \"OnTrigger Pause Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"OnTrigger Pause Time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Write Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to write to the FlowFile\",\n+                                \"displayName\": \"Write Iterations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Write Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                            {\n+                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"FlowFile\",\n+                            \"debug\",\n+                            \"flow\",\n+                            \"processor\",\n+                            \"test\",\n+                            \"utility\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n+                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The name of each user-defined property must be a valid RecordPath.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"RecordPath\",\n+                                \"value\": \"An expression language statement used to determine how the RecordPath is resolved. The following variables are availible: ${field.name}, ${field.value}, ${field.type}\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"bloom-filter-certainty\": {\n+                                \"defaultValue\": \"0.10\",\n+                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n+                                \"displayName\": \"Bloom Filter Certainty\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bloom-filter-certainty\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                            \"cache-identifier\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"This option defines a record path operation to use for defining the cache identifier. It can be used in addition to the hash settings. This field will have the expression language attribute \\\"record.hash.value\\\" available to it to use with it to generate the record path operation.\",\n+                                \"displayName\": \"Cache Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"cache-identifier\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                            \"deduplication-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Single File\",\n+                                        \"value\": \"single\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Multiple Files\",\n+                                        \"value\": \"multiple\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"The strategy to use for detecting and isolating duplicate records. The option for doing it across a single data file will operate in memory, whereas the one for going across the enter repository will require a distributed map cache.\",\n+                                \"displayName\": \"Deduplication Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"deduplication-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"distributed-map-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"This configuration is required when the deduplication strategy is set to 'multiple files.' The map cache will be used to check a data source such as HBase or Redis for entries indicating that a record has been processed before. This option requires a downstream process that uses PutDistributedMapCache to write an entry to the cache data source once the record has been processed to indicate that it has been handled before.\",\n+                                \"displayName\": \"Distributed Map Cache client\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n+                                \"name\": \"distributed-map-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n+                            \"filter-capacity-hint\": {\n+                                \"defaultValue\": \"25000\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"bloom-filter\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filter Type\",\n+                                        \"propertyName\": \"filter-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n+                                \"displayName\": \"Filter Capacity Hint\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"filter-capacity-hint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                            \"filter-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance  loaded into memory when this processor is running.\",\n+                                        \"displayName\": \"HashSet\",\n+                                        \"value\": \"hash-set\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n+                                        \"displayName\": \"BloomFilter\",\n+                                        \"value\": \"bloom-filter\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"hash-set\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"single\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n+                                \"displayName\": \"Filter Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"filter-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"output-strategy\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the message to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Appender\",\n-                                        \"value\": \"USE_APPENDER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-hashing-algorithm\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with tildes (~) to form the unique record key. This may use significantly more storage depending on the size and shape or your data.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The SHA-256 cryptographic hash algorithm.\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The SHA-512 cryptographic hash algorithm.\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n                                     }\n                                 ],\n-                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The algorithm used to hash the combined set of resolved RecordPath values for cache storage.\",\n+                                \"displayName\": \"Record Hashing Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"record-hashing-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n@@ -74505,1086 +73948,1681 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Records detected as duplicates in the FlowFile content will be routed to this relationship\",\n+                                \"name\": \"duplicate\"\n                             },\n                             {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"If the record was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"non-duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input FlowFile is sent to this relationship unless there is a fatal error in the processing.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n+                                \"resource\": \"MEMORY\"\n+                            },\n+                            {\n+                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n+                                \"resource\": \"CPU\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"consume\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"message\",\n-                            \"receive\"\n+                            \"change\",\n+                            \"dedupe\",\n+                            \"distinct\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"filter\",\n+                            \"hash\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"replace\",\n+                            \"text\",\n+                            \"unique\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n+                        \"typeDescription\": \"This processor attempts to deduplicate a record set in memory using either a hashset or a bloom filter. It operates on a per-file basis rather than across an entire data set that spans multiple files.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The JMSDeliveryMode from the message header.\",\n-                                \"name\": \"jms_deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSExpiration from the message header.\",\n-                                \"name\": \"jms_expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSPriority from the message header.\",\n-                                \"name\": \"jms_priority\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSRedelivered from the message header.\",\n-                                \"name\": \"jms_redelivered\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSTimestamp from the message header.\",\n-                                \"name\": \"jms_timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSCorrelationID from the message header.\",\n-                                \"name\": \"jms_correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSMessageID from the message header.\",\n-                                \"name\": \"jms_messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSType from the message header.\",\n-                                \"name\": \"jms_type\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSReplyTo from the message header.\",\n-                                \"name\": \"jms_replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSDestination from the message header.\",\n-                                \"name\": \"jms_destination\"\n-                            },\n-                            {\n-                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n-                                \"name\": \"jms.messagetype\"\n-                            },\n-                            {\n-                                \"description\": \"Each message property is written to an attribute.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"The number of records processed.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n+                            \"Age Off Duration\": {\n+                                \"description\": \"Time interval to age off cached FlowFiles\",\n+                                \"displayName\": \"Age Off Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n+                                \"name\": \"Age Off Duration\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Type\": {\n+                            \"Cache The Entry Identifier\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n+                                \"displayName\": \"Cache The Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Cache The Entry Identifier\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Session Cache size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n-                                \"displayName\": \"Session Cache Size\",\n+                            \"FlowFile Description\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n+                                \"displayName\": \"FlowFile Description\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Cache size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"FlowFile Description\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n+                                \"name\": \"duplicate\"\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"non-duplicate\"\n                             },\n-                            \"allow-illegal-chars-in-jms-header-names\": {\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"dedupe\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"hash\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n+                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n+                                \"name\": \"original.flowfile.description\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The relationship name (positive number)\",\n+                                \"value\": \"The relationship Weight (positive number)\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n+                            \"name\": \"A number 1..<Number Of Relationships>\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Distribution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n+                                        \"displayName\": \"round robin\",\n+                                        \"value\": \"round robin\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n+                                        \"displayName\": \"next available\",\n+                                        \"value\": \"next available\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Relationship selection is distributed by supplied LoadDistributionService Controller Service; at least one relationship must be available.\",\n+                                        \"displayName\": \"load distribution service\",\n+                                        \"value\": \"load distribution service\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n+                                        \"displayName\": \"overflow\",\n+                                        \"value\": \"overflow\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n-                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n+                                \"defaultValue\": \"round robin\",\n+                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n+                                \"displayName\": \"Distribution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n+                                \"name\": \"Distribution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-send-as-jms-headers-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n-                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n+                            \"Number of Relationships\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n+                                \"displayName\": \"Number of Relationships\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"name\": \"Number of Relationships\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Where to route flowfiles for this relationship index\",\n+                                \"name\": \"1\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"distribute\",\n+                            \"load balance\",\n+                            \"round robin\",\n+                            \"route\",\n+                            \"weighted\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": true,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n+                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n+                                \"name\": \"distribute.load.relationship\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Number of Copies\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n+                                \"displayName\": \"Number of Copies\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Number of Copies\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"duplicate\",\n+                            \"load\",\n+                            \"test\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n+                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n+                                \"name\": \"copy.index\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"base64\",\n+                                        \"value\": \"base64\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"base32\",\n+                                        \"value\": \"base32\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"hex\",\n+                                        \"value\": \"hex\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"base64\",\n+                                \"description\": \"Specifies the type of encoding used\",\n+                                \"displayName\": \"Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Encode\",\n+                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"base64\",\n+                            \"decode\",\n+                            \"encode\",\n+                            \"hex\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n+                        \"typeDescription\": \"Encode or decode contents using configurable encoding schemes\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Encryption Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"org.apache.nifi.security.util.EncryptionMethod@5983a9fd[Algorithm name=PBEWITHMD5AND128BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_128AES\",\n+                                        \"value\": \"MD5_128AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND192BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_192AES\",\n+                                        \"value\": \"MD5_192AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND256BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_256AES\",\n+                                        \"value\": \"MD5_256AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_DES\",\n+                                        \"value\": \"MD5_DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"MD5_RC2\",\n+                                        \"value\": \"MD5_RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA1_RC2\",\n+                                        \"value\": \"SHA1_RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA1_DES\",\n+                                        \"value\": \"SHA1_DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128AES\",\n+                                        \"value\": \"SHA_128AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_192AES\",\n+                                        \"value\": \"SHA_192AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_256AES\",\n+                                        \"value\": \"SHA_256AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_40RC2\",\n+                                        \"value\": \"SHA_40RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128RC2\",\n+                                        \"value\": \"SHA_128RC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_40RC4\",\n+                                        \"value\": \"SHA_40RC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_128RC4\",\n+                                        \"value\": \"SHA_128RC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_128AES\",\n+                                        \"value\": \"SHA256_128AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_192AES\",\n+                                        \"value\": \"SHA256_192AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA256_256AES\",\n+                                        \"value\": \"SHA256_256AES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND2-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_2KEYTRIPLEDES\",\n+                                        \"value\": \"SHA_2KEYTRIPLEDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND3-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_3KEYTRIPLEDES\",\n+                                        \"value\": \"SHA_3KEYTRIPLEDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAANDTWOFISH-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"SHA_TWOFISH\",\n+                                        \"value\": \"SHA_TWOFISH\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PGP,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"PGP\",\n+                                        \"value\": \"PGP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=PGP-ASCII-ARMOR,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n+                                        \"displayName\": \"PGP_ASCII_ARMOR\",\n+                                        \"value\": \"PGP_ASCII_ARMOR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CBC_NO_PADDING\",\n+                                        \"value\": \"AES_CBC_NO_PADDING\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/PKCS7Padding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CBC\",\n+                                        \"value\": \"AES_CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CTR/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_CTR\",\n+                                        \"value\": \"AES_CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"EncryptionMethod[Algorithm name=AES/GCM/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n+                                        \"displayName\": \"AES_GCM\",\n+                                        \"value\": \"AES_GCM\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"AES_GCM\",\n+                                \"description\": \"The Encryption Algorithm to use\",\n+                                \"displayName\": \"Encryption Algorithm\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Encryption Algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Encrypt\",\n+                                        \"value\": \"Encrypt\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Decrypt\",\n+                                        \"value\": \"Decrypt\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Encrypt\",\n+                                \"description\": \"Specifies whether the content should be encrypted or decrypted\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                            \"Password\": {\n+                                \"description\": \"The Password to use for encrypting or decrypting the data\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.factory.initial\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                            \"allow-weak-crypto\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Operation will not be blocked and no alerts will be presented when unsafe combinations of encryption algorithms and passwords are provided\",\n+                                        \"displayName\": \"Allowed\",\n+                                        \"value\": \"allowed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When set, operation will be blocked and alerts will be presented to the user if unsafe combinations of encryption algorithms and passwords are provided on a JVM with limited strength crypto. To fix this, see the Admin Guide.\",\n+                                        \"displayName\": \"Not Allowed\",\n+                                        \"value\": \"not-allowed\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"not-allowed\",\n+                                \"description\": \"Overrides the default behavior to prevent unsafe combinations of encryption algorithms and short passwords on JVMs with limited strength cryptographic jurisdiction policies\",\n+                                \"displayName\": \"Allow insecure cryptographic modes\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"allow-weak-crypto\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"key-derivation-function\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The cipher is given a raw key conforming to the algorithm specifications\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 @ 1000 iterations\",\n+                                        \"displayName\": \"NiFi Legacy KDF\",\n+                                        \"value\": \"NIFI_LEGACY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Single iteration MD5 compatible with PKCS#5 v1.5\",\n+                                        \"displayName\": \"OpenSSL EVP_BytesToKey\",\n+                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bcrypt with configurable work factor. See Admin Guide\",\n+                                        \"displayName\": \"Bcrypt\",\n+                                        \"value\": \"BCRYPT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Scrypt with configurable cost parameters. See Admin Guide\",\n+                                        \"displayName\": \"Scrypt\",\n+                                        \"value\": \"SCRYPT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PBKDF2 with configurable hash function and iteration count. See Admin Guide\",\n+                                        \"displayName\": \"PBKDF2\",\n+                                        \"value\": \"PBKDF2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Argon2 with configurable cost parameters. See Admin Guide.\",\n+                                        \"displayName\": \"Argon2\",\n+                                        \"value\": \"ARGON2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key derivation function to generate the key from the password (and salt)\",\n+                                \"displayName\": \"Key Derivation Function\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n+                                \"name\": \"key-derivation-function\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-body-type\": {\n+                            \"pgp-symmetric-cipher\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"bytes\",\n-                                        \"value\": \"bytes\"\n+                                        \"displayName\": \"IDEA\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"displayName\": \"TRIPLE_DES\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAST5\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLOWFISH\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TWOFISH\",\n+                                        \"value\": \"10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAMELLIA_128\",\n+                                        \"value\": \"11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAMELLIA_192\",\n+                                        \"value\": \"12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAMELLIA_256\",\n+                                        \"value\": \"13\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"bytes\",\n-                                \"description\": \"The type of JMS message body to construct.\",\n-                                \"displayName\": \"Message Body Type\",\n+                                \"defaultValue\": \"7\",\n+                                \"description\": \"When using PGP encryption, this is the symmetric cipher to be used. This property is ignored if Encryption Algorithm is not PGP or PGP-ASCII-ARMOR\\nNote that the provided cipher is only used duringthe encryption phase, while it is inferred from the ciphertext in the decryption phase\",\n+                                \"displayName\": \"PGP Symmetric Cipher\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-body-type\",\n-                                \"required\": true,\n+                                \"name\": \"pgp-symmetric-cipher\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                            \"private-keyring-file\": {\n+                                \"description\": \"In a PGP decrypt mode, this keyring contains the private key of the recipient\",\n+                                \"displayName\": \"Private Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"private-keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"private-keyring-passphrase\": {\n+                                \"description\": \"In a PGP decrypt mode, this is the private keyring passphrase\",\n+                                \"displayName\": \"Private Keyring Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"naming.factory.libraries\",\n+                                \"name\": \"private-keyring-passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"public-key-user-id\": {\n+                                \"description\": \"In a PGP encrypt mode, this user id of the recipient\",\n+                                \"displayName\": \"Public Key User Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"public-key-user-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"public-keyring-file\": {\n+                                \"description\": \"In a PGP encrypt mode, this keyring contains the public key of the recipient\",\n+                                \"displayName\": \"Public Keyring File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"public-keyring-file\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"raw-key-hex\": {\n+                                \"description\": \"In keyed encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Raw Key (hexadecimal)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"raw-key-hex\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"readsAttributes\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n-                                \"name\": \"jms_deliveryMode\"\n+                                \"description\": \"Any FlowFile that is successfully encrypted or decrypted will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be an integer.\",\n-                                \"name\": \"jms_expiration\"\n+                                \"description\": \"Any FlowFile that cannot be encrypted or decrypted will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"Argon2\",\n+                            \"Bcrypt\",\n+                            \"JCE\",\n+                            \"KDF\",\n+                            \"PBKDF2\",\n+                            \"Scrypt\",\n+                            \"decryption\",\n+                            \"encryption\",\n+                            \"iv\",\n+                            \"password\",\n+                            \"salt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EncryptContent\",\n+                        \"typeDescription\": \"Encrypts or Decrypts a FlowFile using either symmetric encryption with a raw key or password and randomly generated salt, or asymmetric encryption using a public and secret key.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"\\\"encrypted\\\" or \\\"decrypted\\\" depending on the processor action\",\n+                                \"name\": \"encryptcontent.action\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n-                                \"name\": \"jms_priority\"\n+                                \"description\": \"The algorithm used for the cryptographic operation\",\n+                                \"name\": \"encryptcontent.algorithm\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n-                                \"name\": \"jms_redelivered\"\n+                                \"description\": \"The cipher text length in bytes (including IV, salt, and delimiters if present). Determined from incoming content in decrypt mode; outgoing content in encrypt mode\",\n+                                \"name\": \"encryptcontent.cipher_text_length\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n-                                \"name\": \"jms_timestamp\"\n+                                \"description\": \"The Initialization Vector in hex encoding (if present)\",\n+                                \"name\": \"encryptcontent.iv\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n-                                \"name\": \"jms_correlationId\"\n+                                \"description\": \"The IV length in bytes\",\n+                                \"name\": \"encryptcontent.iv_length\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n-                                \"name\": \"jms_type\"\n+                                \"description\": \"The Key Derivation Function used if Password-Based Encryption was enabled. See Admin Guide - Key Derivation Functions\",\n+                                \"name\": \"encryptcontent.kdf\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n-                                \"name\": \"jms_replyTo\"\n+                                \"description\": \"The KDF-specific salt including algorithm and cost parameters (if present). See Admin Guide - Key Derivation Functions\",\n+                                \"name\": \"encryptcontent.kdf_salt\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n-                                \"name\": \"jms_destination\"\n+                                \"description\": \"The KDF salt length in bytes\",\n+                                \"name\": \"encryptcontent.kdf_salt_length\"\n                             },\n                             {\n-                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"The number of iterations used in PBKDF2 KDF (if present). PBKDF2 does not encode the cost parameter in a custom salt\",\n+                                \"name\": \"encryptcontent.pbkdf2_iterations\"\n                             },\n                             {\n-                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n-                                \"name\": \"other attributes .type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                                \"description\": \"The plaintext length in bytes. Determined from incoming content in encrypt mode; outgoing content in decrypt mode\",\n+                                \"name\": \"encryptcontent.plaintext_length\"\n+                            },\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The raw salt in hex encoding (if present)\",\n+                                \"name\": \"encryptcontent.salt\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n+                                \"description\": \"The raw salt length in bytes\",\n+                                \"name\": \"encryptcontent.salt_length\"\n+                            },\n                             {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"description\": \"The timestamp at which the cryptographic operation occurred in 'yyyy-MM-dd HH:mm:ss.SSS Z' format\",\n+                                \"name\": \"encryptcontent.timestamp\"\n                             }\n-                        ],\n-                        \"tags\": [\n-                            \"jms\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"put\",\n-                            \"send\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n-                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cluster Max Redirects\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n-                                \"displayName\": \"Cluster Max Redirects\",\n+                            \"batch-count\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n+                                \"displayName\": \"Batch Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster Max Redirects\",\n+                                \"name\": \"batch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communication Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n-                                \"displayName\": \"Communication Timeout\",\n+                            \"group-id\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Group Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communication Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"group-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection String\": {\n-                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n-                                \"displayName\": \"Connection String\",\n+                            \"inactive-timeout\": {\n+                                \"defaultValue\": \"30 min\",\n+                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n+                                \"displayName\": \"Inactive Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Connection String\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"inactive-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Index\": {\n+                            \"initial-order\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n-                                \"displayName\": \"Database Index\",\n+                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n+                                \"displayName\": \"Initial Order\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Database Index\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"initial-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used to authenticate to the Redis server. See the requirepass property in redis.conf.\",\n-                                \"displayName\": \"Password\",\n+                            \"maximum-order\": {\n+                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n+                                \"displayName\": \"Maximum Order\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"maximum-order\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Pool - Block When Exhausted\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n-                                \"displayName\": \"Pool - Block When Exhausted\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Block When Exhausted\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Max Idle\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n-                                \"displayName\": \"Pool - Max Idle\",\n+                            \"order-attribute\": {\n+                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Order Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Idle\",\n+                                \"name\": \"order-attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Max Total\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n-                                \"displayName\": \"Pool - Max Total\",\n+                            \"wait-timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n+                                \"displayName\": \"Wait Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Total\",\n+                                \"name\": \"wait-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n+                                \"name\": \"overtook\"\n                             },\n-                            \"Pool - Max Wait Time\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n-                                \"displayName\": \"Pool - Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n+                                \"name\": \"skipped\"\n                             },\n-                            \"Pool - Min Evictable Idle Time\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Evictable Idle Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Pool - Min Idle\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n-                                \"displayName\": \"Pool - Min Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n+                                \"name\": \"wait\"\n                             },\n-                            \"Pool - Num Tests Per Eviction Run\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n-                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"order\",\n+                            \"sort\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n+                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n+                                \"name\": \"EnforceOrder.startedAt\"\n                             },\n-                            \"Pool - Test On Borrow\": {\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n+                                \"name\": \"EnforceOrder.result\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n+                                \"name\": \"EnforceOrder.detail\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n+                                \"name\": \"EnforceOrder.expectedOrder\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n+                                \"value\": \"A JsonPath expression\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n-                                \"displayName\": \"Pool - Test On Borrow\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Borrow\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Create\": {\n+                            \"Null Value Representation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon creation.\",\n-                                \"displayName\": \"Pool - Test On Create\",\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Create\",\n+                                \"name\": \"Null Value Representation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Return\": {\n+                            \"Path Not Found Behavior\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n-                                \"displayName\": \"Pool - Test On Return\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Return\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Test While Idle\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"skip\",\n+                                        \"value\": \"skip\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not connections should be tested while idle.\",\n-                                \"displayName\": \"Pool - Test While Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test While Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Time Between Eviction Runs\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n-                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n+                                \"defaultValue\": \"ignore\",\n+                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n+                                \"displayName\": \"Path Not Found Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"name\": \"Path Not Found Behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redis Mode\": {\n+                            \"Return Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A single standalone Redis instance.\",\n-                                        \"displayName\": \"Standalone\",\n-                                        \"value\": \"Standalone\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n-                                        \"displayName\": \"Sentinel\",\n-                                        \"value\": \"Sentinel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"json\",\n+                                        \"value\": \"json\"\n                                     },\n                                     {\n-                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n-                                        \"displayName\": \"Cluster\",\n-                                        \"value\": \"Cluster\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"scalar\",\n+                                        \"value\": \"scalar\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standalone\",\n-                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n-                                \"displayName\": \"Redis Mode\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redis Mode\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Sentinel Master\": {\n-                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n-                                \"displayName\": \"Sentinel Master\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sentinel Master\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-redis-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"redis\"\n+                            \"JSON\",\n+                            \"JsonPath\",\n+                            \"evaluate\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n-                        \"typeDescription\": \"A service that provides connections to Redis.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n+                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XPath expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"redis-cache-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n-                                \"displayName\": \"TTL\",\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-cache-ttl\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"nodeset\",\n+                                        \"value\": \"nodeset\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"Validate DTD\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Validate DTD\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"redis\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"evaluate\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-tcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n+                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-tcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Sets a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute to set\",\n-                                \"value\": \"The value to set it to\"\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XQuery\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"connection-attempt-timeout\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The number of times to try and establish a connection, before using a backup host if available. This same attempt count would be used for a backup host as well.\",\n-                                \"displayName\": \"Connection Attempt Count\",\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connection-attempt-timeout\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"end-of-message-byte\": {\n-                                \"defaultValue\": \"13\",\n-                                \"description\": \"Byte value which denotes end of message. Must be specified as integer within the valid byte range (-128 thru 127). For example, '13' = Carriage return and '10' = New line. Default '13'.\",\n-                                \"displayName\": \"End of message delimiter byte\",\n+                            \"Output: Indent\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n+                                \"displayName\": \"Output: Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"end-of-message-byte\",\n+                                \"name\": \"Output: Indent\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"endpoint-list\": {\n-                                \"description\": \"A comma delimited list of the endpoints to connect to. The format should be <server_address>:<port>. Only one server will be connected to at a time, the others will be used as fail overs.\",\n-                                \"displayName\": \"Endpoint List\",\n+                            \"Output: Method\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xml\",\n+                                        \"value\": \"xml\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"html\",\n+                                        \"value\": \"html\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"xml\",\n+                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n+                                \"displayName\": \"Output: Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"endpoint-list\",\n+                                \"name\": \"Output: Method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"receive-buffer-size\": {\n-                                \"defaultValue\": \"16MB\",\n-                                \"description\": \"The size of the buffer to receive data in. Default 16384 (16MB).\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"Output: Omit XML Declaration\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n+                                \"displayName\": \"Output: Omit XML Declaration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"receive-buffer-size\",\n-                                \"required\": false,\n+                                \"name\": \"Output: Omit XML Declaration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reconnect-interval\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The number of seconds to wait before attempting to reconnect to the endpoint.\",\n-                                \"displayName\": \"Reconnect interval\",\n+                            \"Validate DTD\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reconnect-interval\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The relationship that all incomplete messages from the endpoint will be sent to. Incomplete message is the message that doesn't end with 'End of message delimiter byte'. This can happen when 'Receive Buffer Size' is smaller then the incoming message. If that happens that the subsequent message that completes the previous incomplete message will also end up in this relationship, after which subsequent 'complete' messages will go to 'success'.\",\n-                                \"name\": \"Partial\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The relationship that all sucessful messages from the endpoint will be sent to.\",\n-                                \"name\": \"Success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"poll\",\n-                            \"source\",\n-                            \"tcp\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"XQuery\",\n+                            \"evaluate\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gettcp.GetTCP\",\n-                        \"typeDescription\": \"Connects over TCP to the provided endpoint(s). Received data will be written as content to the FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n+                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The address of the source endpoint the message came from\",\n-                                \"name\": \"source.endpoint\"\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n+                                \"name\": \"user-defined\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-language-translation-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-language-translation-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75594,3705 +75632,3735 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n-                                \"value\": \"The value to translate\"\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data to be translated\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \" \",\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Argument Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Language\": {\n-                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n-                                \"displayName\": \"Input Language\",\n+                            \"Batch Duration\": {\n+                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n+                                \"displayName\": \"Batch Duration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Language\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Duration\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Target Language\": {\n-                                \"defaultValue\": \"en\",\n-                                \"description\": \"The language to translate the text into\",\n-                                \"displayName\": \"Target Language\",\n+                            \"Command\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Target Language\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Command\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Content\": {\n+                            \"Command Arguments\": {\n+                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n+                                \"displayName\": \"Command Arguments\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Command Arguments\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Redirect Error Stream\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n-                                \"displayName\": \"Translate Content\",\n+                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n+                                \"displayName\": \"Redirect Error Stream\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Content\",\n-                                \"required\": true,\n+                                \"name\": \"Redirect Error Stream\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Yandex API Key\": {\n-                                \"description\": \"The API Key that is registered with Yandex\",\n-                                \"displayName\": \"Yandex API Key\",\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Yandex API Key\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Working Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n-                                \"name\": \"translation.failure\"\n-                            },\n-                            {\n-                                \"description\": \"This relationship is used when the translation is successful\",\n+                                \"description\": \"All created FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n-                                \"name\": \"comms.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"language\",\n-                            \"translate\",\n-                            \"translation\",\n-                            \"yandex\"\n+                            \"command\",\n+                            \"external\",\n+                            \"invoke\",\n+                            \"process\",\n+                            \"script\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n-                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n+                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n-                                \"name\": \"yandex.translate.failure.reason\"\n+                                \"description\": \"Executed command\",\n+                                \"name\": \"command\"\n                             },\n                             {\n-                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n-                                \"name\": \"language\"\n+                                \"description\": \"Arguments of the command\",\n+                                \"name\": \"command.arguments\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-poi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n                                     },\n                                     {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"custom\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Header Line\": {\n+                            \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not the CSV column names should be written out as the first line.\",\n-                                \"displayName\": \"Include Header Line\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Header Line\",\n+                                \"name\": \"dbf-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Trailing Delimiter\": {\n+                            \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If true, a trailing delimiter will be added to each CSV Record that is written. If false, the trailing delimiter will be omitted.\",\n-                                \"displayName\": \"Include Trailing Delimiter\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Trailing Delimiter\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null String\": {\n-                                \"dependencies\": [\n+                            \"esql-auto-commit\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies a String that, if present as a value in the CSV, should be considered a null field instead of using the literal value.\",\n-                                \"displayName\": \"Null String\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\n+                                \"name\": \"esql-auto-commit\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"name\": \"esql-fetch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"esql-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-post-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.row.count\"\n+                            },\n+                            {\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.duration\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n+                                \"name\": \"executesql.query.executiontime\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"dependencies\": [\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-user-logical-types\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Separator\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"esql-auto-commit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"esql-auto-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"name\": \"esql-fetch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"excel-extract-column-to-skip\": {\n-                                \"description\": \"Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.\",\n-                                \"displayName\": \"Columns To Skip\",\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"excel-extract-column-to-skip\",\n-                                \"required\": false,\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"excel-extract-first-row\": {\n+                            \"esql-output-batch-size\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.\",\n-                                \"displayName\": \"Number of Rows to Skip\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"excel-extract-first-row\",\n+                                \"name\": \"esql-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"excel-format-values\": {\n+                            \"esqlrecord-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Should the cell values be written to CSV using the formatting applied in Excel, or should they be printed as raw values.\",\n-                                \"displayName\": \"Format Cell Values\",\n+                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"excel-format-values\",\n+                                \"name\": \"esqlrecord-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"extract-sheets\": {\n-                                \"description\": \"Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. The list of names is case in-sensitive. Any sheets not specified in this value will be ignored. A bulletin will be generated if a specified sheet(s) are not found.\",\n-                                \"displayName\": \"Sheets to Extract\",\n+                            \"esqlrecord-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"esqlrecord-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"extract-sheets\",\n+                                \"name\": \"sql-post-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Original Excel document received by this processor\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n                             },\n                             {\n-                                \"description\": \"Excel data converted to csv\",\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failed to parse the Excel document\",\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"csv\",\n-                            \"excel\",\n-                            \"poi\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.poi.ConvertExcelToCSVProcessor\",\n-                        \"typeDescription\": \"Consumes a Microsoft Excel document and converts each worksheet to csv. Each sheet from the incoming Excel document will generate a new Flowfile that will be output from this processor. Each output Flowfile's contents will be formatted as a csv file where the each row from the excel sheet is output as a newline in the csv file. This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents. This processor also expects well formatted CSV content and will not escape cell's containing invalid content such as newlines or additional commas.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Excel sheet that this particular row of data came from in the Excel document\",\n-                                \"name\": \"sheetname\"\n+                                \"description\": \"Contains the number of rows returned in the select query\",\n+                                \"name\": \"executesql.row.count\"\n                             },\n                             {\n-                                \"description\": \"The number of rows in this Excel Sheet\",\n-                                \"name\": \"numrows\"\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.duration\"\n                             },\n                             {\n-                                \"description\": \"The name of the Excel document file that this data originated from\",\n-                                \"name\": \"sourcefilename\"\n+                                \"description\": \"Duration of the query execution time in milliseconds\",\n+                                \"name\": \"executesql.query.executiontime\"\n                             },\n                             {\n-                                \"description\": \"Error message that was encountered on a per Excel sheet basis. This attribute is only populated if an error was occured while processing the particular sheet. Having the error present at the sheet level will allow for the end user to better understand what syntax errors in their excel doc on a larger scale caused the error.\",\n-                                \"name\": \"convertexceltocsvprocessor.error\"\n+                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records output by the Record Writer.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"The name of a Request Header to add\",\n-                                \"value\": \"The value of the Header\"\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            },\n+                            {\n+                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"command.argument.<commandIndex>\",\n+                                \"value\": \"Argument to be supplied to the command\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"api-key\": {\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \";\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"API_KEY\"\n+                                            \"Command Arguments Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Encoded API key.\",\n-                                \"displayName\": \"API Key\",\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Argument Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"api-key-id\": {\n+                            \"Command Arguments\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"API_KEY\"\n+                                            \"Command Arguments Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Unique identifier of the API key.\",\n-                                \"displayName\": \"API Key ID\",\n+                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n+                                \"displayName\": \"Command Arguments\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Command Arguments\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Command Path\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Command Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore STDIN\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n+                                \"displayName\": \"Ignore STDIN\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key-id\",\n+                                \"name\": \"Ignore STDIN\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-scheme\": {\n+                            \"Max Attribute Length\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Attribute Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Attribute Length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Destination Attribute\": {\n+                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n+                                \"displayName\": \"Output Destination Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Destination Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Working Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"argumentsStrategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No authorization scheme.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n+                                        \"displayName\": \"Command Arguments Property\",\n+                                        \"value\": \"Command Arguments Property\"\n                                     },\n                                     {\n-                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n-                                        \"displayName\": \"PKI\",\n-                                        \"value\": \"PKI\"\n-                                    },\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n+                                        \"displayName\": \"Dynamic Property Arguments\",\n+                                        \"value\": \"Dynamic Property Arguments\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Command Arguments Property\",\n+                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n+                                \"displayName\": \"Command Arguments Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"argumentsStrategy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n+                                \"name\": \"output stream\"\n+                            },\n+                            {\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n+                                \"name\": \"nonzero status\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"command\",\n+                            \"command execution\",\n+                            \"execute\",\n+                            \"stream\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n+                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the command executed\",\n+                                \"name\": \"execution.command\"\n+                            },\n+                            {\n+                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n+                                \"name\": \"execution.command.args\"\n+                            },\n+                            {\n+                                \"description\": \"The exit status code returned from executing the command\",\n+                                \"name\": \"execution.status\"\n+                            },\n+                            {\n+                                \"description\": \"Any error messages returned from executing the command\",\n+                                \"name\": \"execution.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Basic authorization scheme.\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"API key authorization scheme.\",\n-                                        \"displayName\": \"API Key\",\n-                                        \"value\": \"API_KEY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BASIC\",\n-                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n-                                \"displayName\": \"Authorization Scheme\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-scheme\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n-                                \"displayName\": \"Charset\",\n+                            \"Grok Expression\": {\n+                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n+                                \"displayName\": \"Grok Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-charset\",\n+                                \"name\": \"Grok Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-connect-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n-                                \"displayName\": \"Connect timeout\",\n+                            \"Grok Pattern file\": {\n+                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n+                                \"displayName\": \"Grok Patterns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-connect-timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Grok Pattern file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-enable-compression\": {\n+                            \"Keep Empty Captures\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n-                                \"displayName\": \"Enable Compression\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n+                                \"displayName\": \"Keep Empty Captures\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-enable-compression\",\n+                                \"name\": \"Keep Empty Captures\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-http-hosts\": {\n-                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n-                                \"displayName\": \"HTTP Hosts\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-http-hosts\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-node-selector\": {\n+                            \"Named captures only\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n-                                        \"displayName\": \"Any\",\n-                                        \"value\": \"ANY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n-                                        \"displayName\": \"Skip Dedicated Masters\",\n-                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ANY\",\n-                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n-                                \"displayName\": \"Node Selector\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Only store named captures from grok\",\n+                                \"displayName\": \"Named captures only\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-node-selector\",\n+                                \"name\": \"Named captures only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"el-cs-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password to use with XPack security.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"el-cs-path-prefix\": {\n-                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n-                                \"displayName\": \"Path Prefix\",\n-                                \"dynamic\": false,\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"delimit\",\n+                            \"extract\",\n+                            \"grok\",\n+                            \"log\",\n+                            \"parse\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n+                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n+                                \"name\": \"grok.XXX\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-path-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-retry-timeout\": {\n-                                \"defaultValue\": \"60000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when retrying the operation.\",\n-                                \"displayName\": \"Retry timeout\",\n+                                \"name\": \"A FlowFile attribute\",\n+                                \"value\": \"A Regular Expression with one or more capturing group\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-retry-timeout\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-send-meta-header\": {\n+                            \"Enable Canonical Equivalence\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n-                                \"displayName\": \"Send Meta Header\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n+                                \"displayName\": \"Enable Canonical Equivalence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-send-meta-header\",\n+                                \"name\": \"Enable Canonical Equivalence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-cluster-nodes\": {\n+                            \"Enable Case-insensitive Matching\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n-                                \"displayName\": \"Sniff Cluster Nodes\",\n+                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n+                                \"displayName\": \"Enable Case-insensitive Matching\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-cluster-nodes\",\n+                                \"name\": \"Enable Case-insensitive Matching\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-failure\": {\n+                            \"Enable DOTALL Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n-                                \"displayName\": \"Sniff on Failure\",\n+                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n+                                \"displayName\": \"Enable DOTALL Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-failure\",\n+                                \"name\": \"Enable DOTALL Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-failure-delay\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"dependencies\": [\n+                            \"Enable Literal Parsing of the Pattern\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff on Failure\",\n-                                        \"propertyName\": \"el-cs-sniff-failure\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n-                                \"displayName\": \"Sniffer Failure Delay\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n+                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-failure-delay\",\n+                                \"name\": \"Enable Literal Parsing of the Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-interval\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"dependencies\": [\n+                            \"Enable Multiline Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Interval between Cluster sniffer operations\",\n-                                \"displayName\": \"Sniffer Interval\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n+                                \"displayName\": \"Enable Multiline Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-interval\",\n+                                \"name\": \"Enable Multiline Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-request-timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"dependencies\": [\n+                            \"Enable Unicode Predefined Character Classes\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Cluster sniffer timeout for node info requests\",\n-                                \"displayName\": \"Sniffer Request Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-request-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-socket-timeout\": {\n-                                \"defaultValue\": \"60000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n-                                \"displayName\": \"Read timeout\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n+                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-socket-timeout\",\n+                                \"name\": \"Enable Unicode Predefined Character Classes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"el-cs-strict-deprecation\": {\n+                            \"Enable Unicode-aware Case Folding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n-                                \"displayName\": \"Strict Deprecation\",\n+                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n+                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-strict-deprecation\",\n+                                \"name\": \"Enable Unicode-aware Case Folding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-suppress-nulls\": {\n+                            \"Enable Unix Lines Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"always-suppress\",\n-                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n-                                \"displayName\": \"Suppress Null/Empty Values\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n+                                \"displayName\": \"Enable Unix Lines Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"name\": \"Enable Unix Lines Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-username\": {\n-                                \"dependencies\": [\n+                            \"Include Capture Group 0\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The username to use with XPack security.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-cs-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n+                                \"displayName\": \"Include Capture Group 0\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"client\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n-                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client. Uses the Elasticsearch REST Client (7.13.4, the last version before client connections verifythe server is Elastic provided, this should allow for connections to compatible alternatives, e.g. AWS OpenSearch)\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A JSONPath expression\",\n-                                \"value\": \"A Record Path expression\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-index\",\n+                                \"name\": \"Include Capture Group 0\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions.  Files larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Maximum Capture Group Length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters a given capture group value can have.  Any characters beyond the max will be truncated.\",\n+                                \"displayName\": \"Maximum Capture Group Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Maximum Capture Group Length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Permit Whitespace and Comments in Pattern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n+                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"extract-text-enable-named-groups\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the group will be used in the attribute name as opposed to the group index.  All capturing groups must be named, if the number of groups (not including capture group 0) does not equal the number of named groups validation will fail.\",\n+                                \"displayName\": \"Enable named group support\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"extract-text-enable-named-groups\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"extract-text-enable-repeating-capture-group\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n+                                \"displayName\": \"Enable repeating capture group\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"extract-text-enable-repeating-capture-group\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"lookup\",\n-                            \"record\"\n+                            \"Regular Expression\",\n+                            \"Text\",\n+                            \"evaluate\",\n+                            \"extract\",\n+                            \"regex\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n+                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-index\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"el-lookup-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Distributed Cache Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"1.22.0\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n-                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-parquet-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"avro-read-compatibility\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.compatible' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Read Compatibility\",\n+                            \"Max Length To Put In Attribute\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Length To Put In Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-read-compatibility\",\n-                                \"required\": true,\n+                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Cache Value In Attribute\": {\n+                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n+                                \"displayName\": \"Put Cache Value In Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Put Cache Value In Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"not-found\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"parquet\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"fetch\",\n+                            \"map\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parquet.ParquetReader\",\n-                        \"typeDescription\": \"Parses Parquet data and returns each Parquet record as a separate Record object. The schema will come from the Parquet data itself.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n+                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema Write Strategy\": {\n+                            \"Completion Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given a set of 3 attributes to describe the schema: 'schema.identifier', 'schema.version', and 'schema.protocol.version'. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Schema Reference Attributes\",\n-                                        \"value\": \"hwx-schema-ref-attributes\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single byte indicating the 'protocol version', followed by 8 bytes indicating the schema identifier, and finally 4 bytes indicating the schema version, as per the Hortonworks Schema Registry serializers and deserializers, as found at https://github.com/hortonworks/registry. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data.\",\n-                                        \"displayName\": \"HWX Content-Encoded Schema Reference\",\n-                                        \"value\": \"hwx-content-encoded-schema\"\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n                                     },\n                                     {\n-                                        \"description\": \"The content of the FlowFile will contain a reference to a schema in the Schema Registry service. The reference is encoded as a single 'Magic Byte' followed by 4 bytes representing the identifier of the schema, as outlined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html. This will be prepended to each FlowFile. Note that if the schema for a record does not contain the necessary identifier and version, an Exception will be thrown when attempting to write the data. This is based on the encoding used by version 3.2.x of the Confluent Schema Registry.\",\n-                                        \"displayName\": \"Confluent Schema Registry Reference\",\n-                                        \"value\": \"confluent-encoded\"\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-add-list-element-records\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-add-list-element-records\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-write-old-list-structure\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-write-old-list-structure\",\n-                                \"required\": true,\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"enable-dictionary-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n+                                \"name\": \"Internal Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"int96-fields\": {\n-                                \"description\": \"List of fields with full path that should be treated as INT96 timestamps.\",\n-                                \"displayName\": \"INT96 Fields\",\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"int96-fields\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-protocol-version\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The protocol version to be used for Schema Write Strategies that require a protocol version, such as Hortonworks Schema Registry strategies. Valid protocol versions for Hortonworks Schema Registry are integer values 1, 2, or 3.\",\n-                                \"displayName\": \"Schema Protocol Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-protocol-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"confluent-encoded\",\n-                                            \"schema-name\",\n-                                            \"hwx-schema-ref-attributes\",\n-                                            \"hwx-content-encoded-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"writer-version\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n-                                \"required\": false,\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"parquet\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parquet.ParquetRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Parquet format.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"compression-type\": {\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-dictionary-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-validation\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n-                                \"required\": false,\n+                                \"name\": \"ftp-use-utf8\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"writer-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Parquet file that was converted successfully from Avro\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Avro content that could not be processed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"parquet\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.parquet.ConvertAvroToParquet\",\n-                        \"typeDescription\": \"Converts Avro records into Parquet file format. The incoming FlowFile should be a valid avro file. If an incoming FlowFile does not contain any records, an empty parquet file is the output. NOTE: Many Avro datatypes (collections, primitives, and unions of primitives, e.g.) can be converted to parquet, but unions of collections and other complex datatypes may not be able to be converted to Parquet.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the filename to the existing filename with the extension replaced by / added to by .parquet\",\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"ftp.remote.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Sets the number of records in the parquet file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"100 ms\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"read distributed filesystem\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the file system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n+                                \"name\": \"Completion Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filename\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The name of the file to retrieve\",\n-                                \"displayName\": \"Filename\",\n+                            \"File to Fetch\": {\n+                                \"defaultValue\": \"${absolute.path}/${filename}\",\n+                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n+                                \"displayName\": \"File to Fetch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"filename\",\n+                                \"name\": \"File to Fetch\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n+                            \"Log level when file not found\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Log level when file not found\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Log level when permission denied\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case user aman does not have sufficient permissions to read the file\",\n+                                \"displayName\": \"Log level when permission denied\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Log level when permission denied\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The service for writing records to the FlowFile content\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Move Conflict Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n+                                        \"displayName\": \"Rename\",\n+                                        \"value\": \"Rename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n+                                        \"displayName\": \"Replace File\",\n+                                        \"value\": \"Replace File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n+                                        \"displayName\": \"Keep Existing\",\n+                                        \"value\": \"Keep Existing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Rename\",\n+                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n+                                \"displayName\": \"Move Conflict Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Move Conflict Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n+                                \"displayName\": \"Move Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.parquet.PutParquet\"\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.ListFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved, but might be able to be in the future if tried again. This generally indicates that the Fetch should be tried again.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the file\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship if the content of the file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"HDFS\",\n                             \"fetch\",\n+                            \"files\",\n+                            \"filesystem\",\n                             \"get\",\n-                            \"hadoop\",\n                             \"ingest\",\n-                            \"parquet\",\n-                            \"record\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n                             \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.parquet.FetchParquet\",\n-                        \"typeDescription\": \"Reads from a given Parquet file and writes records to the content of the flow file using the selected record writer. The original Parquet file will remain unchanged, and the content of the flow file will be replaced with records of the selected type. This processor can be used with ListHDFS or ListFile to obtain a listing of files to fetch.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from the given filesystem.\",\n-                                \"name\": \"fetch.failure.reason\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n-                            }\n-                        ]\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n+                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-parquet-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"100 ms\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to write any file that NiFi has access to in HDFS or the local filesystem.\",\n-                                \"requiredPermission\": \"write distributed filesystem\"\n-                            }\n-                        ],\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional Classpath Resources\": {\n-                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n-                                \"displayName\": \"Additional Classpath Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional Classpath Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The parent directory to which files should be written. Will be created if it doesn't exist.\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hadoop Configuration Resources\": {\n-                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n-                                \"displayName\": \"Hadoop Configuration Resources\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hadoop Configuration Resources\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": false,\n+                                \"name\": \"Completion Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Relogin Period\": {\n-                                \"defaultValue\": \"4 hours\",\n-                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n-                                \"displayName\": \"Kerberos Relogin Period\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Kerberos Relogin Period\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-add-list-element-records\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.add-list-element-records' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Add List Element Records\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-add-list-element-records\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"avro-write-old-list-structure\": {\n+                            \"Disable Directory Listing\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies the value for 'parquet.avro.write-old-list-structure' in the underlying Parquet library\",\n-                                \"displayName\": \"Avro Write Old List Structure\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-write-old-list-structure\",\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-type\": {\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UNCOMPRESSED\",\n-                                        \"value\": \"UNCOMPRESSED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BROTLI\",\n-                                        \"value\": \"BROTLI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZ4\",\n-                                        \"value\": \"LZ4\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ZSTD\",\n-                                        \"value\": \"ZSTD\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZ4_RAW\",\n-                                        \"value\": \"LZ4_RAW\"\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNCOMPRESSED\",\n-                                \"description\": \"The type of compression for the file being written.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-type\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dictionary-page-size\": {\n-                                \"description\": \"The dictionary page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Dictionary Page Size\",\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dictionary-page-size\",\n-                                \"required\": false,\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dictionary-encoding\": {\n+                            \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether dictionary encoding should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Dictionary Encoding\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dictionary-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-validation\": {\n+                            \"Strict Host Key Checking\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether validation should be enabled for the Parquet writer\",\n-                                \"displayName\": \"Enable Validation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-validation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"max-padding-size\": {\n-                                \"description\": \"The maximum amount of padding that will be used to align row groups with blocks in the underlying filesystem. If the underlying filesystem is not a block filesystem like HDFS, this has no effect. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Max Padding Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"max-padding-size\",\n-                                \"required\": false,\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"overwrite\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to overwrite existing files in the same directory with the same name. When set to false, flow files will be routed to failure when a file exists in the same directory with the same name.\",\n-                                \"displayName\": \"Overwrite Files\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"overwrite\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"page-size\": {\n-                                \"description\": \"The page size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Page Size\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"permissions-umask\": {\n-                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop Configuration dfs.umaskmode\",\n-                                \"displayName\": \"Permissions umask\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"permissions-umask\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading records from incoming flow files.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"remote-group\": {\n-                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n-                                \"displayName\": \"Remote Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remote-group\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"remote-owner\": {\n-                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n-                                \"displayName\": \"Remote Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remote-owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"remove-crc-files\": {\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the corresponding CRC file should be deleted upon successfully writing a Parquet file\",\n-                                \"displayName\": \"Remove CRC Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remove-crc-files\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"row-group-size\": {\n-                                \"description\": \"The row group size used by the Parquet writer. The value is specified in the format of <Data Size> <Data Unit> where Data Unit is one of B, KB, MB, GB, TB.\",\n-                                \"displayName\": \"Row Group Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"row-group-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"writer-version\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_1_0\",\n-                                        \"value\": \"PARQUET_1_0\"\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PARQUET_2_0\",\n-                                        \"value\": \"PARQUET_2_0\"\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version used by Parquet writer\",\n-                                \"displayName\": \"Writer Version\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writer-version\",\n-                                \"required\": false,\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file to write comes from the value of this attribute.\",\n-                                \"name\": \"filename\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n                         ],\n-                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Flow Files that could not be processed due to issues that can be retried are transferred to this relationship\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flow Files that have been successfully processed are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n                             },\n                             {\n-                                \"description\": \"Flow Files that could not be processed due to issue that cannot be retried are transferred to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"HDFS\",\n-                            \"filesystem\",\n-                            \"hadoop\",\n-                            \"parquet\",\n-                            \"put\",\n-                            \"record\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.parquet.PutParquet\",\n-                        \"typeDescription\": \"Reads records from an incoming FlowFile using the provided Record Reader, and writes those records to a Parquet file. The schema for the Parquet file must be provided in the processor properties. This processor will first write a temporary dot file and upon successfully writing every record to the dot file, it will rename the dot file to it's final name. If the dot file cannot be renamed, the rename operation will be attempted up to 10 times, and if still not successful, the dot file will be deleted and the flow file will be routed to failure.  If any error occurs while reading records from the input, or writing records to the output, the entire dot file will be removed and the flow file will be routed to failure or retry, depending on the error.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file is stored in this attribute.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The absolute path to the file is stored in this attribute.\",\n-                                \"name\": \"absolute.hdfs.path\"\n+                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n+                                \"name\": \"sftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n-                                \"name\": \"hadoop.file.url\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"sftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"The number of records written to the Parquet file\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateless-processor-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-stateless-processor-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Any dynamic property that is added will be provided to the stateless flow as a Parameter. The name of the property will be the name of the Parameter, and the value of the property will be the value of the Parameter. Because Parameter values may or may not be sensitive, all dynamic properties will be considered sensitive in order to protect their integrity.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Any Parameter name\",\n-                                \"value\": \"Any value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how long to wait before timing out when attempting to communicate with NiFi Registry\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"flatten-json-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"flatten-json-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Storage Strategy\": {\n+                            \"flatten-json-pretty-print-json\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The FlowFile content will be stored on the NiFi JVM's heap. This is the most efficient option for small FlowFiles but can quickly exhaust the heap with larger FlowFiles, resulting in Out Of Memory Errors and node instability.\",\n-                                        \"displayName\": \"Store Content on Heap\",\n-                                        \"value\": \"Store Content on Heap\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile content will be stored on disk, within the configured Work Directory. The content will still be cleared between invocations and will not be persisted across restarts.\",\n-                                        \"displayName\": \"Store Content on Disk\",\n-                                        \"value\": \"Store Content on Disk\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Store Content on Disk\",\n-                                \"description\": \"Specifies where the content of FlowFiles that the Stateless dataflow is operating on should be stored. Note that the data is always considered temporary and may be deleted at any time. It is not intended to be persisted across restarted.\",\n-                                \"displayName\": \"Content Storage Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Storage Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dataflow File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use Local File\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The filename or URL that specifies the dataflow that is to be run\",\n-                                \"displayName\": \"Dataflow File/URL\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dataflow File\",\n+                                \"name\": \"flatten-json-pretty-print-json\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Dataflow Specification Strategy\": {\n+                            \"flatten-json-return-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Dataflow to run is stored as a file on the NiFi server or at a URL that is accessible to the NiFi server\",\n-                                        \"displayName\": \"Use Local File or URL\",\n-                                        \"value\": \"Use Local File\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flatten\",\n+                                        \"value\": \"flatten\"\n                                     },\n                                     {\n-                                        \"description\": \"Dataflow to run is stored in NiFi Registry\",\n-                                        \"displayName\": \"Use NiFi Registry\",\n-                                        \"value\": \"Use NiFi Registry\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"unflatten\",\n+                                        \"value\": \"unflatten\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Use Local File\",\n-                                \"description\": \"Specifies how the Processor should obtain a copy of the dataflow that it is to run\",\n-                                \"displayName\": \"Dataflow Specification Strategy\",\n+                                \"defaultValue\": \"flatten\",\n+                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dataflow Specification Strategy\",\n+                                \"name\": \"flatten-json-return-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dataflow Timeout\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"If the flow does not complete within this amount of time, the incoming FlowFile, if any, will be routed to the timeout relationship,the dataflow will be cancelled, and the invocation will end.\",\n-                                \"displayName\": \"Dataflow Timeout\",\n+                            \"flatten-json-separator\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n+                                \"displayName\": \"Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Dataflow Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Failure Ports\": {\n-                                \"description\": \"A comma-separated list of the names of Output Ports that exist at the root level of the dataflow. If any FlowFile is routed to one of the Ports whose name is listed here, the dataflow will be considered a failure, and the incoming FlowFile (if any) will be routed to 'failure'. If not specified, all Output Ports will be considered successful.\",\n-                                \"displayName\": \"Failure Ports\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Ports\",\n+                                \"name\": \"flatten-json-separator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Flow Name\": {\n-                                \"dependencies\": [\n+                            \"flatten-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"description\": \"Flattens every objects into a single level json\",\n+                                        \"displayName\": \"normal\",\n+                                        \"value\": \"normal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flattens every objects and keep arrays format\",\n+                                        \"displayName\": \"keep arrays\",\n+                                        \"value\": \"keep arrays\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n+                                        \"displayName\": \"dot notation\",\n+                                        \"value\": \"dot notation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n+                                        \"displayName\": \"keep primitive arrays\",\n+                                        \"value\": \"keep primitive arrays\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of the flow in the NiFi Registry\",\n-                                \"displayName\": \"Flow Name\",\n+                                \"defaultValue\": \"keep arrays\",\n+                                \"description\": \"Specifies how json should be flattened/unflattened\",\n+                                \"displayName\": \"Flatten Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Name\",\n+                                \"name\": \"flatten-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Flow Version\": {\n-                                \"dependencies\": [\n+                            \"ignore-reserved-characters\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The version of the flow in the NiFi Registry that should be retrieved. If not specified, the latest version will always be used.\",\n-                                \"displayName\": \"Flow Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Flow Version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port\": {\n-                                \"description\": \"Specifies the name of the Input Port to send incoming FlowFiles to. This property is required if this processor has any incoming connections.\",\n-                                \"displayName\": \"Input Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Krb5 Conf File\": {\n-                                \"description\": \"The KRB5 Conf file to use for configuring components that rely on Kerberos\",\n-                                \"displayName\": \"Krb5 Conf File\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, reserved characters in keys will be ignored\",\n+                                \"displayName\": \"Ignore Reserved Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Krb5 Conf File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"ignore-reserved-characters\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Max Ingest Data Size\": {\n-                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum amount of data that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n-                                \"displayName\": \"Max Ingest Data Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Ingest Data Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"flatten\",\n+                            \"json\",\n+                            \"unflatten\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n+                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"enrichment\"\n                             },\n-                            \"Max Ingest FlowFiles\": {\n-                                \"description\": \"During the course of a stateless dataflow, some processors may require more data than they have available in order to proceed. For example, MergeContent may require a minimum number of FlowFiles before it can proceed. In this case, the dataflow may bring in additional data from its source Processor. However, this data may all be held in memory, so this property provides a mechanism for limiting the maximum number of FlowFiles that the source Processor can ingest before it will no longer be triggered to ingest additional data.\",\n-                                \"displayName\": \"Max Ingest FlowFiles\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Ingest FlowFiles\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n+                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n+                                \"name\": \"enrichment.group.id\"\n                             },\n-                            \"Max Input FlowFile Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n+                            {\n+                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n+                                \"name\": \"enrichment.role\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"fork-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Store Content on Heap\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Content Storage Strategy\",\n-                                        \"propertyName\": \"Content Storage Strategy\"\n+                                        \"description\": \"Generated records will be the elements of the array\",\n+                                        \"displayName\": \"Extract\",\n+                                        \"value\": \"extract\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"split\"\n                                     }\n                                 ],\n-                                \"description\": \"This Processor is configured to load all incoming FlowFiles into memory. Because of that, it is important to limit the maximum size of any incoming FlowFile that would get loaded into memory, in order to prevent Out Of Memory Errors and excessive Garbage Collection. Any FlowFile whose content size is greater than the configured size will be routed to failure and not sent to the Stateless Engine.\",\n-                                \"displayName\": \"Max Input FlowFile Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Input FlowFile Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"NAR Directory\": {\n-                                \"defaultValue\": \"./lib\",\n-                                \"description\": \"The directory to retrieve NAR's from\",\n-                                \"displayName\": \"NAR Directory\",\n+                                \"defaultValue\": \"split\",\n+                                \"description\": \"Specifies the forking mode of the processor\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"NAR Directory\",\n+                                \"name\": \"fork-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Registry Bucket\": {\n-                                \"dependencies\": [\n+                            \"include-parent-fields\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of the Bucket in the NiFi Registry that the flow should retrieved from\",\n-                                \"displayName\": \"Registry Bucket\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n+                                \"displayName\": \"Include Parent Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry Bucket\",\n+                                \"name\": \"include-parent-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Registry SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The SSL Context Service to use for interacting with the NiFi Registry\",\n-                                \"displayName\": \"Registry SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Registry URL\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use NiFi Registry\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Dataflow Specification Strategy\",\n-                                        \"propertyName\": \"Dataflow Specification Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The URL of the NiFi Registry to retrieve the flow from\",\n-                                \"displayName\": \"Registry URL\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Registry URL\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Stateless SSL Context Service\": {\n-                                \"description\": \"The SSL Context to use as the Stateless System SSL Context\",\n-                                \"displayName\": \"Stateless SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Stateless SSL Context Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"Status Task Interval\": {\n-                                \"description\": \"The Stateless engine periodically logs the status of the dataflow's processors.  This property allows the interval to be changed, or the status logging to be skipped altogether if the property is not set.\",\n-                                \"displayName\": \"Status Task Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Status Task Interval\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Work Directory\": {\n-                                \"defaultValue\": \"./work\",\n-                                \"description\": \"A directory that can be used to create temporary files, such as expanding NAR files, temporary FlowFile content, caching the dataflow, etc.\",\n-                                \"displayName\": \"Work Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Work Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the dataflow fails to complete in the configured amount of time, any incoming FlowFile will be routed to this relationship\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"If the dataflow fails to process an incoming FlowFile, that FlowFile will be routed to this relationship\",\n+                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"For any incoming FlowFile that is successfully processed, the original incoming FlowFile will be transferred to this Relationship\",\n+                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n                                 \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFiles that are transferred to an Output Port in the configured dataflow will be routed to this Relationship\",\n-                                \"name\": \"output\"\n+                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n+                                \"name\": \"fork\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"DISK\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"NETWORK\"\n-                            }\n+                        \"tags\": [\n+                            \"array\",\n+                            \"content\",\n+                            \"event\",\n+                            \"fork\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.stateless.ExecuteStateless\",\n-                        \"typeDescription\": \"Runs the configured dataflow using the Stateless NiFi engine. Please see documentation in order to understand the differences between the traditional NiFi runtime engine and the Stateless NiFi engine. If the Processor is configured with an incoming connection, the incoming FlowFiles will be queued up into the specified Input Port in the dataflow. Data that is transferred out of the flow via an Output Port will be sent to the 'output' relationship, and an attribute will be added to indicate which Port that FlowFile was transferred to. See Additional Details for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n+                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Output Port that the FlowFile was transferred to\",\n-                                \"name\": \"output.port.name\"\n+                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"If one or more FlowFiles is routed to one of the Output Ports that is configured as a Failure Port, the input FlowFile (if any) will have this attribute added to it, indicating the name of the Port that caused the dataflow to be considered a failure.\",\n-                                \"name\": \"failure.port.name\"\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-distributed-cache-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n-                            },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Generated FlowFile attribute name\",\n+                                \"value\": \"Generated FlowFile attribute value\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"state\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n+                            \"Data Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Text\",\n+                                \"description\": \"Specifies whether the data should be Text or Binary\",\n+                                \"displayName\": \"Data Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n+                                \"name\": \"Data Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n+                            \"File Size\": {\n+                                \"defaultValue\": \"0B\",\n+                                \"description\": \"The size of the file that will be used\",\n+                                \"displayName\": \"File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n+                                \"name\": \"File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"set\",\n-                            \"state\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Unique FlowFiles\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n+                                \"displayName\": \"Unique FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n+                                \"name\": \"Unique FlowFiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n+                            \"generate-ff-custom-text\": {\n+                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n+                                \"displayName\": \"Custom Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"generate-ff-custom-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"maximum-read-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                            \"mime-type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n+                                \"displayName\": \"Mime Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"name\": \"mime-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"supportsDynamicProperties\": false,\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distinct\",\n-                            \"distributed\",\n-                            \"server\",\n-                            \"set\"\n+                            \"generate\",\n+                            \"load\",\n+                            \"random\",\n+                            \"test\"\n                         ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Field name in generated record\",\n+                                \"value\": \"Faker category for generated record values\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n-                                \"allowableValues\": [\n+                            \"null-percentage\": {\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Nullable Fields\",\n+                                        \"propertyName\": \"nullable-fields\"\n+                                    }\n+                                ],\n+                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n+                                \"displayName\": \"Null Value Percentage\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"null-percentage\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"nullable-fields\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n+                                \"displayName\": \"Nullable Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n+                                \"name\": \"nullable-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"number-of-records\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n+                                \"displayName\": \"Number of Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"number-of-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"maximum-read-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                            \"schema-text\": {\n+                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"key/value\",\n-                            \"map\",\n-                            \"server\"\n+                            \"fake\",\n+                            \"generate\",\n+                            \"random\",\n+                            \"test\"\n                         ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-flow-registry-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cdc-mysql-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cdc-mysql-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79300,718 +79368,790 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PREFERRED\",\n-                                            \"VERIFY_IDENTITY\",\n-                                            \"REQUIRED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SSL Mode\",\n-                                        \"propertyName\": \"SSL Mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"SSL Mode\": {\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Connect without TLS\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n-                                        \"displayName\": \"PREFERRED\",\n-                                        \"value\": \"PREFERRED\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n-                                        \"displayName\": \"VERIFY_IDENTITY\",\n-                                        \"value\": \"VERIFY_IDENTITY\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n-                                \"displayName\": \"SSL Mode\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Mode\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-db-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n-                                \"displayName\": \"Database/Schema Name Pattern\",\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-db-name-pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-dist-map-cache-client\": {\n-                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n-                                \"displayName\": \"Distributed Map Cache Client - unused\",\n+                            \"gen-table-column-for-val-partitioning\": {\n+                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n+                                \"displayName\": \"Column for Value Partitioning\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-column-for-val-partitioning\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"capture-change-mysql-driver-class\": {\n-                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n-                                \"description\": \"The class name of the MySQL database driver class\",\n-                                \"displayName\": \"MySQL Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-driver-class\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n-                                \"displayName\": \"MySQL Driver Location(s)\",\n+                            \"gen-table-custom-orderby-column\": {\n+                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n+                                \"displayName\": \"Custom ORDER BY Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-driver-locations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-custom-orderby-column\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-hosts\": {\n-                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n-                                \"displayName\": \"MySQL Nodes\",\n+                            \"gen-table-fetch-partition-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n+                                \"displayName\": \"Partition Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gen-table-fetch-partition-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-begin-commit\": {\n+                            \"gen-table-output-flowfile-on-zero-results\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include Begin/Commit Events\",\n+                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n+                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-begin-commit\",\n+                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"capture-change-mysql-include-ddl-events\": {\n+                            {\n+                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"fetch\",\n+                            \"generate\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n+                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Variable Registry.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"generatetablefetch.sql.error\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"name\": \"generatetablefetch.tableName\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used in the query.\",\n+                                \"name\": \"generatetablefetch.columnNames\"\n+                            },\n+                            {\n+                                \"description\": \"Where clause used in the query to get the expected rows.\",\n+                                \"name\": \"generatetablefetch.whereClause\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n+                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                            },\n+                            {\n+                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n+                                \"name\": \"generatetablefetch.limit\"\n+                            },\n+                            {\n+                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n+                                \"name\": \"generatetablefetch.offset\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include DDL Events\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-ddl-events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-binlog-filename\": {\n-                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-binlog-position\": {\n-                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog Position\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-binlog-position\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-gtid\": {\n-                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n-                                \"displayName\": \"Initial Binlog GTID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-gtid\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-seq-id\": {\n-                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n-                                \"displayName\": \"Initial Sequence ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"name\": \"Connection Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-max-wait-time\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-max-wait-time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n-                                \"displayName\": \"Table Name Pattern\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-name-pattern\",\n-                                \"required\": false,\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-password\": {\n-                                \"description\": \"Password to access the MySQL cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"capture-change-mysql-retrieve-all-records\": {\n+                            \"Delete Original\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n-                                \"displayName\": \"Retrieve All Records\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n+                                \"name\": \"Delete Original\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-server-id\": {\n-                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n-                                \"displayName\": \"Server ID\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-server-id\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"capture-change-mysql-state-update-interval\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n-                                \"displayName\": \"State Update Interval\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-state-update-interval\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-use-gtid\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n-                                \"displayName\": \"Use Binlog GTID\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-use-gtid\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-username\": {\n-                                \"description\": \"Username to access the MySQL cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"capture-change-mysql-username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"events-per-flowfile-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n-                                        \"displayName\": \"Max Events Per FlowFile\",\n-                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n-                                        \"displayName\": \"One Transaction Per FlowFile\",\n-                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n-                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n-                                \"displayName\": \"Event Processing Strategy\",\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"events-per-flowfile-strategy\",\n+                                \"name\": \"Max Selects\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-events-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MAX_EVENTS_PER_FLOWFILE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n-                                        \"propertyName\": \"events-per-flowfile-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n-                                \"displayName\": \"Events Per FlowFile\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"number-of-events-per-flowfile\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"cdc\",\n-                            \"event\",\n-                            \"jdbc\",\n-                            \"mysql\",\n-                            \"sql\",\n-                            \"transaction\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n-                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n-                                \"name\": \"cdc.sequence.id\"\n                             },\n-                            {\n-                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n-                                \"name\": \"cdc.event.type\"\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-smbj-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"domain\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hostname\": {\n-                                \"description\": \"The network host of the SMB file server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"The password used for authentication.\",\n-                                \"displayName\": \"Password\",\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"defaultValue\": \"445\",\n-                                \"description\": \"Port to use for connection.\",\n-                                \"displayName\": \"Port\",\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"share\": {\n-                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"share\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Search Recursively\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n-                                    },\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n+                                \"name\": \"Use Natural Ordering\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"defaultValue\": \"Guest\",\n-                                \"description\": \"The username used for authentication.\",\n-                                \"displayName\": \"Username\",\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-smb-client-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"samba, smb, cifs, files\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n-                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"remote-file\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n-                                \"displayName\": \"Remote File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"remote-file\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A flowfile will be routed here for each successfully fetched file.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A flowfile will be routed here when failed to fetch its content.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cifs\",\n+                            \"FTP\",\n                             \"fetch\",\n                             \"files\",\n-                            \"samba\",\n-                            \"smb\"\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n-                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n+                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80019,14 +80159,24 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Batch Size\": {\n                                 \"defaultValue\": \"10\",\n                                 \"description\": \"The maximum number of files to pull in each iteration\",\n@@ -80034,51 +80184,22 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n                             \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n                                 \"description\": \"Only files whose names match the given regular expression will be picked up\",\n                                 \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"File Filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n@@ -80097,14 +80218,24 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which to pull files\",\n+                                \"displayName\": \"Input Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Input Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n@@ -80120,192 +80251,105 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n+                            \"Minimum File Age\": {\n                                 \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Path Filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n                             }\n@@ -80315,29 +80359,36 @@\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, get\"\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n+                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the network share\",\n+                                \"description\": \"The filename is set to the name of the file on disk\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n+                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n                                 \"name\": \"path\"\n                             },\n                             {\n                                 \"description\": \"The date and time that the file was created. May not work on all file systems\",\n                                 \"name\": \"file.creationTime\"\n                             },\n                             {\n@@ -80345,328 +80396,313 @@\n                                 \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n                                 \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n                                 \"name\": \"file.lastAccessTime\"\n                             },\n                             {\n-                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n+                                \"description\": \"The owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n                                 \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The additional headers to be sent by the processor whenever making a new HTTP request. \\n Setting a dynamic property name to XYZ and value to ${attribute} will result in the header 'XYZ: attribute_value' being sent to the HTTP endpoint\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"Header Name\",\n+                                \"value\": \"The Expression Language to be used to populate the header value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"directory\": {\n-                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"Accept Content-Type\": {\n+                                \"description\": \"If specified, requests will only accept the provided Content-Type\",\n+                                \"displayName\": \"Accept Content-Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"directory\",\n+                                \"name\": \"Accept Content-Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Filename\": {\n+                                \"description\": \"The filename to assign to the file when pulled\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-name-suffix-filter\": {\n-                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n-                                \"displayName\": \"File Name Suffix Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-name-suffix-filter\",\n-                                \"required\": false,\n+                                \"name\": \"Filename\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Follow Redirects\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If we receive a 3xx HTTP Status Code from the server, indicates whether or not we should follow the redirect that the server specifies\",\n+                                \"displayName\": \"Follow Redirects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Follow Redirects\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-age\": {\n-                                \"description\": \"Any file older than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Password\": {\n+                                \"description\": \"Password required to access the URL\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-age\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-size\": {\n-                                \"description\": \"Any file larger than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-size\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-age\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-age\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL to pull from\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-size\": {\n-                                \"description\": \"Any file smaller than the given value will be omitted.\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"User Agent\": {\n+                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n+                                \"displayName\": \"User Agent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-size\",\n+                                \"name\": \"User Agent\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Username\": {\n+                                \"description\": \"Username required to access the URL\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"redirect-cookie-policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n+                                        \"description\": \"Default cookie policy that provides a higher degree of compatibility with common cookie management of popular HTTP agents for non-standard (Netscape style) cookies.\",\n+                                        \"displayName\": \"default\",\n+                                        \"value\": \"default\"\n                                     },\n                                     {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n+                                        \"description\": \"RFC 6265 compliant cookie policy (interoperability profile).\",\n+                                        \"displayName\": \"standard\",\n+                                        \"value\": \"standard\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"RFC 6265 compliant cookie policy (strict profile).\",\n+                                        \"displayName\": \"strict\",\n+                                        \"value\": \"strict\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"Netscape draft compliant cookie policy.\",\n+                                        \"displayName\": \"netscape\",\n+                                        \"value\": \"netscape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A cookie policy that ignores cookies.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"When a HTTP server responds to a request with a redirect, this is the cookie policy used to copy cookies to the following request.\",\n+                                \"displayName\": \"Redirect Cookie Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n-                                \"required\": true,\n+                                \"name\": \"redirect-cookie-policy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n+                            \"description\": \"Stores Last Modified Time and ETag headers returned by server so that the same data will not be fetched multiple times.\",\n                             \"scopes\": [\n-                                \"CLUSTER\"\n+                                \"LOCAL\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"All files are transferred to the success relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"list\",\n-                            \"samba, smb, cifs, files\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"poll\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n-                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GetHTTP\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Fetches data from an HTTP or HTTPS URL and writes the data to the content of a FlowFile. Once the content has been fetched, the ETag and Last Modified dates are remembered (if the web server supports these concepts). This allows the Processor to fetch new data only if the remote data has changed or until the state is cleared. That is, once the content has been fetched from the given URL, it will not be fetched again until the content on the remote server changes. Note that due to limitations on state management, stored \\\"last modified\\\" and etag fields never expire. If the URL in GetHttp uses Expression Language that is unbounded, there is the potential for Out of Memory Errors to occur.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The short name of the file that was read from filesystem.\",\n-                                \"name\": \"shortName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The SMB URL of the share.\",\n-                                \"name\": \"serviceLocation\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"changeTime\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file in bytes.\",\n-                                \"name\": \"size\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes allocated for the file on the server.\",\n-                                \"name\": \"allocationSize\"\n+                                \"description\": \"The MIME Type of the FlowFile, as reported by the HTTP Content-Type header\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80674,870 +80710,1040 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases. \",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to put in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution Strategy\": {\n+                            \"Acknowledgement Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"Client Acknowledge\",\n+                                        \"value\": \"Client Acknowledge\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"displayName\": \"Auto Acknowledge\",\n+                                        \"value\": \"Auto Acknowledge\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"Client Acknowledge\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Missing Directories\": {\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client ID Prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Copy JMS Properties to Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n+                                \"displayName\": \"Copy JMS Properties to Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n+                                \"name\": \"Copy JMS Properties to Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n-                                \"displayName\": \"Directory\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                            \"JMS Provider\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n-                                \"required\": false,\n+                                \"name\": \"JMS Provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n+                                \"displayName\": \"Message Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Selector\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"description\": \"Password used for authentication and authorization\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutJMS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"consume\",\n+                            \"consumer\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"listen\",\n+                            \"pull\",\n+                            \"queue\",\n+                            \"source\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetJMSQueue\",\n+                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Queue, creating a FlowFile for each JMS Message or bundle of messages, as configured\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"Acknowledgement Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"Client Acknowledge\",\n+                                        \"value\": \"Client Acknowledge\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"Auto Acknowledge\",\n+                                        \"value\": \"Auto Acknowledge\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"Client Acknowledge\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Suffix\": {\n-                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n-                                \"displayName\": \"Temporary Suffix\",\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Temporary Suffix\",\n+                                \"name\": \"Client ID Prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Copy JMS Properties to Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n+                                \"displayName\": \"Copy JMS Properties to Attributes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Copy JMS Properties to Attributes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"JMS Provider\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n+                                \"name\": \"JMS Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n+                                \"displayName\": \"Message Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Selector\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Durable Subscription\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"description\": \"If true, connections to the specified topic will use Durable Subscription so that messages are queued when we are not pulling them\",\n+                                \"displayName\": \"Use Durable Subscription\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"name\": \"Use Durable Subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\"\n+                            \"org.apache.nifi.processors.standard.PutJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, put\"\n+                            \"consume\",\n+                            \"consumer\",\n+                            \"durable\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"listen\",\n+                            \"non-durable\",\n+                            \"pull\",\n+                            \"source\",\n+                            \"subscription\",\n+                            \"topic\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetJMSTopic\",\n+                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Topic, creating a FlowFile for each JMS Message or bundle of messages, as configured.\",\n                         \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-record-sink-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bcc\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bcc\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cc\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"cc\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"from\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"from\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Delete Original\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"Delete Original\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"smtp-auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-auth\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-hostname\": {\n-                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n-                                \"displayName\": \"SMTP Hostname\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smtp-hostname\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-password\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"smtp-port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-port\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-ssl\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether SSL should be enabled\",\n-                                \"displayName\": \"SMTP SSL\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-ssl\",\n-                                \"required\": true,\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-starttls\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-starttls\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Selects\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-username\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-xmailer-header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"smtp-xmailer-header\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"subject\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"to\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"to\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"record\",\n-                            \"send\",\n-                            \"sink\",\n-                            \"smtp\",\n-                            \"write\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"logsink-log-level\": {\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"INFO\",\n-                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n-                                \"displayName\": \"Log Level\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"logsink-log-level\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"log\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hostname\": {\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"hostname\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"Search Recursively\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"sender-threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n-                                \"displayName\": \"Sender Threads\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sender-threads\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"UDP\",\n-                            \"event\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n-                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register the specified RecordSinkService\",\n-                                \"value\": \"The RecordSinkService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-web-client-provider-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            },\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Use Natural Ordering\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"redirect-handling-strategy\": {\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"FOLLOWED\",\n-                                        \"value\": \"FOLLOWED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IGNORED\",\n-                                        \"value\": \"IGNORED\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FOLLOWED\",\n-                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n-                                \"displayName\": \"Redirect Handling Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-handling-strategy\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"write-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n-                                \"displayName\": \"Write Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Client\",\n-                            \"HTTP\",\n-                            \"Web\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n-                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateless-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-snmp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n+                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81546,420 +81752,502 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n+                            \"Additional HTTP Methods\": {\n+                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n+                                \"displayName\": \"Additional HTTP Methods\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional HTTP Methods\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Allow DELETE\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP DELETE Method\",\n+                                \"displayName\": \"Allow DELETE\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Allow DELETE\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Allow GET\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"dependencies\": [\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP GET Method\",\n+                                \"displayName\": \"Allow GET\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow GET\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Allow HEAD\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow HTTP HEAD Method\",\n+                                \"displayName\": \"Allow HEAD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Allow HEAD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n+                            \"Allow OPTIONS\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow HTTP OPTIONS Method\",\n+                                \"displayName\": \"Allow OPTIONS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n+                                \"name\": \"Allow OPTIONS\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n+                            \"Allow POST\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP POST Method\",\n+                                \"displayName\": \"Allow POST\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-hostname\",\n+                                \"name\": \"Allow POST\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-oid\": {\n-                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n-                                \"displayName\": \"OID\",\n+                            \"Allow PUT\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP PUT Method\",\n+                                \"displayName\": \"Allow PUT\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-oid\",\n+                                \"name\": \"Allow PUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n+                            \"Allowed Paths\": {\n+                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n+                                \"displayName\": \"Allowed Paths\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-port\",\n-                                \"required\": true,\n+                                \"name\": \"Allowed Paths\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"Client Authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                            \"Default URL Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n+                                \"displayName\": \"Default URL Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"name\": \"Default URL Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"HTTP Context Map\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"snmp-security-level\": {\n+                            \"HTTP Protocols\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"defaultValue\": \"HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"Hostname\": {\n+                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Listening Port\": {\n+                                \"defaultValue\": \"80\",\n+                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n+                                \"displayName\": \"Listening Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n-                                        \"displayName\": \"GET\",\n-                                        \"value\": \"GET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n-                                        \"displayName\": \"WALK\",\n-                                        \"value\": \"WALK\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n-                                \"displayName\": \"SNMP Strategy\",\n+                            \"Maximum Threads\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n+                                \"displayName\": \"Maximum Threads\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-strategy\",\n+                                \"name\": \"Maximum Threads\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-textual-oid\": {\n-                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n-                                \"displayName\": \"Textual OID\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-textual-oid\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"container-queue-size\": {\n+                                \"defaultValue\": \"50\",\n+                                \"description\": \"The size of the queue for Http Request Containers\",\n+                                \"displayName\": \"Container Queue Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"container-queue-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n-                                \"required\": false,\n+                                \"name\": \"multipart-read-buffer-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"parameters-to-attributes\": {\n+                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n+                                \"displayName\": \"Parameters to Attributes List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameters-to-attributes\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n+                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"oid\",\n-                            \"snmp\",\n-                            \"walk\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingress\",\n+                            \"listen\",\n+                            \"request\",\n+                            \"web service\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n-                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n+                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n+                                \"name\": \"http.context.identifier\"\n                             },\n                             {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n+                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n+                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n+                                \"name\": \"http.servlet.path\"\n                             },\n                             {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n+                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n+                                \"name\": \"http.context.path\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n+                                \"name\": \"http.method\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"IP address/hostname of the server\",\n+                                \"name\": \"http.local.name\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"Listening port of the server\",\n+                                \"name\": \"http.server.port\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"The query string portion of the Request URL\",\n+                                \"name\": \"http.query.string\"\n                             },\n                             {\n-                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n-                                \"name\": \"snmp$textualOid\"\n+                                \"description\": \"The hostname of the requestor\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname:port combination of the requestor\",\n+                                \"name\": \"http.remote.addr\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the requestor\",\n+                                \"name\": \"http.remote.user\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol used to communicate\",\n+                                \"name\": \"http.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The full Request URL\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The type of HTTP Authorization used\",\n+                                \"name\": \"http.auth.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the authenticated user making the request\",\n+                                \"name\": \"http.principal.name\"\n+                            },\n+                            {\n+                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n+                                \"name\": \"http.query.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n+                                \"name\": \"http.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.subject.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n+                                \"name\": \"http.headers.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n+                                \"name\": \"http.headers.multipart.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n+                                \"name\": \"http.multipart.size\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n+                                \"name\": \"http.multipart.content.type\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n+                                \"name\": \"http.multipart.name\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n+                                \"name\": \"http.multipart.filename\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n+                                \"name\": \"http.multipart.fragments.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n+                                \"name\": \"http.multipart.fragments.total.number\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81967,2036 +82255,1664 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An HTTP header name\",\n+                                \"value\": \"An HTTP header value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            \"Attributes to add to the HTTP Response (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n+                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-manager-port\": {\n-                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-manager-port\",\n+                                \"name\": \"HTTP Context Map\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                            \"HTTP Status Code\": {\n+                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n+                                \"displayName\": \"HTTP Status Code\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HTTP Status Code\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n+                                \"name\": \"http.context.identifier\"\n                             },\n-                            \"snmp-usm-security-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-security-names\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"noAuthNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"SNMP Users Security Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-security-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n+                                \"name\": \"http.request.uri\"\n                             },\n-                            \"snmp-usm-users-file-path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-file-path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    }\n-                                ],\n-                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON File Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-file-path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"IP address of the client. Used for provenance event.\",\n+                                \"name\": \"http.remote.host\"\n                             },\n-                            \"snmp-usm-users-json-content\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    }\n-                                ],\n-                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON content\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-json-content\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n+                                \"name\": \"http.local.name\"\n                             },\n-                            \"snmp-usm-users-source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The JSON containing the USM users\",\n-                                        \"displayName\": \"Json Content\",\n-                                        \"value\": \"usm-json-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The path of the JSON file containing the USM users\",\n-                                        \"displayName\": \"Json File Path\",\n-                                        \"value\": \"usm-json-file-path\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n-                                        \"displayName\": \"Security Names\",\n-                                        \"value\": \"usm-security-names\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ways to provide USM User data\",\n-                                \"displayName\": \"USM Users Source\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Listening port of the server. Used for provenance event.\",\n+                                \"name\": \"http.server.port\"\n                             },\n-                            \"snmp-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                            {\n+                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n+                                \"name\": \"http.subject.dn\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.http.StandardHttpContextMap\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"egress\",\n+                            \"http\",\n+                            \"https\",\n+                            \"response\",\n+                            \"web service\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n+                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n+                        ],\n+                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"This regular expression is evaluated against the flowfile attribute values. If the regular expression contains a capturing group, the value of that group will be used when comparing flow file attributes. Otherwise, the original flow file attribute's value will be used if and only if the value matches the given regular expression.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A flowfile attribute key for attribute inspection\",\n+                                \"value\": \"A Regular Expression\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Hash Value Attribute Key\": {\n+                                \"description\": \"The name of the flowfile attribute where the hash value should be stored\",\n+                                \"displayName\": \"Hash Value Attribute Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"Hash Value Attribute Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"description\": \"Used for flowfiles that are missing required attributes\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"attributes\",\n+                            \"hash\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n-                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HashAttribute\",\n+                        \"typeDescription\": \"Hashes together the key/value pairs of several flowfile attributes and adds the hash as a new attribute. Optional properties are to be added such that the name of the property is the name of a flowfile attribute to consider and the value of the property is a regular expression that, if matched by the attribute value, will cause that attribute to be used as part of the hash. If the regular expression contains a capturing group, only the value of the capturing group will be used. For a processor which accepts various attributes and generates a cryptographic hash of each, see \\\"CryptographicHashAttribute\\\". \",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n-                                \"name\": \"snmp$*\"\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing flowfile attributes. The name of this attribute is specified by the <Hash Value Attribute Key> property.\",\n+                                \"name\": \"<Hash Value Attribute Key>\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.CryptographicHashContent\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Hash Algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.0.10118.3.0.55\",\n+                                        \"value\": \"1.0.10118.3.0.55\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HARAKA-256\",\n+                                        \"value\": \"HARAKA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-256\",\n+                                        \"value\": \"SKEIN-512-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-384\",\n+                                        \"value\": \"SKEIN-1024-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE3-256\",\n+                                        \"value\": \"BLAKE3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-160\",\n+                                        \"value\": \"BLAKE2B-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n                                         \"displayName\": \"SHA\",\n                                         \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-288\",\n+                                        \"value\": \"KECCAK-288\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WHIRLPOOL\",\n+                                        \"value\": \"WHIRLPOOL\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-384\",\n+                                        \"value\": \"SKEIN-512-384\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SM3\",\n+                                        \"value\": \"SM3\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-private-protocol\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-512\",\n+                                        \"value\": \"BLAKE2B-512\"\n+                                    },\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.0.10118.3.0.55\",\n+                                        \"value\": \"OID.1.0.10118.3.0.55\"\n                                     },\n                                     {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TUPLEHASH128-256\",\n+                                        \"value\": \"TUPLEHASH128-256\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411-2012-512\",\n+                                        \"value\": \"GOST3411-2012-512\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-256\",\n+                                        \"value\": \"KECCAK-256\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-128\",\n+                                        \"value\": \"SKEIN-512-128\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-384\",\n+                                        \"value\": \"BLAKE2B-384\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHAKE256-512\",\n+                                        \"value\": \"SHAKE256-512\"\n+                                    },\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.12\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.12\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.11\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.11\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-160\",\n+                                        \"value\": \"SKEIN-256-160\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.10\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.10\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-agent-address\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-256\",\n+                                        \"value\": \"DSTU7564-256\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n-                                \"displayName\": \"SNMP Trap Agent Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-agent-address\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-enterprise-oid\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n-                                \"displayName\": \"Enterprise OID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-enterprise-oid\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-generic-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-224\",\n+                                        \"value\": \"BLAKE2S-224\"\n+                                    },\n                                     {\n-                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n-                                        \"displayName\": \"Cold Start\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n                                     },\n                                     {\n-                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n-                                        \"displayName\": \"Warm Start\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-384\",\n+                                        \"value\": \"KECCAK-384\"\n                                     },\n                                     {\n-                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n-                                        \"displayName\": \"Link Down\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-128\",\n+                                        \"value\": \"SKEIN-256-128\"\n                                     },\n                                     {\n-                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n-                                        \"displayName\": \"Link Up\",\n-                                        \"value\": \"3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-384\",\n+                                        \"value\": \"DSTU7564-384\"\n                                     },\n                                     {\n-                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n-                                        \"displayName\": \"Authentication Failure\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HARAKA-512\",\n+                                        \"value\": \"HARAKA-512\"\n                                     },\n                                     {\n-                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n-                                        \"displayName\": \"EGP Neighborloss\",\n-                                        \"value\": \"5\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARALLELHASH128-256\",\n+                                        \"value\": \"PARALLELHASH128-256\"\n                                     },\n                                     {\n-                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n-                                        \"displayName\": \"Enterprise Specific\",\n-                                        \"value\": \"6\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHAKE128-256\",\n+                                        \"value\": \"SHAKE128-256\"\n                                     },\n                                     {\n-                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n-                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n-                                        \"value\": \"generic-trap-type\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-224\",\n+                                        \"value\": \"KECCAK-224\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n-                                \"displayName\": \"Generic Trap Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-trap-generic-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-manager-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The host where the SNMP Manager sends the trap.\",\n-                                \"displayName\": \"SNMP Manager Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-trap-manager-host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-manager-port\": {\n-                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-trap-manager-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-oid-value\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-512\",\n+                                        \"value\": \"SKEIN-512-512\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value of the trap OID.\",\n-                                \"displayName\": \"Trap OID Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-oid-value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-specific-type\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PARALLELHASH256-512\",\n+                                        \"value\": \"PARALLELHASH256-512\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"6\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Generic Trap Type\",\n-                                        \"propertyName\": \"snmp-trap-generic-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-512\",\n+                                        \"value\": \"SKEIN-1024-512\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n-                                \"displayName\": \"Specific Trap Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-specific-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-version\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-160\",\n+                                        \"value\": \"SKEIN-512-160\"\n+                                    },\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.3\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.3\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411\",\n+                                        \"value\": \"GOST3411\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.3\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2B-256\",\n+                                        \"value\": \"BLAKE2B-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.2\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-1024-1024\",\n+                                        \"value\": \"SKEIN-1024-1024\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.1\",\n+                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.9\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-256\",\n+                                        \"value\": \"BLAKE2S-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.8\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.7\",\n+                                        \"value\": \"OID.2.16.840.1.101.3.4.2.7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TIGER\",\n+                                        \"value\": \"TIGER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD256\",\n+                                        \"value\": \"RIPEMD256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-256\",\n+                                        \"value\": \"SKEIN-256-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD320\",\n+                                        \"value\": \"RIPEMD320\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.9\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD160\",\n+                                        \"value\": \"RIPEMD160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TUPLEHASH256-512\",\n+                                        \"value\": \"TUPLEHASH256-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GOST3411-2012-256\",\n+                                        \"value\": \"GOST3411-2012-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.8\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.1\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KECCAK-512\",\n+                                        \"value\": \"KECCAK-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-512-224\",\n+                                        \"value\": \"SKEIN-512-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.7\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.2\",\n+                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.12\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.10\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.16.840.1.101.3.4.2.11\",\n+                                        \"value\": \"2.16.840.1.101.3.4.2.11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-160\",\n+                                        \"value\": \"BLAKE2S-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RIPEMD128\",\n+                                        \"value\": \"RIPEMD128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD4\",\n+                                        \"value\": \"MD4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SKEIN-256-224\",\n+                                        \"value\": \"SKEIN-256-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLAKE2S-128\",\n+                                        \"value\": \"BLAKE2S-128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DSTU7564-512\",\n+                                        \"value\": \"DSTU7564-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"MD5\",\n+                                \"description\": \"Determines what hashing algorithm should be used to perform the hashing function\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"Hash Algorithm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Attribute Name\": {\n+                                \"defaultValue\": \"hash.value\",\n+                                \"description\": \"The name of the FlowFile Attribute into which the Hash Value should be written. If the value already exists, it will be overwritten\",\n+                                \"displayName\": \"Hash Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hash Attribute Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are process successfully will be sent to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"description\": \"Any FlowFile that cannot be processed successfully will be sent to this relationship without any attribute being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"send\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"MD5\",\n+                            \"SHA-1\",\n+                            \"SHA-256\",\n+                            \"content\",\n+                            \"hash\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n-                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.HashContent\",\n+                        \"typeDescription\": \"Calculates a hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property. This processor did not provide a consistent offering of hash algorithms, and is now deprecated. For modern cryptographic hashing capabilities, see \\\"CryptographicHashContent\\\". \",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n+                                \"name\": \"<Hash Attribute Name>\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-authentication-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-private-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"config-body\": {\n+                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n-                                \"required\": true,\n+                                \"name\": \"config-body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"config-file\": {\n+                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"config-file\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"use-filename-in-detection\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n+                                \"displayName\": \"Use Filename In Detection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"use-filename-in-detection\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"oid\",\n-                            \"set\",\n-                            \"snmp\"\n+                            \"MIME\",\n+                            \"bzip2\",\n+                            \"compression\",\n+                            \"file\",\n+                            \"gzip\",\n+                            \"identify\",\n+                            \"mime.type\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n-                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n+                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute mime.extension will be set if a common file extension for the MIME Type is known. If both Config File and Config Body are not set, the default NiFi MIME Types will be used.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n-                            },\n-                            {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n-                            },\n-                            {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n-                            },\n-                            {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n-                            },\n-                            {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n+                                \"name\": \"mime.extension\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ssl-context-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Header Name\",\n+                                \"value\": \"Attribute Expression Language\"\n+                            },\n+                            {\n+                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"post:form:<NAME>\",\n+                                \"value\": \"Attribute Expression Language\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Keystore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Keystore\",\n-                                \"displayName\": \"Keystore Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keystore Filename\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Keystore Password\": {\n-                                \"description\": \"The password for the Keystore\",\n-                                \"displayName\": \"Keystore Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Keystore Type\": {\n+                            \"Add Response Headers to Request\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Keystore\",\n-                                \"displayName\": \"Keystore Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Header Request Attributes Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Type\",\n+                                \"name\": \"Add Response Headers to Request\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Protocol\": {\n+                            \"Always Output Response\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Negotiate latest protocol version based on platform supported versions\",\n-                                        \"displayName\": \"TLS\",\n-                                        \"value\": \"TLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.3 protocol version\",\n-                                        \"displayName\": \"TLSv1.3\",\n-                                        \"value\": \"TLSv1.3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Require TLSv1.2 protocol version\",\n-                                        \"displayName\": \"TLSv1.2\",\n-                                        \"value\": \"TLSv1.2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLS\",\n-                                \"description\": \"TLS Protocol Version for encrypted connections. Supported versions depend on the specific version of Java used.\",\n-                                \"displayName\": \"TLS Protocol\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n+                                \"displayName\": \"Response Generation Required\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Protocol\",\n+                                \"name\": \"Always Output Response\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\n+                            \"Attributes to Send\": {\n+                                \"description\": \"Regular expression that defines which attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be sent as headers. The dynamic property name will be the header key and the dynamic property value will be interpreted as expression language will be the header value.\",\n+                                \"displayName\": \"Request Header Attributes Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Truststore Filename\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attributes to Send\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Password\": {\n-                                \"description\": \"The password for the Truststore\",\n-                                \"displayName\": \"Truststore Password\",\n+                            \"Basic Authentication Password\": {\n+                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Password\",\n+                                \"name\": \"Basic Authentication Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Truststore Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Type of the Truststore\",\n-                                \"displayName\": \"Truststore Type\",\n+                            \"Basic Authentication Username\": {\n+                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Type\",\n+                                \"name\": \"Basic Authentication Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n-                                \"displayName\": \"Key Password\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"1.22.0\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"certificate\",\n-                            \"jks\",\n-                            \"keystore\",\n-                            \"p12\",\n-                            \"pkcs\",\n-                            \"pkcs12\",\n-                            \"secure\",\n-                            \"ssl\",\n-                            \"tls\",\n-                            \"truststore\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.ssl.StandardRestrictedSSLContextService\",\n-                        \"typeDescription\": \"Restricted implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application, but only allows a restricted set of TLS/SSL protocols to be chosen (no SSL protocols are supported). The set of protocols selectable will evolve over time as new protocols emerge and older protocols are deprecated. This service is recommended over StandardSSLContextService if a component doesn't expect to communicate with legacy systems since it is unlikely that legacy systems will support these protocols.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Keystore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Keystore\",\n-                                \"displayName\": \"Keystore Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keystore Filename\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keystore Password\": {\n-                                \"description\": \"The password for the Keystore\",\n-                                \"displayName\": \"Keystore Password\",\n+                            \"Content-Encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Content encoding not applied during transmission\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n+                                \"displayName\": \"Request Content-Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Content-Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Keystore Type\": {\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n+                                \"displayName\": \"Request Content-Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Digest Authentication\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"propertyDisplayName\": \"Request Username\",\n+                                        \"propertyName\": \"Basic Authentication Username\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Keystore\",\n-                                \"displayName\": \"Keystore Type\",\n+                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n+                                \"displayName\": \"Request Digest Authentication Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Type\",\n+                                \"name\": \"Digest Authentication\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Protocol\": {\n+                            \"Follow Redirects\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Negotiate latest SSL or TLS protocol version based on platform supported versions\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Negotiate latest TLS protocol version based on platform supported versions\",\n-                                        \"displayName\": \"TLS\",\n-                                        \"value\": \"TLS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.3 protocol version\",\n-                                        \"displayName\": \"TLSv1.3\",\n-                                        \"value\": \"TLSv1.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.2 protocol version\",\n-                                        \"displayName\": \"TLSv1.2\",\n-                                        \"value\": \"TLSv1.2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Require TLSv1.1 protocol version\",\n-                                        \"displayName\": \"TLSv1.1\",\n-                                        \"value\": \"TLSv1.1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"Require TLSv1 protocol version\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLS\",\n-                                \"description\": \"SSL or TLS Protocol Version for encrypted connections. Supported versions include insecure legacy options and depend on the specific version of Java used.\",\n-                                \"displayName\": \"TLS Protocol\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n+                                \"displayName\": \"Response Redirects Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"Follow Redirects\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\n+                            \"HTTP Method\": {\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n+                                \"displayName\": \"HTTP Method\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Truststore Filename\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HTTP Method\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Password\": {\n-                                \"description\": \"The password for the Truststore\",\n-                                \"displayName\": \"Truststore Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Truststore Type\": {\n+                            \"Include Date Header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"The Type of the Truststore\",\n-                                \"displayName\": \"Truststore Type\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n+                                \"displayName\": \"Request Date Header Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Truststore Type\",\n-                                \"required\": false,\n+                                \"name\": \"Include Date Header\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-password\": {\n-                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n-                                \"displayName\": \"Key Password\",\n+                            \"Max Length To Put In Attribute\": {\n+                                \"defaultValue\": \"256\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n+                                        \"propertyName\": \"Put Response Body In Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n+                                \"displayName\": \"Response Body Attribute Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n+                                \"name\": \"Max Length To Put In Attribute\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"1.22.0\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"certificate\",\n-                            \"jks\",\n-                            \"keystore\",\n-                            \"p12\",\n-                            \"pkcs\",\n-                            \"pkcs12\",\n-                            \"secure\",\n-                            \"ssl\",\n-                            \"tls\",\n-                            \"truststore\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.ssl.StandardSSLContextService\",\n-                        \"typeDescription\": \"Standard implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application. This service can be used to communicate with both legacy and modern systems. If you only need to communicate with non-legacy systems, then the StandardRestrictedSSLContextService is recommended as it only allows a specific set of SSL protocols to be chosen.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-email-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationReason\": \"The supporting ews-java-api library is no longer maintained\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"Penalize on \\\"No Retry\\\"\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n+                                \"displayName\": \"Request Failure Penalization Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n-                                \"required\": true,\n+                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-autodiscover\": {\n-                                \"allowableValues\": [\n+                            \"Proxy Host\": {\n+                                \"description\": \"Proxy Host and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy Host can be configured using an IP address or DNS address.\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Port and dependent properties are deprecated in favor of Proxy Configuration Service. Port number for the configured Proxy Host address.\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"defaultValue\": \"http\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to use the Exchange email address to Autodiscover the EWS endpoint URL.\",\n-                                \"displayName\": \"Auto Discover URL\",\n+                                \"description\": \"Proxy Type and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy protocol type is not used\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Response Body In Attribute\": {\n+                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Body Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Put Response Body In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-autodiscover\",\n+                                \"name\": \"Read Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-exclude-headers\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"Comma delimited list specifying which headers from the original message to exclude in the exported email message. Blank means don't exclude any headers.\",\n-                                \"displayName\": \"Original Headers to Exclude\",\n+                            \"Remote URL\": {\n+                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n+                                \"displayName\": \"HTTP URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-exclude-headers\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-include-headers\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"Comma delimited list specifying which headers from the original message to include in the exported email message. Blank means copy all headers. Some headers can cause problems with message parsing, specifically the 'Content-Type' header.\",\n-                                \"displayName\": \"Original Headers to Include\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-include-headers\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"ews-mark-as-read\": {\n+                            \"Use Chunked Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n-                                \"displayName\": \"Mark Messages as Read\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n+                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-mark-as-read\",\n+                                \"name\": \"Use Chunked Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ews-url\": {\n-                                \"description\": \"URL of the EWS Endpoint. Required if Autodiscover is false.\",\n-                                \"displayName\": \"EWS URL\",\n+                            \"Useragent\": {\n+                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n+                                \"displayName\": \"Request User-Agent\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ews-url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Useragent\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mail-ews-version\": {\n+                            \"cookie-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Exchange2007_SP1\",\n-                                        \"value\": \"Exchange2007_SP1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010\",\n-                                        \"value\": \"Exchange2010\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010_SP1\",\n-                                        \"value\": \"Exchange2010_SP1\"\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Exchange2010_SP2\",\n-                                        \"value\": \"Exchange2010_SP2\"\n+                                        \"displayName\": \"ACCEPT_ALL\",\n+                                        \"value\": \"ACCEPT_ALL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Exchange2010_SP2\",\n-                                \"description\": \"What version of Exchange Server the server is running.\",\n-                                \"displayName\": \"Exchange Version\",\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n+                                \"displayName\": \"Response Cookie Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mail-ews-version\",\n+                                \"name\": \"cookie-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"Consume\",\n-                            \"EWS\",\n-                            \"Email\",\n-                            \"Exchange\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumeEWS\",\n-                        \"typeDescription\": \"Consumes messages from Microsoft Exchange using Exchange Web Services. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Mark Messages as Read\": {\n+                            \"disable-http2\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n-                                \"displayName\": \"Mark Messages as Read\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n+                                \"displayName\": \"HTTP/2 Disabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mark Messages as Read\",\n+                                \"name\": \"disable-http2\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use SSL\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"etag-max-cache-size\": {\n+                                \"defaultValue\": \"10MB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n+                                        \"propertyName\": \"use-etag\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n-                                \"displayName\": \"Use SSL\",\n+                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL\",\n+                                \"name\": \"etag-max-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-mode\": {\n+                            \"flow-file-naming-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n+                                        \"displayName\": \"RANDOM\",\n+                                        \"value\": \"RANDOM\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n+                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n+                                        \"displayName\": \"URL_PATH\",\n+                                        \"value\": \"URL_PATH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n+                                \"defaultValue\": \"RANDOM\",\n+                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n+                                \"displayName\": \"Response FlowFile Naming Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n+                                \"name\": \"flow-file-naming-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n+                            \"form-body-form-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Request Body Enabled\",\n+                                        \"propertyName\": \"send-message-body\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n+                                \"displayName\": \"Request Multipart Form-Data Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"form-body-form-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"idle-timeout\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"idle-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"ignore-response-content\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n+                                \"displayName\": \"Response Body Ignored\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n+                                \"name\": \"ignore-response-content\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n+                            \"invokehttp-proxy-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Password and dependent properties are deprecated in favor of Proxy Configuration Service. Password to set when authenticating with a Proxy server.\",\n+                                \"displayName\": \"Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"invokehttp-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n+                            \"invokehttp-proxy-user\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Proxy Host\",\n+                                        \"propertyName\": \"Proxy Host\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy Username and dependent properties are deprecated in favor of Proxy Configuration Service. Username to set when authenticating with a Proxy server.\",\n+                                \"displayName\": \"Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n-                                \"required\": true,\n+                                \"name\": \"invokehttp-proxy-user\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n+                            \"max-idle-connections\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-idle-connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n+                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"password\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"send-message-body\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n+                                \"displayName\": \"Request Body Enabled\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"send-message-body\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n+                            \"set-form-filename\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n+                                        \"propertyName\": \"form-body-form-name\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n+                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"set-form-filename\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n+                            \"use-etag\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Enabled\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-etag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Original\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n+                                \"name\": \"No Retry\"\n+                            },\n+                            {\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Response\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Imap\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\n+                            \"client\",\n+                            \"http\",\n+                            \"https\",\n+                            \"rest\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n+                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. FlowFile attributes are converted to HTTP headers and the FlowFile contents are included as the body of the request (if the HTTP Method is PUT, POST or PATCH).\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The status code that is returned\",\n+                                \"name\": \"invokehttp.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"The status message that is returned\",\n+                                \"name\": \"invokehttp.status.message\"\n+                            },\n+                            {\n+                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n+                                \"name\": \"invokehttp.response.body\"\n+                            },\n+                            {\n+                                \"description\": \"The original request URL\",\n+                                \"name\": \"invokehttp.request.url\"\n+                            },\n+                            {\n+                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n+                                \"name\": \"invokehttp.request.duration\"\n+                            },\n+                            {\n+                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n+                                \"name\": \"invokehttp.response.url\"\n+                            },\n+                            {\n+                                \"description\": \"The transaction ID that is returned after reading the response\",\n+                                \"name\": \"invokehttp.tx.id\"\n+                            },\n+                            {\n+                                \"description\": \"The DN of the remote server\",\n+                                \"name\": \"invokehttp.remote.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -84005,280 +83921,264 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n+                            \"Enrichment Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n+                                \"displayName\": \"Enrichment Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n+                                \"name\": \"Enrichment Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n+                            \"Insertion Record Path\": {\n+                                \"defaultValue\": \"/\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Insert Enrichment Fields\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n+                                \"displayName\": \"Insertion Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"connection.timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Insertion Record Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"Join Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n+                                        \"displayName\": \"Wrapper\",\n+                                        \"value\": \"Wrapper\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n+                                        \"displayName\": \"SQL\",\n+                                        \"value\": \"SQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n+                                        \"displayName\": \"Insert Enrichment Fields\",\n+                                        \"value\": \"Insert Enrichment Fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n+                                \"defaultValue\": \"Wrapper\",\n+                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n+                                \"displayName\": \"Join Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"fetch.size\",\n+                                \"name\": \"Join Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum number of Bins\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n+                            \"Original Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n+                                \"displayName\": \"Original Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Original Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"password\": {\n+                            \"SQL\": {\n+                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n+                                \"displayName\": \"SQL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SQL\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\",\n-                            \"POP3\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Flowfiles that could not be parsed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n+                                \"name\": \"timeout\"\n                             },\n                             {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n+                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n+                                \"name\": \"joined\"\n                             },\n                             {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n+                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"combine\",\n+                            \"enrichment\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"sql\",\n+                            \"streams\",\n+                            \"wrap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n+                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.attachment.parent.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.attachment.parent.uuid\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The mime type of the attachment.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"EVENT_DRIVEN\": 0,\n@@ -84291,1644 +84191,2285 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CAPTURED_HEADERS\": {\n-                                \"defaultValue\": \"x-mailer\",\n-                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n-                                \"displayName\": \"Additional Header List\",\n+                            \"Transform Cache Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CAPTURED_HEADERS\",\n+                                \"name\": \"Transform Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-custom-class\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Specification\",\n+                                        \"propertyName\": \"jolt-spec\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-custom-class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"STRICT_ADDRESS_PARSING\": {\n+                            \"jolt-custom-modules\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Specification\",\n+                                        \"propertyName\": \"jolt-spec\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"jolt-custom-modules\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-spec\": {\n+                                \"description\": \"Jolt Specification for transform of JSON data. This value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"jolt-spec\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-transform\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n-                                        \"displayName\": \"Strict Address Parsing\",\n+                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \" Remove values from input data to create the output JSON.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transformation DSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-transform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"pretty_print\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n-                                        \"displayName\": \"Non-Strict Address Parsing\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n-                                \"displayName\": \"Email Address Parsing\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STRICT_ADDRESS_PARSING\",\n-                                \"required\": false,\n+                                \"name\": \"pretty_print\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Extraction was successful\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n-                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Each individual BCC recipient (if available)\",\n-                                \"name\": \"email.headers.bcc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual CC recipient (if available)\",\n-                                \"name\": \"email.headers.cc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n-                                \"name\": \"email.headers.from.*\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message-ID header (if available)\",\n-                                \"name\": \"email.headers.message-id\"\n-                            },\n-                            {\n-                                \"description\": \"The Received-Date of the message (if available)\",\n-                                \"name\": \"email.headers.received_date\"\n-                            },\n-                            {\n-                                \"description\": \"Date the message was sent\",\n-                                \"name\": \"email.headers.sent_date\"\n-                            },\n-                            {\n-                                \"description\": \"Subject of the message (if available)\",\n-                                \"name\": \"email.headers.subject\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual TO recipient (if available)\",\n-                                \"name\": \"email.headers.to.*\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attachments of the message\",\n-                                \"name\": \"email.attachment_count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"json\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.JoltTransformJSON\",\n+                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.tnef.attachment.parent.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.tnef.attachment.parent.uuid\"\n+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"CLIENT_AUTH\": {\n+                            \"list-db-include-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n+                                \"displayName\": \"Include Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CLIENT_AUTH\",\n-                                \"required\": false,\n+                                \"name\": \"list-db-include-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_HOSTNAME\": {\n-                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n-                                \"displayName\": \"SMTP hostname\",\n+                            \"list-db-refresh-interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n+                                \"displayName\": \"Refresh Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_HOSTNAME\",\n-                                \"required\": false,\n+                                \"name\": \"list-db-refresh-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n-                                \"displayName\": \"Maximum number of SMTP connection\",\n+                            \"list-db-tables-catalog\": {\n+                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n+                                \"displayName\": \"Catalog\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n-                                \"required\": true,\n+                                \"name\": \"list-db-tables-catalog\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum number of bytes the server will accept.\",\n-                                \"displayName\": \"SMTP Maximum Message Size\",\n+                            \"list-db-tables-db-connection\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n+                                \"name\": \"list-db-tables-db-connection\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"list-db-tables-name-pattern\": {\n+                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n+                                \"displayName\": \"Table Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_PORT\": {\n-                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n-                                \"displayName\": \"Listening Port\",\n+                            \"list-db-tables-schema-pattern\": {\n+                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n+                                \"displayName\": \"Schema Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_PORT\",\n-                                \"required\": true,\n+                                \"name\": \"list-db-tables-schema-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP_TIMEOUT\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n-                                \"displayName\": \"SMTP connection timeout\",\n+                            \"list-db-tables-types\": {\n+                                \"defaultValue\": \"TABLE\",\n+                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n+                                \"displayName\": \"Table Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_TIMEOUT\",\n-                                \"required\": true,\n+                                \"name\": \"list-db-tables-types\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL_CONTEXT_SERVICE\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL_CONTEXT_SERVICE\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"listen\",\n-                            \"smtp\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"list\",\n+                            \"sql\",\n+                            \"table\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n-                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The value used during HELO\",\n-                                \"name\": \"smtp.helo\"\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.name\"\n                             },\n                             {\n-                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.serial\"\n+                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.catalog\"\n                             },\n                             {\n-                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.principal\"\n+                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.schema\"\n                             },\n                             {\n-                                \"description\": \"The source IP and port of the SMTP connection\",\n-                                \"name\": \"smtp.src\"\n+                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n+                                \"name\": \"db.table.fullname\"\n                             },\n                             {\n-                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n-                                \"name\": \"smtp.from\"\n+                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n+                                \"name\": \"db.table.type\"\n                             },\n                             {\n-                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n-                                \"name\": \"smtp.recipient.*\"\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.remarks\"\n                             },\n                             {\n-                                \"description\": \"Mime type of the message\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Contains the number of rows in the table\",\n+                                \"name\": \"db.table.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cassandra-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the record data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Ignore Dotted Files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Dotted Files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Search Recursively\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"follow-symlink\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ftp-use-utf8\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"putcql-stmt-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of CQL Prepared Statements to cache. This can improve performance if many incoming flow files have the same CQL statement with different values for the parameters. If this property is set to zero, the cache is effectively disabled.\",\n-                                \"displayName\": \"Statement Cache Size\",\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"putcql-stmt-cache-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The type of each parameter is specified as a lowercase string corresponding to the Cassandra data type (text, int, boolean, e.g.). In the case of collections, the primitive type(s) of the elements in the collection should be comma-delimited, follow the collection type, and be enclosed in angle brackets (< and >), for example set<text> or map<timestamp, int>.\",\n-                                \"name\": \"cql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parameterized CQL statements. The value of the parameters are specified as cql.args.1.value, cql.args.2.value, cql.args.3.value, and so on. The  type of the cql.args.1.value parameter is specified by the cql.args.1.type attribute.\",\n-                                \"name\": \"cql.args.N.value\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFTP\",\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"set\",\n-                            \"update\"\n+                            \"files\",\n+                            \"ftp\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraQL\",\n-                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) statement on a Cassandra 1.x, 2.x, or 3.0.x cluster. The content of an incoming FlowFile is expected to be the CQL command to execute. The CQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention cql.args.N.type and cql.args.N.value, where N is a positive integer. The cql.args.N.type is expected to be a lowercase string indicating the Cassandra type.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The hostname of the FTP Server\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was connected to on the FTP Server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the FTP Listing\",\n+                                \"name\": \"ftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the FTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"name\": \"Ignore Hidden Files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"Include File Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SERIAL\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n+                                \"displayName\": \"Include File Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": false,\n+                                \"name\": \"Include File Attributes\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which files to pull files\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n-                                \"required\": false,\n+                                \"name\": \"Input Directory\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n-                                \"displayName\": \"Password\",\n+                            \"Input Directory Location\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n+                                \"displayName\": \"Input Directory Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Directory Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies the number of 'Insert statements' to be grouped together to execute as a batch (BatchStatement)\",\n-                                \"displayName\": \"Batch size\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-cassandra-record-batch-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-batch-statement-type\": {\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use a LOGGED batch statement\",\n-                                        \"displayName\": \"LOGGED\",\n-                                        \"value\": \"LOGGED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use an UNLOGGED batch statement\",\n-                                        \"displayName\": \"UNLOGGED\",\n-                                        \"value\": \"UNLOGGED\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Recurse Subdirectories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use a COUNTER batch statement\",\n-                                        \"displayName\": \"COUNTER\",\n-                                        \"value\": \"COUNTER\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"The value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED or COUNTER) will be used to generate and execute the Update statement.\",\n-                                        \"displayName\": \"Use cql.batch.statement.type Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"LOGGED\",\n-                                \"description\": \"Specifies the type of 'Batch Statement' to be used.\",\n-                                \"displayName\": \"Batch Statement Type\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-batch-statement-type\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-reader\": {\n-                                \"description\": \"Specifies the type of Record Reader controller service to use for parsing the incoming data and determining the schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"et-node-identifier\": {\n+                                \"defaultValue\": \"${hostname()}\",\n+                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Node Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-node-identifier\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"put-cassandra-record-statement-type\": {\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use an UPDATE statement.\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"Use an INSERT statement.\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"The value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n-                                        \"displayName\": \"Use cql.statement.type Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"INSERT\",\n-                                \"description\": \"Specifies the type of CQL Statement to generate.\",\n-                                \"displayName\": \"Statement Type\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-statement-type\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-table\": {\n-                                \"description\": \"The name of the Cassandra table to which the records have to be written.\",\n-                                \"displayName\": \"Table name\",\n+                            \"max-listing-time\": {\n+                                \"defaultValue\": \"3 mins\",\n+                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Directory Listing Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-cassandra-record-table\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-listing-time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-update-keys\": {\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the conversion to CQL will fail. This property is ignored if the Statement Type is not UPDATE.\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"max-operation-time\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Disk Operation Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-cassandra-record-update-keys\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-operation-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cassandra-record-update-method\": {\n+                            \"max-performance-metrics\": {\n+                                \"defaultValue\": \"100000\",\n+                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n+                                \"displayName\": \"Maximum Number of Files to Track\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"max-performance-metrics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use an increment operation (+=) for the Update statement.\",\n-                                        \"displayName\": \"Increment\",\n-                                        \"value\": \"INCREMENT\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"Use a decrement operation (-=) for the Update statement.\",\n-                                        \"displayName\": \"Decrement\",\n-                                        \"value\": \"DECREMENT\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n                                     },\n                                     {\n-                                        \"description\": \"Use a set operation (=) for the Update statement.\",\n-                                        \"displayName\": \"Set\",\n-                                        \"value\": \"SET\"\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n                                     },\n                                     {\n-                                        \"description\": \"The value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement.\",\n-                                        \"displayName\": \"Use cql.update.method Attribute\",\n-                                        \"value\": \"USE_ATTR\"\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SET\",\n-                                \"description\": \"Specifies the method to use to SET the values. This property is used if the Statement Type is UPDATE and ignored otherwise.\",\n-                                \"displayName\": \"Update Method\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cassandra-record-update-method\",\n-                                \"required\": false,\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use cql.statement.type Attribute' is selected for the Statement Type property, the value of the cql.statement.type Attribute will be used to determine which type of statement (UPDATE, INSERT) will be generated and executed\",\n-                                \"name\": \"cql.statement.type\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Use cql.update.method Attribute' is selected for the Update Method property, the value of the cql.update.method Attribute will be used to determine which operation (Set, Increment, Decrement) will be used to generate and execute the Update statement. Ignored if the Statement Type property is not set to UPDATE\",\n-                                \"name\": \"cql.update.method\"\n                             },\n-                            {\n-                                \"description\": \"If 'Use cql.batch.statement.type Attribute' is selected for the Batch Statement Type property, the value of the cql.batch.statement.type Attribute will be used to determine which type of batch statement (LOGGED, UNLOGGED, COUNTER) will be generated and executed\",\n-                                \"name\": \"cql.batch.statement.type\"\n+                            \"track-performance\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n+                                \"displayName\": \"Track Performance\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"track-performance\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\",\n-                            \"set\",\n-                            \"update\"\n+                            \"file\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.PutCassandraRecord\",\n-                        \"typeDescription\": \"This is a record aware processor that reads the content of the incoming FlowFile as individual records using the configured 'Record Reader' and writes them to Apache Cassandra using native protocol version 3 or higher.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n+                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n+                                \"name\": \"absolute.path\"\n+                            },\n+                            {\n+                                \"description\": \"The user that owns the file in filesystem\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group that owns the file in filesystem\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the file in filesystem\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.creationTime\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cassandra-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"CQL select query\": {\n-                                \"description\": \"CQL select query\",\n-                                \"displayName\": \"CQL select query\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CQL select query\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Ciphers Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cassandra Contact Points\": {\n-                                \"description\": \"Contact points are addresses of Cassandra nodes. The list of contact points should be comma-separated and in hostname:port format. Example node1:port,node2:port,.... The default client port for Cassandra is 9042, but the port(s) must be explicitly specified.\",\n-                                \"displayName\": \"Cassandra Contact Points\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Cassandra Contact Points\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the record data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Consistency Level\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ANY\",\n-                                        \"value\": \"ANY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ONE\",\n-                                        \"value\": \"ONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWO\",\n-                                        \"value\": \"TWO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"THREE\",\n-                                        \"value\": \"THREE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUORUM\",\n-                                        \"value\": \"QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ALL\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_QUORUM\",\n-                                        \"value\": \"LOCAL_QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EACH_QUORUM\",\n-                                        \"value\": \"EACH_QUORUM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SERIAL\",\n-                                        \"value\": \"SERIAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_SERIAL\",\n-                                        \"value\": \"LOCAL_SERIAL\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LOCAL_ONE\",\n-                                        \"value\": \"LOCAL_ONE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ONE\",\n-                                \"description\": \"The strategy for how many replicas must respond before results are returned.\",\n-                                \"displayName\": \"Consistency Level\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Consistency Level\",\n-                                \"required\": false,\n+                                \"name\": \"Ignore Dotted Files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fetch size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. Zero is the default and means there is no limit.\",\n-                                \"displayName\": \"Fetch size\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch size\",\n-                                \"required\": true,\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keyspace\": {\n-                                \"description\": \"The Cassandra Keyspace to connect to. If no keyspace is specified, the query will need to include the keyspace name before any table reference, in case of 'query' native processors or if the processor exposes the 'Table' property, the keyspace name has to be provided with the table name in the form of <KEYSPACE>.<TABLE>\",\n-                                \"displayName\": \"Keyspace\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Keyspace\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Rows Per Flow File\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Rows Per Flow File\",\n-                                \"required\": true,\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running CQL select query. Must be of format <duration> <TimeUnit> where <duration> is a non-negative integer and TimeUnit is a supported Time Unit, such as: nanos, millis, secs, mins, hrs, days. A value of zero means there is no limit. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Avro\",\n-                                \"description\": \"The format to which the result rows will be converted. If JSON is selected, the output will contain an object with field 'results' containing an array of result rows. Each row in the array is a map of the named column to its value. For example: { \\\"results\\\": [{\\\"userid\\\":1, \\\"name\\\":\\\"Joe Smith\\\"}]}\",\n-                                \"displayName\": \"Output Format\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password to access the Cassandra cluster\",\n+                                \"description\": \"Password for the user account\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to access the Cassandra cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cassandra-connection-provider\": {\n-                                \"description\": \"Specifies the Cassandra connection providing controller service to be used to connect to Cassandra cluster.\",\n-                                \"displayName\": \"Cassandra Connection Provider\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cassandra-connection-provider\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-cassandra-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.cassandra.CassandraSessionProviderService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Search Recursively\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"timestamp-format-pattern\": {\n-                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ssZ\",\n-                                \"description\": \"Pattern to use when converting timestamp fields to JSON. Note: the formatted timestamp will be in UTC timezone.\",\n-                                \"displayName\": \"Timestamp Format Pattern for JSON output\",\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timestamp-format-pattern\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation cannot be completed but attempting it again may succeed.\",\n-                                \"name\": \"retry\"\n                             },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation completed successfully.\",\n-                                \"name\": \"success\"\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"A FlowFile is transferred to this relationship if the operation failed.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"cassandra\",\n-                            \"cql\",\n-                            \"select\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cassandra.QueryCassandra\",\n-                        \"typeDescription\": \"Execute provided Cassandra Query Language (CQL) select query on a Cassandra 1.x, 2.x, or 3.0.x cluster. Query result may be converted to Avro or JSON format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query. FlowFile attribute 'executecql.row.count' indicates how many rows were selected.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of rows returned by the CQL query\",\n-                                \"name\": \"executecql.row.count\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"application-default-credentials\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n-                                \"displayName\": \"Use Application Default Credentials\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"application-default-credentials\",\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compute-engine-credentials\": {\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n-                                \"displayName\": \"Use Compute Engine Credentials\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compute-engine-credentials\",\n-                                \"required\": false,\n+                                \"name\": \"follow-symlink\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"service-account-json\": {\n-                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n-                                \"displayName\": \"Service Account JSON\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"service-account-json\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"service-account-json-file\": {\n-                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n-                                \"displayName\": \"Service Account JSON File\",\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-account-json-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                \"version\": \"1.22.0\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"gcp\",\n-                            \"provider\"\n+                            \"files\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n-                        \"version\": \"1.22.0\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The hostname of the SFTP Server\",\n+                                \"name\": \"sftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was connected to on the SFTP Server\",\n+                                \"name\": \"sftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the SFTP Listing\",\n+                                \"name\": \"sftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the SFTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"bind-address\": {\n+                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n+                                \"displayName\": \"Bind Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"bind-address\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"bq.append.record.count\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n-                                \"displayName\": \"Append Record Count\",\n+                            \"listening-port\": {\n+                                \"defaultValue\": \"2221\",\n+                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.append.record.count\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"listening-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"password\": {\n+                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"bq.record.reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.record.reader\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"bq.skip.invalid.rows\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n-                                \"displayName\": \"Skip Invalid Rows\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.skip.invalid.rows\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.transfer.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use streaming record handling strategy\",\n-                                        \"displayName\": \"STREAM\",\n-                                        \"value\": \"STREAM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use batching record handling strategy\",\n-                                        \"displayName\": \"BATCH\",\n-                                        \"value\": \"BATCH\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"STREAM\",\n-                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n-                                \"displayName\": \"Transfer Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.transfer.type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            },\n+                            \"username\": {\n+                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"description\": \"Relationship for successfully received files.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"FTP\",\n+                            \"FTPS\",\n+                            \"ingest\",\n+                            \"listen\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n-                        \"typeDescription\": \"Unified processor for batch and stream flow files content to a Google BigQuery table via the Storage Write API.The processor is record based so the used schema is driven by the RecordReader. Attributes that are not matched to the target schemaare skipped. Exactly once delivery semantics are achieved via stream offsets. The Storage Write API is more efficient than the older insertAll method because it uses gRPC streaming rather than REST over HTTP\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n+                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n+                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -85936,445 +86477,306 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Authorized DN Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Subject DN Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Authorized DN Pattern\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"bq.avro.use.logical.types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If format is set to Avro and if this option is set to true, you can interpret logical types into their corresponding types (such as TIMESTAMP) instead of only using their raw types (such as INTEGER).\",\n-                                \"displayName\": \"Avro Input - Use Logical Types\",\n+                            \"Base Path\": {\n+                                \"defaultValue\": \"contentListener\",\n+                                \"description\": \"Base path for incoming connections\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.avro.use.logical.types\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Base Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.allow.jagged.rows\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set whether BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default, rows with missing trailing columns are considered bad records.\",\n-                                \"displayName\": \"CSV Input - Allow Jagged Rows\",\n+                            \"HTTP Headers to receive as Attributes (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n+                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.allow.jagged.rows\",\n-                                \"required\": true,\n+                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.allow.quoted.new.lines\": {\n+                            \"HTTP Protocols\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow quoted data sections that contain newline characters in a CSV file. By default quoted newline are not allowed.\",\n-                                \"displayName\": \"CSV Input - Allow Quoted New Lines\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.allow.quoted.new.lines\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.csv.charset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Sets the character encoding of the data.\",\n-                                \"displayName\": \"CSV Input - Character Set\",\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.csv.charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.csv.delimiter\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"Sets the separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence \\\"\\t\\\" to specify a tab separator. The default value is a comma (',').\",\n-                                \"displayName\": \"CSV Input - Field Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.csv.quote\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"description\": \"Sets the value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('\\\"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the Allow Quoted New Lines property to true.\",\n-                                \"displayName\": \"CSV Input - Quote\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.quote\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.csv.skip.leading.rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.\",\n-                                \"displayName\": \"CSV Input - Skip Leading Rows\",\n+                            \"Listening Port\": {\n+                                \"description\": \"The Port to listen on for incoming connections\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.csv.skip.leading.rows\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"Max Data to Receive per Second\": {\n+                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n+                                \"displayName\": \"Max Data to Receive per Second\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Data to Receive per Second\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.create_disposition\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Configures the job to create the table if it does not exist.\",\n-                                        \"displayName\": \"CREATE_IF_NEEDED\",\n-                                        \"value\": \"CREATE_IF_NEEDED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Configures the job to fail with a not-found error if the table does not exist.\",\n-                                        \"displayName\": \"CREATE_NEVER\",\n-                                        \"value\": \"CREATE_NEVER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"CREATE_IF_NEEDED\",\n-                                \"description\": \"Sets whether the job is allowed to create new tables\",\n-                                \"displayName\": \"Create Disposition\",\n+                            \"Max Unconfirmed Flowfile Time\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n+                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.create_disposition\",\n+                                \"name\": \"Max Unconfirmed Flowfile Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.ignore_unknown\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n-                                \"displayName\": \"Ignore Unknown Values\",\n+                            \"Return Code\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The HTTP return code returned after every HTTP call\",\n+                                \"displayName\": \"Return Code\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.ignore_unknown\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Return Code\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.max_badrecords\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. By default no bad record is ignored.\",\n-                                \"displayName\": \"Max Bad Records\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables support for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.max_badrecords\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"bq.load.type\": {\n-                                \"description\": \"Data type of the file to be loaded. Possible values: AVRO, NEWLINE_DELIMITED_JSON, CSV.\",\n-                                \"displayName\": \"Load file type\",\n+                            \"authorized-issuer-dn-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Issuer DN Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"authorized-issuer-dn-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.write_disposition\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Configures the job to fail with a duplicate error if the table already exists.\",\n-                                        \"displayName\": \"WRITE_EMPTY\",\n-                                        \"value\": \"WRITE_EMPTY\"\n+                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n-                                        \"description\": \"Configures the job to append data to the table if it already exists.\",\n-                                        \"displayName\": \"WRITE_APPEND\",\n-                                        \"value\": \"WRITE_APPEND\"\n+                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Configures the job to overwrite the table data if table already exists.\",\n-                                        \"displayName\": \"WRITE_TRUNCATE\",\n-                                        \"value\": \"WRITE_TRUNCATE\"\n+                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not request the client certificate on handshake\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WRITE_EMPTY\",\n-                                \"description\": \"Sets the action that should occur if the destination table already exists.\",\n-                                \"displayName\": \"Write Disposition\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.load.write_disposition\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.readtimeout\": {\n-                                \"defaultValue\": \"5 minutes\",\n-                                \"description\": \"Load Job Time Out\",\n-                                \"displayName\": \"Read Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.readtimeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"bq.table.schema\": {\n-                                \"description\": \"BigQuery schema in JSON format\",\n-                                \"displayName\": \"Table Schema\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.schema\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"client-authentication\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"health-check-port\": {\n+                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n+                                \"displayName\": \"Listening Port for Health Check Requests\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n+                                \"name\": \"health-check-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"max-thread-pool-size\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n+                                \"displayName\": \"Maximum Thread Pool Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-thread-pool-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-read-buffer-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"description\": \"Relationship for successfully received FlowFiles\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rest\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Batch loads flow files content to a Google BigQuery table.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Time load job creation\",\n-                                \"name\": \"bq.job.stat.creation_time\"\n-                            },\n-                            {\n-                                \"description\": \"Time load job ended\",\n-                                \"name\": \"bq.job.stat.end_time\"\n-                            },\n-                            {\n-                                \"description\": \"Time load job started\",\n-                                \"name\": \"bq.job.stat.start_time\"\n-                            },\n-                            {\n-                                \"description\": \"API Link to load job\",\n-                                \"name\": \"bq.job.link\"\n-                            },\n-                            {\n-                                \"description\": \"ID of the BigQuery job\",\n-                                \"name\": \"bq.job.id\"\n-                            },\n-                            {\n-                                \"description\": \"Load job error message\",\n-                                \"name\": \"bq.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Load job error reason\",\n-                                \"name\": \"bq.error.reason\"\n-                            },\n-                            {\n-                                \"description\": \"Load job error location\",\n-                                \"name\": \"bq.error.location\"\n-                            },\n-                            {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, and DELETE will result in an error and the HTTP response status code 405. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86382,229 +86784,216 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.load.ignore_unknown\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. By default unknown values are not allowed.\",\n-                                \"displayName\": \"Ignore Unknown Values\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.load.ignore_unknown\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.record.reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.record.reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"bq.skip.invalid.rows\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n-                                \"displayName\": \"Skip Invalid Rows\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.skip.invalid.rows\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Receive Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryBatch\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"record\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"relp\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQueryStreaming\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use PutBigQuery instead. Load data into Google BigQuery table using the streaming API. This processor is not intended to load large flow files as it will load the full content into memory. If you need to insert large flow files, consider using PutBigQueryBatch instead.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n+                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n+                                \"description\": \"The command of the RELP frames.\",\n+                                \"name\": \"relp.command\"\n+                            },\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"relp.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The sending port the messages were received over.\",\n+                                \"name\": \"relp.port\"\n+                            },\n+                            {\n+                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n+                                \"name\": \"relp.txnr\"\n+                            },\n+                            {\n+                                \"description\": \"The mime.type of the content which is text/plain\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86613,420 +87002,614 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"drive-file-id\": {\n-                                \"defaultValue\": \"${drive.id}\",\n-                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details to obtain Drive ID.\",\n-                                \"displayName\": \"File ID\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"drive-file-id\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Max Number of TCP Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Parse Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n+                                \"displayName\": \"Parse Messages\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Parse Messages\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n+                                \"displayName\": \"Receive Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"socket-keep-alive\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n+                                \"displayName\": \"Socket Keep Alive\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"socket-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"fetch\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            },\n+                            {\n+                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n+                                \"name\": \"syslog.valid\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol over which the Syslog message was received.\",\n+                                \"name\": \"syslog.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The port over which the Syslog message was received.\",\n+                                \"name\": \"syslog.port\"\n+                            },\n+                            {\n+                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"et-initial-listing-target\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Receive Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"idle-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n+                                \"displayName\": \"Idle Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"idle-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-receiving-threads\": {\n+                                \"description\": \"This property is deprecated and no longer used.\",\n+                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-receiving-threads\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"recursive-search\": {\n+                            \"pool-receive-buffers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n+                                \"displayName\": \"Pool Receive Buffers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"pool-receive-buffers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"listen\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                        \"typeDescription\": \"Lists concrete files (shortcuts are ignored) in a Google Drive folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"tcp.port\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87035,196 +87618,239 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n+                                \"name\": \"client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"100 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"max-number-tcp-connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n+                                \"name\": \"max-number-tcp-connections\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"max-size-socket-buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-size-socket-buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reader-error-handling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Transfers any records already received and closes the connection.\",\n+                                        \"displayName\": \"Transfer\",\n+                                        \"value\": \"Transfer\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Discards any records already received and closes the connection.\",\n+                                        \"displayName\": \"Discard\",\n+                                        \"value\": \"Discard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"Transfer\",\n+                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n+                                \"displayName\": \"Read Error Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"reader-error-handling-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"record-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n+                                \"displayName\": \"Record Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"listen\",\n+                            \"record\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n-                        \"typeDescription\": \"Puts content to a Google Drive Folder.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The host that sent the data.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The port that the processor accepted the connection on.\",\n+                                \"name\": \"tcp.port\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87236,136 +87862,162 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Sending Host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sending Host\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"Sending Host Port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sending Host Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"pubsub\"\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"source\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.ackId\"\n-                            },\n-                            {\n-                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.messageSize\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n                             {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87373,1363 +88025,1489 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-topic\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"poll-timeout\": {\n+                                \"defaultValue\": \"50 ms\",\n+                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n+                                \"displayName\": \"Poll Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"poll-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"sending-host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sending-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sending-host-port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"sending-host-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"record\",\n+                            \"source\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n-                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n                             {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Attributes to Ignore\": {\n+                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Attributes to Ignore\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Attributes to Log\": {\n+                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attributes to Log\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log FlowFile Properties\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n+                                \"displayName\": \"Log FlowFile Properties\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log FlowFile Properties\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-bytes-outstanding\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n-                                \"displayName\": \"Bytes Outstanding\",\n+                            \"Log Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"trace\",\n+                                        \"value\": \"trace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"debug\",\n+                                        \"value\": \"debug\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"info\",\n+                                        \"value\": \"info\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"error\",\n+                                        \"value\": \"error\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the Attributes\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-bytes-outstanding\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-messages-outstanding\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The number of messages that may be outstanding to the client.\",\n-                                \"displayName\": \"Messages Outstanding\",\n+                            \"Log Payload\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n+                                \"displayName\": \"Log Payload\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-messages-outstanding\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log Payload\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"Log prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n+                                \"displayName\": \"Log prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Log prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n+                                        \"displayName\": \"Line per Attribute\",\n+                                        \"value\": \"Line per Attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"Single Line\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Line per Attribute\",\n+                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n+                                \"displayName\": \"Output Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attributes-to-ignore-regex\": {\n+                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-ignore-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attributes-to-log-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log by Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-log-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the CharacterSet to use\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"pubsub\"\n+                            \"attributes\",\n+                            \"logging\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n-                                \"name\": \"gcp.pubsub.ordering.key\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n-                            },\n-                            {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n+                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"gcp-batch-bytes\": {\n-                                \"defaultValue\": \"3 MB\",\n-                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size property, whichever condition is met first.\",\n-                                \"displayName\": \"Batch Bytes Threshold\",\n+                            \"log-level\": {\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"log-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-ordering-key\": {\n-                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n-                                \"displayName\": \"Ordering Key\",\n+                            \"log-message\": {\n+                                \"description\": \"The log message to emit\",\n+                                \"displayName\": \"Log message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcp-ordering-key\",\n+                                \"name\": \"log-message\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"log-prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n+                                \"displayName\": \"Log prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-pubsub-topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"log-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"attributes\",\n+                            \"logging\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n-                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n+                        \"typeDescription\": \"Emits a log message at the specified log level\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the attribute to add to the FlowFile\",\n+                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"include-empty-values\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Include null or blank values for keys that are null or blank\",\n+                                \"displayName\": \"Include Empty Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"include-empty-values\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"lookup-service\": {\n+                                \"description\": \"The lookup service to use for attribute lookups\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n-                                \"displayName\": \"Generation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"lookup\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n+                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Value To Lookup\",\n+                                \"value\": \"Valid Record Path\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"lookup-service\": {\n+                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"record-path-lookup-miss-result-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n+                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"record-update-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n+                                        \"displayName\": \"Replace Existing Values\",\n+                                        \"value\": \"replace-existing-values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n+                                        \"displayName\": \"Use Property\",\n+                                        \"value\": \"use-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"use-property\",\n+                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n+                                \"displayName\": \"Record Update Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-update-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n-                                \"displayName\": \"Object Generation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Name\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"gcs-object-range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"result-contents\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Entire Record\",\n+                                        \"value\": \"insert-entire-record\"\n+                                    },\n+                                    {\n+                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Record Fields\",\n+                                        \"value\": \"record-fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"insert-entire-record\",\n+                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n+                                \"displayName\": \"Record Result Contents\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-length\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"result-contents\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"result-record-path\": {\n+                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n+                                \"displayName\": \"Result RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-start\",\n+                                \"name\": \"result-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"routing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n+                                        \"displayName\": \"Route to 'success'\",\n+                                        \"value\": \"route-to-success\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles.\",\n+                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n+                                        \"value\": \"route-to-matched-unmatched\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"route-to-success\",\n+                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n+                                \"name\": \"routing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"database\",\n+                            \"db\",\n+                            \"enrichment\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"route\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n+                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n-                            },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n-                            },\n-                            {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"ZIP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Compression Level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Correlation Attribute Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Correlation Attribute Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n+                            \"Delimiter Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n+                                        \"displayName\": \"Do Not Use Delimiters\",\n+                                        \"value\": \"Do Not Use Delimiters\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n+                                        \"displayName\": \"Filename\",\n+                                        \"value\": \"Filename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do Not Use Delimiters\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"Binary Concatenation\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n+                                \"displayName\": \"Delimiter Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"Delimiter Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n+                            \"Demarcator File\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"window\"\n+                                            \"Filename\",\n+                                            \"Text\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n-                                        \"propertyName\": \"et-initial-listing-target\"\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n+                                \"displayName\": \"Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Demarcator File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Footer File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n+                                \"displayName\": \"Footer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Footer File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n+                            \"Header File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n+                                \"displayName\": \"Header\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Header File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n+                            \"Keep Path\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ZIP\",\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n+                                \"displayName\": \"Keep Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n+                            \"Max Bin Age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Bin Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n+                            \"Maximum Group Size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n+                                \"displayName\": \"Maximum Group Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Group Size\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"Maximum Number of Entries\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of files to include in a bundle\",\n+                                \"displayName\": \"Maximum Number of Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Maximum Number of Entries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum number of Bins\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-prefix\": {\n-                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n-                                \"displayName\": \"Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcs-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-use-generations\": {\n+                            \"Merge Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n+                                        \"displayName\": \"TAR\",\n+                                        \"value\": \"TAR\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v3\",\n+                                        \"value\": \"FlowFile Stream, v3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v2\",\n+                                        \"value\": \"FlowFile Stream, v2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n+                                        \"displayName\": \"FlowFile Tar, v1\",\n+                                        \"value\": \"FlowFile Tar, v1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Binary Concatenation\",\n+                                        \"value\": \"Binary Concatenation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Generations\",\n+                                \"defaultValue\": \"Binary Concatenation\",\n+                                \"description\": \"Determines the format that will be used to merge the content.\",\n+                                \"displayName\": \"Merge Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-use-generations\",\n+                                \"name\": \"Merge Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Merge Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index> or alternatively (for backward compatibility purposes) <segment.identifier>, <segment.count>, and <segment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Merge Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Minimum Group Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The minimum size for the bundle\",\n+                                \"displayName\": \"Minimum Group Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Minimum Group Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Minimum Number of Entries\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The minimum number of files to include in a bundle\",\n+                                \"displayName\": \"Minimum Number of Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Minimum Number of Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"Tar Modified Time\": {\n+                                \"defaultValue\": \"${file.lastModifiedTime}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n+                                \"displayName\": \"Tar Modified Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Tar Modified Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"mergecontent-metadata-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n+                                        \"displayName\": \"Use First Metadata\",\n+                                        \"value\": \"Use First Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Keep Only Common Metadata\",\n+                                        \"value\": \"Keep Only Common Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n+                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n+                                        \"displayName\": \"Ignore Metadata\",\n+                                        \"value\": \"Ignore Metadata\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Avro\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n+                                \"displayName\": \"Metadata Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n+                                \"name\": \"tar.permissions\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                            \"org.apache.nifi.processors.standard.MergeRecord\",\n+                            \"org.apache.nifi.processors.standard.SegmentContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged content\",\n+                                \"name\": \"merged\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"list\",\n-                            \"storage\"\n+                            \"archive\",\n+                            \"concatenation\",\n+                            \"content\",\n+                            \"correlation\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"merge\",\n+                            \"stream\",\n+                            \"tar\",\n+                            \"zip\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                        \"typeDescription\": \"Retrieves a listing of objects from an GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n+                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file\",\n+                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n                             },\n                             {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n                             },\n                             {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n+                                \"name\": \"merge.uuid\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n+                                \"name\": \"merge.reason\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -88737,649 +89515,350 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n-                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-host\": {\n-                                \"description\": \"IP or hostname of the proxy to be used.\\n You might need to set the following properties in bootstrap for https proxy usage:\\n-Djdk.http.auth.tunneling.disabledSchemes=\\n-Djdk.http.auth.proxying.disabledSchemes=\",\n-                                \"displayName\": \"Proxy host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-port\": {\n-                                \"description\": \"Proxy port number\",\n-                                \"displayName\": \"Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-user-name\": {\n-                                \"description\": \"HTTP Proxy Username\",\n-                                \"displayName\": \"HTTP Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-proxy-user-password\": {\n-                                \"description\": \"HTTP Proxy Password\",\n-                                \"displayName\": \"HTTP Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"gcp-proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-content-disposition-type\": {\n+                            \"Attribute Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n-                                        \"displayName\": \"Inline\",\n-                                        \"value\": \"inline\"\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n                                     },\n                                     {\n-                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n-                                        \"displayName\": \"Attachment\",\n-                                        \"value\": \"attachment\"\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n-                                \"displayName\": \"Content Disposition Type\",\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-content-disposition-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-content-type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"Content Type for the file, i.e. text/plain\",\n-                                \"displayName\": \"Content Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-content-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-acl\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n-                                        \"displayName\": \"All Authenticated Users\",\n-                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Authenticated Read\",\n-                                        \"value\": \"AUTHENTICATED_READ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Full Control\",\n-                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Read Only\",\n-                                        \"value\": \"BUCKET_OWNER_READ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n-                                        \"displayName\": \"Private\",\n-                                        \"value\": \"PRIVATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n-                                        \"displayName\": \"Project Private\",\n-                                        \"value\": \"PROJECT_PRIVATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n-                                        \"displayName\": \"Public Read Only\",\n-                                        \"value\": \"PUBLIC_READ\"\n-                                    }\n-                                ],\n-                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n-                                \"displayName\": \"Object ACL\",\n+                            \"correlation-attribute-name\": {\n+                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-object-acl\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-crc32c\": {\n-                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n-                                \"displayName\": \"CRC32C Checksum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-crc32c\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-md5\": {\n-                                \"description\": \"MD5 Hash (encoded in Base64) of the file for server-side validation.\",\n-                                \"displayName\": \"MD5 Hash\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-md5\",\n+                                \"name\": \"correlation-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-overwrite-object\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n-                                \"displayName\": \"Overwrite Object\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-overwrite-object\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gzip.content.enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n-                                \"displayName\": \"GZIP Compression Enabled\",\n+                            \"max-bin-age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gzip.content.enabled\",\n+                                \"name\": \"max-bin-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"max-bin-size\": {\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n+                                \"displayName\": \"Maximum Bin Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"max-bin-size\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"max-records\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"storage-api-url\",\n+                                \"name\": \"max-records\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"archive\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n-                        \"typeDescription\": \"Puts flow files to a Google Cloud Bucket.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n                             },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                            \"max.bin.count\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Bins\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.bin.count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                            \"merge-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"merge-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                            \"min-bin-size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size of for the bin\",\n+                                \"displayName\": \"Minimum Bin Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-bin-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"min-records\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The minimum number of records to include in a bin\",\n+                                \"displayName\": \"Minimum Number of Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"min-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n+                                \"name\": \"fragment.count\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n                                 \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged records\",\n+                                \"name\": \"merged\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"content\",\n+                            \"correlation\",\n+                            \"event\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n+                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"End Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the end of the file.\",\n+                                \"displayName\": \"End Offset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"End Offset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remove All Content\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n+                                \"displayName\": \"Remove All Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Remove All Content\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"Start Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n+                                \"displayName\": \"Start Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n+                                \"name\": \"Start Offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Processed flowfiles.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"binary\",\n+                            \"discard\",\n+                            \"keep\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n+                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89388,228 +89867,336 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Activity Restored Message\": {\n+                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n+                                \"displayName\": \"Activity Restored Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Activity Restored Message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Continually Send Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n+                                \"displayName\": \"Continually Send Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Continually Send Messages\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Copy Attributes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n+                                \"displayName\": \"Copy Attributes\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Copy Attributes\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"Inactivity Message\": {\n+                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n+                                \"displayName\": \"Inactivity Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n-                                \"required\": false,\n+                                \"name\": \"Inactivity Message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"Monitoring Scope\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"node\",\n+                                        \"value\": \"node\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"cluster\",\n+                                        \"value\": \"cluster\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"node\",\n+                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n+                                \"displayName\": \"Monitoring Scope\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Monitoring Scope\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Reporting Node\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"all\",\n+                                        \"value\": \"all\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"primary\",\n+                                        \"value\": \"primary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n+                                \"displayName\": \"Reporting Node\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reporting Node\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Threshold Duration\": {\n+                                \"defaultValue\": \"5 min\",\n+                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n+                                \"displayName\": \"Threshold Duration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Threshold Duration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide.If 'Copy Attribute' is set to true, then flow file attributes are also persisted.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n+                                \"name\": \"inactive\"\n+                            },\n+                            {\n+                                \"description\": \"All incoming FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n+                                \"name\": \"activity.restored\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"active\",\n+                            \"activity\",\n+                            \"detection\",\n+                            \"flow\",\n+                            \"inactive\",\n+                            \"monitor\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n+                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n+                                \"name\": \"inactivityStartMillis\"\n+                            },\n+                            {\n+                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n+                                \"name\": \"inactivityDurationMillis\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"attribute-cache-regex\": {\n+                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n+                                \"displayName\": \"Attribute Cache Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"attribute-cache-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n+                                \"displayName\": \"Release Signal Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n+                                \"name\": \"release-signal-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"signal-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n+                                \"displayName\": \"Signal Buffer Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"signal-buffer-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"signal-counter-delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n+                                \"displayName\": \"Signal Counter Delta\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n-                                \"required\": false,\n+                                \"name\": \"signal-counter-delta\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"signal-counter-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n+                                \"displayName\": \"Signal Counter Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n-                                \"required\": false,\n+                                \"name\": \"signal-counter-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Wait\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"notify\",\n+                            \"release\",\n+                            \"signal\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n+                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n+                                \"name\": \"notified\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"1.22.0\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n@@ -89625,166 +90212,221 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"attribute-list\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n-                                \"displayName\": \"Attribute List\",\n+                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attribute-list\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n+                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n+                                \"displayName\": \"Append raw message to JSON\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"attributes-regex\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"destination\": {\n+                            \"DATETIME_REPRESENTATION\": {\n+                                \"defaultValue\": \"en-US\",\n+                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n+                                \"displayName\": \"DateTime Locale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DATETIME_REPRESENTATION\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"FIELDS_DESTINATION\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n+                                        \"description\": \"\",\n                                         \"displayName\": \"flowfile-content\",\n                                         \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"destination\",\n+                                \"name\": \"FIELDS_DESTINATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-core-attributes\": {\n+                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n-                                \"displayName\": \"Include Core Attributes\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n+                                \"displayName\": \"Include custom extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-core-attributes\",\n+                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-schema\": {\n+                            \"TIME_REPRESENTATION\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Local Timezone (system Default)\",\n+                                        \"value\": \"Local Timezone (system Default)\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n-                                \"displayName\": \"Include Schema\",\n+                                \"defaultValue\": \"Local Timezone (system Default)\",\n+                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n+                                \"displayName\": \"Timezone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-schema\",\n+                                \"name\": \"TIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"null-value\": {\n+                            \"VALIDATE_DATA\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n-                                \"displayName\": \"Null Value\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to true, the event will be validated against the CEF standard (revision 23). If the event is invalid, the FlowFile will be routed to the failure relationship. If this property is set to false, the event will be processed without validating the data.\",\n+                                \"displayName\": \"Validate the CEF event\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"null-value\",\n+                                \"name\": \"VALIDATE_DATA\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully converted attributes to CSV\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failed to convert attributes to CSV\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n                             \"attributes\",\n-                            \"csv\",\n-                            \"flowfile\"\n+                            \"cef\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n-                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n+                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"CSV representation of the Schema\",\n-                                \"name\": \"CSVSchema\"\n+                                \"description\": \"The version of the CEF message.\",\n+                                \"name\": \"cef.header.version\"\n                             },\n                             {\n-                                \"description\": \"CSV representation of Attributes\",\n-                                \"name\": \"CSVData\"\n+                                \"description\": \"The Device Vendor of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVendor\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Product of the CEF message.\",\n+                                \"name\": \"cef.header.deviceProduct\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Version of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVersion\"\n+                            },\n+                            {\n+                                \"description\": \"The Device Event Class ID of the CEF message.\",\n+                                \"name\": \"cef.header.deviceEventClassId\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the CEF message.\",\n+                                \"name\": \"cef.header.name\"\n+                            },\n+                            {\n+                                \"description\": \"The severity of the CEF message.\",\n+                                \"name\": \"cef.header.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The key and value generated by the parsing of the message.\",\n+                                \"name\": \"cef.extension.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -89803,162 +90445,96 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes List\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n-                                \"displayName\": \"Attributes List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Core Attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n-                                \"displayName\": \"Include Core Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Core Attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"JSON Handling Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Escapes JSON attribute values to strings\",\n-                                        \"displayName\": \"Escaped\",\n-                                        \"value\": \"ESCAPED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n-                                        \"displayName\": \"Nested\",\n-                                        \"value\": \"NESTED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ESCAPED\",\n-                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n-                                \"displayName\": \"JSON Handling Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Handling Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Null Value\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n-                                \"displayName\": \"Null Value\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"attributes-to-json-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"attributes-to-json-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully converted attributes to JSON\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Failed to convert attributes to JSON\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n                             \"attributes\",\n-                            \"flowfile\",\n-                            \"json\"\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n-                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"JSON representation of Attributes\",\n-                                \"name\": \"JSONAttributes\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n+                            },\n+                            {\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n+                            },\n+                            {\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -89973,971 +90549,1040 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.EncodeContent\"\n-                        ],\n-                        \"deprecationReason\": \"EncodeContent supports Base64 and additional encoding schemes\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mode\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"include_policy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n+                                \"displayName\": \"Include Message Body in Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"include_policy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"nil_policy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The missing field will not have an attribute added.\",\n+                                        \"displayName\": \"OMIT\",\n+                                        \"value\": \"OMIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The missing field will have an empty attribute added.\",\n+                                        \"displayName\": \"NULL\",\n+                                        \"value\": \"NULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n+                                        \"displayName\": \"DASH\",\n+                                        \"value\": \"DASH\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NULL\",\n+                                \"description\": \"Defines how NIL values are handled for header fields.\",\n+                                \"displayName\": \"NIL Policy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"nil_policy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"base64\",\n-                            \"encode\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"syslog5424\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Base64EncodeContent\",\n-                        \"typeDescription\": \"Encodes or decodes content to and from base64\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n+                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n+                            },\n+                            {\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n+                            },\n+                            {\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n+                            },\n+                            {\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The appname of the Syslog message.\",\n+                                \"name\": \"syslog.appname\"\n+                            },\n+                            {\n+                                \"description\": \"The procid of the Syslog message.\",\n+                                \"name\": \"syslog.procid\"\n+                            },\n+                            {\n+                                \"description\": \"The messageid the Syslog message.\",\n+                                \"name\": \"syslog.messageid\"\n+                            },\n+                            {\n+                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n+                                \"name\": \"syslog.structuredData\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n+                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n+                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associted RecordPath.\",\n+                                \"value\": \"A RecordPath that points to a field in the Record.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-stats-limit\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n-                                \"displayName\": \"record-stats-limit\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"record-stats-limit\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"record-stats-reader\": {\n-                                \"description\": \"A record reader to use for reading the records.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-stats-reader\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"metrics\",\n+                            \"bin\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n                             \"record\",\n-                            \"stats\"\n+                            \"recordpath\",\n+                            \"rpath\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n-                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates one or more RecordPaths against the each record in the incoming FlowFile. Each record is then grouped with other \\\"like records\\\" and a FlowFile is created for each group of \\\"like records.\\\" What it means for two records to be \\\"like records\\\" is determined by user-defined properties. The user is required to enter at least one user-defined property whose value is a RecordPath. Two records are considered alike if they have the same value for all configured RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n                                 \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n+                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n+                                \"name\": \"<dynamic property name>\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Compression Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n-                                \"displayName\": \"Compression Format\",\n+                            \"Attributes to Send as HTTP Headers (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as HTTP Headers\",\n+                                \"displayName\": \"Attributes to Send as HTTP Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Format\",\n-                                \"required\": true,\n+                                \"name\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Compression Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"Compression Format\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"compress\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Determines the GZIP Compression Level to use when sending the file; the value must be in the range of 0-9. A value of 0 indicates that the file will not be GZIP'ed\",\n                                 \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"The Content-Type to specify for the content of the FlowFile being POSTed if Send as FlowFile is false. In the case of an empty value after evaluating an expression language expression, Content-Type defaults to application/octet-stream\",\n+                                \"displayName\": \"Content-Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content-Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"If the Send as FlowFile property is true, specifies the max data size for a batch of FlowFiles to send in a single HTTP POST. If not specified, each FlowFile will be sent separately. If the Send as FlowFile property is false, this property is ignored\",\n+                                \"displayName\": \"Max Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Data to Post per Second\": {\n+                                \"description\": \"The maximum amount of data to send per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n+                                \"displayName\": \"Max Data to Post per Second\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Data to Post per Second\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password required to access the URL\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Send as FlowFile\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"compress\",\n-                                        \"value\": \"compress\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"decompress\",\n-                                        \"value\": \"decompress\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"compress\",\n-                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will package the FlowFile's contents and attributes together and send the FlowFile Package; otherwise, will send only the FlowFile's content\",\n+                                \"displayName\": \"Send as FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"Send as FlowFile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Filename\": {\n+                            \"URL\": {\n+                                \"description\": \"The URL to POST to. The URL may be defined using the Attribute Expression Language. A separate connection pool will be created for each unique host:port combination.\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Chunked Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n-                                \"displayName\": \"Update Filename\",\n+                                \"description\": \"Specifies whether or not to use Chunked Encoding to send the data. This property is ignored in the event the contents are compressed or sent as FlowFiles.\",\n+                                \"displayName\": \"Use Chunked Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Update Filename\",\n-                                \"required\": true,\n+                                \"name\": \"Use Chunked Encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Agent\": {\n+                                \"defaultValue\": \"Apache-HttpClient/4.5.14 (Java/1.8.0_422)\",\n+                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n+                                \"displayName\": \"User Agent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"User Agent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username required to access the URL\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n+                                \"description\": \"Files that are successfully send will be transferred to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n+                                \"description\": \"Files that fail to send will transferred to failure\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"decompress\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"http\",\n+                            \"https\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n-                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PostHTTP\",\n+                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Performs an HTTP Post with the content of the FlowFile. Uses a connection pool with max number of connections equal to the number of possible endpoints multiplied by the Concurrent Tasks configuration.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Grouping Attribute\": {\n-                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Grouping Attribute\",\n+                            \"Data Record Path\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n+                                \"displayName\": \"Data Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Attribute\",\n+                                \"name\": \"Data Record Path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Data Rate\": {\n+                            \"Statement Type Record Path\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n+                                            \"Use Record Path\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n-                                \"displayName\": \"Maximum Data Rate\",\n+                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE.\",\n+                                \"displayName\": \"Statement Type Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Data Rate\",\n-                                \"required\": false,\n+                                \"name\": \"Statement Type Record Path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum FlowFile Rate\": {\n-                                \"dependencies\": [\n+                            \"db-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n-                                \"displayName\": \"Maximum FlowFile Rate\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum FlowFile Rate\",\n+                                \"name\": \"db-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Rate\": {\n+                            \"put-db-record-allow-multiple-statements\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"data rate\",\n-                                            \"attribute value\",\n-                                            \"flowfile count\"\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n-                                \"displayName\": \"Maximum Rate\",\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Allow Multiple SQL Statements\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Rate\",\n+                                \"name\": \"put-db-record-allow-multiple-statements\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-catalog-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Control Criteria\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n-                                        \"displayName\": \"data rate\",\n-                                        \"value\": \"data rate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n-                                        \"displayName\": \"flowfile count\",\n-                                        \"value\": \"flowfile count\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n-                                        \"displayName\": \"attribute value\",\n-                                        \"value\": \"attribute value\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n-                                        \"displayName\": \"data rate or flowfile count\",\n-                                        \"value\": \"data rate or flowfile count\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"data rate\",\n-                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Control Criteria\",\n+                            \"put-db-record-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Control Criteria\",\n+                                \"name\": \"put-db-record-dcbp-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Rate Controlled Attribute\": {\n+                            \"put-db-record-field-containing-sql\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"attribute value\"\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Controlled Attribute\",\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Field Containing SQL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Controlled Attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-field-containing-sql\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Duration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Time Duration\",\n+                            \"put-db-record-max-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies maximum number of statements to be included in each batch. Zero means the batch size is not limited, which can cause memory usage issues for a large number of statements.\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Duration\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-max-batch-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"rate\",\n-                            \"rate control\",\n-                            \"throttle\",\n-                            \"throughput\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n-                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Input Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to expect for Input\",\n-                                \"displayName\": \"Input Character Set\",\n+                            \"put-db-record-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Input Character Set\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"put-db-record-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to convert to\",\n-                                \"displayName\": \"Output Character Set\",\n+                            \"put-db-record-quoted-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Output Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-quoted-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"character set\",\n-                            \"characterset\",\n-                            \"convert\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n-                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Catalog Name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n+                            },\n+                            \"put-db-record-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Catalog Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-quoted-table-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"put-db-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n+                                \"name\": \"put-db-record-record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Schema Name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                            \"put-db-record-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n                                 \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n+                                \"name\": \"put-db-record-schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type\": {\n+                            \"put-db-record-statement-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"UPDATE\",\n                                         \"value\": \"UPDATE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"INSERT\",\n                                         \"value\": \"INSERT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n+                                        \"displayName\": \"UPSERT\",\n+                                        \"value\": \"UPSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT_IGNORE\",\n+                                        \"value\": \"INSERT_IGNORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n                                         \"displayName\": \"DELETE\",\n                                         \"value\": \"DELETE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"Use statement.type Attribute\",\n                                         \"value\": \"Use statement.type Attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use Record Path\",\n+                                        \"value\": \"Use Record Path\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate\",\n+                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n                                 \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type\",\n+                                \"name\": \"put-db-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the table that the statement should update\",\n+                            \"put-db-record-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n                                 \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"put-db-record-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Field Names\": {\n+                            \"put-db-record-translate-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n                                 \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Field Names\",\n+                                \"name\": \"put-db-record-translate-field-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Unmatched Column Behavior\": {\n+                            \"put-db-record-unmatched-column-behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n                                         \"displayName\": \"Ignore Unmatched Columns\",\n                                         \"value\": \"Ignore Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n                                         \"displayName\": \"Warn on Unmatched Columns\",\n                                         \"value\": \"Warn on Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n                                         \"displayName\": \"Fail on Unmatched Columns\",\n                                         \"value\": \"Fail on Unmatched Columns\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n                                 \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Column Behavior\",\n+                                \"name\": \"put-db-record-unmatched-column-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Unmatched Field Behavior\": {\n+                            \"put-db-record-unmatched-field-behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n                                         \"displayName\": \"Ignore Unmatched Fields\",\n                                         \"value\": \"Ignore Unmatched Fields\"\n                                     },\n                                     {\n-                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n                                 \"displayName\": \"Unmatched Field Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Field Behavior\",\n+                                \"name\": \"put-db-record-unmatched-field-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Keys\": {\n+                            \"put-db-record-update-keys\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\",\n+                                            \"UPSERT\",\n+                                            \"UPDATE\",\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n                                 \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n                                 \"displayName\": \"Update Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Update Keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jts-quoted-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-identifiers\",\n+                                \"name\": \"put-db-record-update-keys\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-table-identifiers\": {\n+                            \"rollback-on-failure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jts-sql-param-attr-prefix\": {\n-                                \"defaultValue\": \"sql\",\n-                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n-                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jts-sql-param-attr-prefix\",\n+                                \"name\": \"rollback-on-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"table-schema-cache-size\": {\n                                 \"defaultValue\": \"100\",\n                                 \"description\": \"Specifies how many Table Schemas should be cached\",\n                                 \"displayName\": \"Table Schema Cache Size\",\n@@ -90945,89 +91590,64 @@\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"table-schema-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n+                                \"name\": \"statement.type\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n-                                \"name\": \"sql\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n                             \"database\",\n                             \"delete\",\n-                            \"flat\",\n                             \"insert\",\n-                            \"json\",\n-                            \"rdbms\",\n-                            \"relational\",\n+                            \"jdbc\",\n+                            \"put\",\n+                            \"record\",\n                             \"sql\",\n                             \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n-                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.table\"\n-                            },\n-                            {\n-                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.catalog\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.value\"\n+                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n+                                \"name\": \"putdatabaserecord.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -91046,1182 +91666,970 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"include-zero-record-flowfiles\": {\n+                            \"Cache Entry Identifier\": {\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cache update strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n+                                \"displayName\": \"Cache update strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"Cache update strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache flow files\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Distributed Cache Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Max cache entry size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum amount of data to put into cache\",\n+                                \"displayName\": \"Max cache entry size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Max cache entry size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n+                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n+                                \"name\": \"cached\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"mail.propertyName\",\n+                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ajust-immediately\": {\n+                            \"Attach File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n-                                \"displayName\": \"Call Immediate Adjustment\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n+                                \"displayName\": \"Attach File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ajust-immediately\",\n+                                \"name\": \"Attach File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"character-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"BCC\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"BCC\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"CC\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"CC\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Type\": {\n+                                \"defaultValue\": \"text/plain\",\n+                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n+                                \"displayName\": \"Content Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"split-words-on-symbols\": {\n+                            \"From\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"From\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Include All Attributes In Message\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n-                                \"displayName\": \"Split Words on Symbols\",\n+                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n+                                \"displayName\": \"Include All Attributes In Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"split-words-on-symbols\",\n+                                \"name\": \"Include All Attributes In Message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-character-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Message\": {\n+                                \"description\": \"The body of the email message\",\n+                                \"displayName\": \"Message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Auth\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Hostname\": {\n+                                \"description\": \"The hostname of the SMTP host\",\n+                                \"displayName\": \"SMTP Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SMTP Port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Socket Factory\": {\n+                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n+                                \"description\": \"Socket Factory to use for SMTP Connection\",\n+                                \"displayName\": \"SMTP Socket Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Socket Factory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP TLS\": {\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n-                                \"displayName\": \"Count Characters\",\n+                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP TLS\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Username\": {\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP X-Mailer Header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"SMTP X-Mailer Header\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Subject\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"To\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"To\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-character-count\",\n-                                \"required\": true,\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"text-line-count\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n-                                \"displayName\": \"Count Lines\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-count\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-line-nonempty-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n+                            \"email-ff-content-as-message\": {\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n-                                \"displayName\": \"Count Non-Empty Lines\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n+                                \"displayName\": \"Flow file content as message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"email-ff-content-as-message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"input-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-nonempty-count\",\n+                                \"name\": \"input-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-word-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n-                                \"displayName\": \"Count Words\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-word-count\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.SplitText\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n+                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"character\",\n-                            \"count\",\n-                            \"line\",\n-                            \"text\",\n-                            \"word\"\n+                            \"email\",\n+                            \"notify\",\n+                            \"put\",\n+                            \"smtp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n-                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text present in the FlowFile content\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n-                                \"name\": \"text.line.nonempty.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of words present in the original FlowFile\",\n-                                \"name\": \"text.word.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n-                                \"name\": \"text.character.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n+                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n-                        ],\n-                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The property name defines the attribute to look for and hash in the incoming flowfile. The property value defines the name to give the generated attribute. Attribute names must be unique.\",\n+                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A flowfile attribute key for attribute inspection\",\n-                                \"value\": \"Attribute Name\"\n+                                \"name\": \"pre.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            },\n+                            {\n+                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"post.cmd._____\",\n+                                \"value\": \"Not used\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"character_set\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"US-ASCII\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"ISO-8859-1\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-8\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-16BE\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"UTF-16LE\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"This character set normally decodes using an optional BOM at the beginning of the data but encodes by inserting a BE BOM. For hashing, it will be replaced with UTF-16BE. \",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set used to decode the attribute being hashed -- this applies to the incoming data encoding, not the resulting hash encoding. \",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character_set\",\n+                                \"name\": \"Conflict Resolution\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fail_when_empty\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Route to failure when none of the attributes that are configured for hashing are found. If set to false, then flow files that do not contain any of the attributes that are configured for hashing will just pass through to success.\",\n-                                \"displayName\": \"Fail when no attributes present\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fail_when_empty\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The cryptographic hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy use). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash_algorithm\",\n+                                \"name\": \"Create Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"missing_attr_policy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n-                                        \"displayName\": \"Allow missing attributes\",\n-                                        \"value\": \"ALLOW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Route to failure if there are attributes configured for hashing that are not present in the flowfile\",\n-                                        \"displayName\": \"Fail if missing attributes\",\n-                                        \"value\": \"PROHIBIT\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ALLOW\",\n-                                \"description\": \"Policy for how the processor handles attributes that are configured for hashing but are not found in the flowfile.\",\n-                                \"displayName\": \"Missing attribute policy\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"missing_attr_policy\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Used for flowfiles that are missing required attributes\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"blake2\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"keccak\",\n-                            \"md5\",\n-                            \"sha\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashAttribute\",\n-                        \"typeDescription\": \"Calculates a hash value for each of the specified attributes using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use. \",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of hashing the specified attribute. The name of this attribute is specified by the value of the dynamic property.\",\n-                                \"name\": \"<Specified Attribute Name per Dynamic Property>\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"fail_when_empty\": {\n+                            \"Dot Rename\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n-                                \"displayName\": \"Fail if the content is empty\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fail_when_empty\",\n-                                \"required\": true,\n+                                \"name\": \"Dot Rename\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash_algorithm\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"blake2\",\n-                            \"content\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"md5\",\n-                            \"sha\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n-                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n-                                \"name\": \"content_<algorithm>\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"@OnScheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n-                                \"displayName\": \"@OnScheduled Pause Time\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnScheduled Pause Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"@OnStopped Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n-                                \"displayName\": \"@OnStopped Pause Time\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"@OnStopped Pause Time\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"@OnUnscheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n-                                \"displayName\": \"@OnUnscheduled Pause Time\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnUnscheduled Pause Time\",\n-                                \"required\": true,\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Size\": {\n-                                \"defaultValue\": \"1 KB\",\n-                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n-                                \"displayName\": \"Content Size\",\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"CustomValidate Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n-                                \"displayName\": \"CustomValidate Pause Time\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CustomValidate Pause Time\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnScheduled called\": {\n+                            \"Reject Zero-Byte Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n-                                \"displayName\": \"Fail When @OnScheduled called\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnScheduled called\",\n-                                \"required\": true,\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnStopped called\": {\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Temporary Filename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n-                                \"displayName\": \"Fail When @OnStopped called\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnStopped called\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnUnscheduled called\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n-                                \"displayName\": \"Fail When @OnUnscheduled called\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnUnscheduled called\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"FlowFile Exception Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Class\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to throw exception.\",\n-                                \"displayName\": \"FlowFile Exception Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Failure Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n-                                \"displayName\": \"FlowFile Failure Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Failure Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Rollback Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n-                                \"displayName\": \"FlowFile Rollback Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Rollback Penalty Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n-                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Rollback Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n-                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Yield Iterations\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Success Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n-                                \"displayName\": \"FlowFile Success Iterations\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Success Iterations\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Interrupts When Paused\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n-                                \"displayName\": \"Ignore Interrupts When Paused\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Interrupts When Paused\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"No FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"No FlowFile Exception Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Class\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"No FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Exception Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"No FlowFile Skip Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Skip Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Skip Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"No FlowFile Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to yield if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Yield Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Yield Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"OnTrigger Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n-                                \"displayName\": \"OnTrigger Pause Time\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"OnTrigger Pause Time\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to write to the FlowFile\",\n-                                \"displayName\": \"Write Iterations\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"FlowFile\",\n-                            \"debug\",\n-                            \"flow\",\n-                            \"processor\",\n-                            \"test\",\n-                            \"utility\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"put\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n-                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n@@ -92235,1904 +92643,1816 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"The name of each user-defined property must be a valid RecordPath.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"RecordPath\",\n-                                \"value\": \"An expression language statement used to determine how the RecordPath is resolved. The following variables are availible: ${field.name}, ${field.value}, ${field.type}\"\n+                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bloom-filter-certainty\": {\n-                                \"defaultValue\": \"0.10\",\n-                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n-                                \"displayName\": \"Bloom Filter Certainty\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bloom-filter-certainty\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-identifier\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"This option defines a record path operation to use for defining the cache identifier. It can be used in addition to the hash settings. This field will have the expression language attribute \\\"record.hash.value\\\" available to it to use with it to generate the record path operation.\",\n-                                \"displayName\": \"Cache Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"cache-identifier\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"deduplication-strategy\": {\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Single File\",\n-                                        \"value\": \"single\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Multiple Files\",\n-                                        \"value\": \"multiple\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"The strategy to use for detecting and isolating duplicate records. The option for doing it across a single data file will operate in memory, whereas the one for going across the enter repository will require a distributed map cache.\",\n-                                \"displayName\": \"Deduplication Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"deduplication-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-map-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"This configuration is required when the deduplication strategy is set to 'multiple files.' The map cache will be used to check a data source such as HBase or Redis for entries indicating that a record has been processed before. This option requires a downstream process that uses PutDistributedMapCache to write an entry to the cache data source once the record has been processed to indicate that it has been handled before.\",\n-                                \"displayName\": \"Distributed Map Cache client\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"filter-capacity-hint\": {\n-                                \"defaultValue\": \"25000\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"bloom-filter\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Filter Type\",\n-                                        \"propertyName\": \"filter-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n-                                \"displayName\": \"Filter Capacity Hint\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-capacity-hint\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"filter-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance  loaded into memory when this processor is running.\",\n-                                        \"displayName\": \"HashSet\",\n-                                        \"value\": \"hash-set\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     },\n                                     {\n-                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n-                                        \"displayName\": \"BloomFilter\",\n-                                        \"value\": \"bloom-filter\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hash-set\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"single\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n-                                \"displayName\": \"Filter Type\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-type\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"Create Missing Directories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"Create Missing Directories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-hashing-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with tildes (~) to form the unique record key. This may use significantly more storage depending on the size and shape or your data.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The SHA-256 cryptographic hash algorithm.\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The SHA-512 cryptographic hash algorithm.\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The algorithm used to hash the combined set of resolved RecordPath values for cache storage.\",\n-                                \"displayName\": \"Record Hashing Algorithm\",\n+                            \"Directory\": {\n+                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-hashing-algorithm\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Group\": {\n+                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n+                                \"displayName\": \"Group\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Last Modified Time\": {\n+                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Count\": {\n+                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n+                                \"displayName\": \"Maximum File Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Maximum File Count\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Owner\": {\n+                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Records detected as duplicates in the FlowFile content will be routed to this relationship\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"If the record was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"non-duplicate\"\n+                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input FlowFile is sent to this relationship unless there is a fatal error in the processing.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n-                                \"resource\": \"CPU\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"change\",\n-                            \"dedupe\",\n-                            \"distinct\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"filter\",\n-                            \"hash\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"replace\",\n-                            \"text\",\n-                            \"unique\",\n-                            \"update\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n-                        \"typeDescription\": \"This processor attempts to deduplicate a record set in memory using either a hashset or a bloom filter. It operates on a per-file basis rather than across an entire data set that spans multiple files.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records processed.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        ],\n+                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Age Off Duration\": {\n-                                \"description\": \"Time interval to age off cached FlowFiles\",\n-                                \"displayName\": \"Age Off Duration\",\n+                            \"Client ID Prefix\": {\n+                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n+                                \"displayName\": \"Client ID Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Age Off Duration\",\n+                                \"name\": \"Client ID Prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache The Entry Identifier\": {\n+                            \"Copy Attributes to JMS Properties\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n-                                \"displayName\": \"Cache The Entry Identifier\",\n+                                \"description\": \"Whether or not FlowFile Attributes should be translated into JMS Message Properties. If true, all attributes starting with 'jms.' will be set as Properties on the JMS Message (without the 'jms.' prefix). If an attribute exists that starts with the same value but ends in '.type', that attribute will be used to determine the JMS Message Property type.\",\n+                                \"displayName\": \"Copy Attributes to JMS Properties\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache The Entry Identifier\",\n-                                \"required\": false,\n+                                \"name\": \"Copy Attributes to JMS Properties\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Topic or queue to use\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"FlowFile Description\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n-                                \"displayName\": \"FlowFile Description\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"FlowFile Description\",\n+                                \"name\": \"Destination Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"non-duplicate\"\n                             },\n-                            {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"dedupe\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"hash\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n-                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n-                                \"name\": \"original.flowfile.description\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The relationship name (positive number)\",\n-                                \"value\": \"The relationship Weight (positive number)\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n-                            \"name\": \"A number 1..<Number Of Relationships>\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Distribution Strategy\": {\n+                            \"Destination Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n-                                        \"displayName\": \"round robin\",\n-                                        \"value\": \"round robin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n-                                        \"displayName\": \"next available\",\n-                                        \"value\": \"next available\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Queue\",\n+                                        \"value\": \"Queue\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is distributed by supplied LoadDistributionService Controller Service; at least one relationship must be available.\",\n-                                        \"displayName\": \"load distribution service\",\n-                                        \"value\": \"load distribution service\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Topic\",\n+                                        \"value\": \"Topic\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Queue\",\n+                                \"description\": \"The type of the JMS Destination to use\",\n+                                \"displayName\": \"Destination Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"JMS Provider\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n-                                        \"displayName\": \"overflow\",\n-                                        \"value\": \"overflow\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ActiveMQ\",\n+                                        \"value\": \"ActiveMQ\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"round robin\",\n-                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n-                                \"displayName\": \"Distribution Strategy\",\n+                                \"defaultValue\": \"ActiveMQ\",\n+                                \"description\": \"The Provider used for the JMS Server\",\n+                                \"displayName\": \"JMS Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distribution Strategy\",\n+                                \"name\": \"JMS Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Relationships\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n-                                \"displayName\": \"Number of Relationships\",\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum amount of data that can be buffered for a JMS Message. If a FlowFile's size exceeds this value, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Max Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Number of Relationships\",\n+                                \"name\": \"Max Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flowfiles for this relationship index\",\n-                                \"name\": \"1\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"distribute\",\n-                            \"load balance\",\n-                            \"round robin\",\n-                            \"route\",\n-                            \"weighted\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": true,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n-                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n-                                \"name\": \"distribute.load.relationship\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Number of Copies\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n-                                \"displayName\": \"Number of Copies\",\n+                            },\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n+                                \"displayName\": \"Message Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Priority\": {\n+                                \"description\": \"The Priority of the Message\",\n+                                \"displayName\": \"Message Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Priority\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Time to Live\": {\n+                                \"description\": \"The amount of time that the message should live on the destination before being removed; if not specified, the message will never expire.\",\n+                                \"displayName\": \"Message Time to Live\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Time to Live\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"byte\",\n+                                        \"value\": \"byte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"stream\",\n+                                        \"value\": \"stream\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"map\",\n+                                        \"value\": \"map\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"empty\",\n+                                        \"value\": \"empty\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte\",\n+                                \"description\": \"The Type of JMS Message to Construct\",\n+                                \"displayName\": \"Message Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Reply-To Queue\": {\n+                                \"description\": \"The name of the queue to which a reply to should be added\",\n+                                \"displayName\": \"Reply-To Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Number of Copies\",\n+                                \"name\": \"Reply-To Queue\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"URL\": {\n+                                \"description\": \"The URL of the JMS Server\",\n+                                \"displayName\": \"URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username used for authentication and authorization\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetJMSQueue\",\n+                            \"org.apache.nifi.processors.standard.GetJMSTopic\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be routed to the JMS destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"duplicate\",\n-                            \"load\",\n-                            \"test\"\n+                            \"jms\",\n+                            \"put\",\n+                            \"send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n-                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n-                                \"name\": \"copy.index\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutJMS\",\n+                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends the message to a ActiveMQ JMS Server.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Encoding\": {\n+                            \"put-record-include-zero-record-results\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"base64\",\n-                                        \"value\": \"base64\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"base32\",\n-                                        \"value\": \"base32\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"hex\",\n-                                        \"value\": \"hex\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Specifies the type of encoding used\",\n-                                \"displayName\": \"Encoding\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n+                                \"displayName\": \"Include Zero Record Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Encoding\",\n+                                \"name\": \"put-record-include-zero-record-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded\",\n-                                \"displayName\": \"Mode\",\n+                            \"put-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"put-record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"put-record-sink\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n+                                \"displayName\": \"Record Destination Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-record-sink\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"base64\",\n-                            \"decode\",\n-                            \"encode\",\n-                            \"hex\"\n+                            \"put\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n-                        \"typeDescription\": \"Encode or decode contents using configurable encoding schemes\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n+                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Disables directory listings before operations which might fail, such as configurations which create directory structures.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"value\": \"true or false\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Encryption Algorithm\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Ciphers Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"org.apache.nifi.security.util.EncryptionMethod@2896adc9[Algorithm name=PBEWITHMD5AND128BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_128AES\",\n-                                        \"value\": \"MD5_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND192BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_192AES\",\n-                                        \"value\": \"MD5_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5AND256BITAES-CBC-OPENSSL,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_256AES\",\n-                                        \"value\": \"MD5_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_DES\",\n-                                        \"value\": \"MD5_DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHMD5ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"MD5_RC2\",\n-                                        \"value\": \"MD5_RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDRC2,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA1_RC2\",\n-                                        \"value\": \"SHA1_RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA1ANDDES,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA1_DES\",\n-                                        \"value\": \"SHA1_DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128AES\",\n-                                        \"value\": \"SHA_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_192AES\",\n-                                        \"value\": \"SHA_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_256AES\",\n-                                        \"value\": \"SHA_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_40RC2\",\n-                                        \"value\": \"SHA_40RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC2-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128RC2\",\n-                                        \"value\": \"SHA_128RC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND40BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_40RC4\",\n-                                        \"value\": \"SHA_40RC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND128BITRC4,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_128RC4\",\n-                                        \"value\": \"SHA_128RC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND128BITAES-CBC-BC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_128AES\",\n-                                        \"value\": \"SHA256_128AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND192BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_192AES\",\n-                                        \"value\": \"SHA256_192AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHA256AND256BITAES-CBC-BC,Requires unlimited strength JCE policy=true,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA256_256AES\",\n-                                        \"value\": \"SHA256_256AES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND2-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_2KEYTRIPLEDES\",\n-                                        \"value\": \"SHA_2KEYTRIPLEDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAAND3-KEYTRIPLEDES-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_3KEYTRIPLEDES\",\n-                                        \"value\": \"SHA_3KEYTRIPLEDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PBEWITHSHAANDTWOFISH-CBC,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"SHA_TWOFISH\",\n-                                        \"value\": \"SHA_TWOFISH\"\n-                                    },\n-                                    {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PGP,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"PGP\",\n-                                        \"value\": \"PGP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=PGP-ASCII-ARMOR,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=false,Keyed cipher=false]\",\n-                                        \"displayName\": \"PGP_ASCII_ARMOR\",\n-                                        \"value\": \"PGP_ASCII_ARMOR\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CBC_NO_PADDING\",\n-                                        \"value\": \"AES_CBC_NO_PADDING\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CBC/PKCS7Padding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CBC\",\n-                                        \"value\": \"AES_CBC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/CTR/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_CTR\",\n-                                        \"value\": \"AES_CTR\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"EncryptionMethod[Algorithm name=AES/GCM/NoPadding,Requires unlimited strength JCE policy=false,Algorithm Provider=BC,Compatible with strong KDFs=true,Keyed cipher=true]\",\n-                                        \"displayName\": \"AES_GCM\",\n-                                        \"value\": \"AES_GCM\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AES_GCM\",\n-                                \"description\": \"The Encryption Algorithm to use\",\n-                                \"displayName\": \"Encryption Algorithm\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Encryption Algorithm\",\n+                                \"name\": \"Conflict Resolution\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Encrypt\",\n-                                        \"value\": \"Encrypt\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Decrypt\",\n-                                        \"value\": \"Decrypt\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Encrypt\",\n-                                \"description\": \"Specifies whether the content should be encrypted or decrypted\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"Create Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The Password to use for encrypting or decrypting the data\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"allow-weak-crypto\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Operation will not be blocked and no alerts will be presented when unsafe combinations of encryption algorithms and passwords are provided\",\n-                                        \"displayName\": \"Allowed\",\n-                                        \"value\": \"allowed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When set, operation will be blocked and alerts will be presented to the user if unsafe combinations of encryption algorithms and passwords are provided on a JVM with limited strength crypto. To fix this, see the Admin Guide.\",\n-                                        \"displayName\": \"Not Allowed\",\n-                                        \"value\": \"not-allowed\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"not-allowed\",\n-                                \"description\": \"Overrides the default behavior to prevent unsafe combinations of encryption algorithms and short passwords on JVMs with limited strength cryptographic jurisdiction policies\",\n-                                \"displayName\": \"Allow insecure cryptographic modes\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-weak-crypto\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-derivation-function\": {\n+                            \"Disable Directory Listing\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The cipher is given a raw key conforming to the algorithm specifications\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 @ 1000 iterations\",\n-                                        \"displayName\": \"NiFi Legacy KDF\",\n-                                        \"value\": \"NIFI_LEGACY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Single iteration MD5 compatible with PKCS#5 v1.5\",\n-                                        \"displayName\": \"OpenSSL EVP_BytesToKey\",\n-                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bcrypt with configurable work factor. See Admin Guide\",\n-                                        \"displayName\": \"Bcrypt\",\n-                                        \"value\": \"BCRYPT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Scrypt with configurable cost parameters. See Admin Guide\",\n-                                        \"displayName\": \"Scrypt\",\n-                                        \"value\": \"SCRYPT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PBKDF2 with configurable hash function and iteration count. See Admin Guide\",\n-                                        \"displayName\": \"PBKDF2\",\n-                                        \"value\": \"PBKDF2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Argon2 with configurable cost parameters. See Admin Guide.\",\n-                                        \"displayName\": \"Argon2\",\n-                                        \"value\": \"ARGON2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key derivation function to generate the key from the password (and salt)\",\n-                                \"displayName\": \"Key Derivation Function\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-function\",\n-                                \"required\": true,\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"pgp-symmetric-cipher\": {\n+                            \"Dot Rename\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"IDEA\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRIPLE_DES\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAST5\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLOWFISH\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TWOFISH\",\n-                                        \"value\": \"10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_128\",\n-                                        \"value\": \"11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_192\",\n-                                        \"value\": \"12\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CAMELLIA_256\",\n-                                        \"value\": \"13\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"7\",\n-                                \"description\": \"When using PGP encryption, this is the symmetric cipher to be used. This property is ignored if Encryption Algorithm is not PGP or PGP-ASCII-ARMOR\\nNote that the provided cipher is only used duringthe encryption phase, while it is inferred from the ciphertext in the decryption phase\",\n-                                \"displayName\": \"PGP Symmetric Cipher\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pgp-symmetric-cipher\",\n+                                \"name\": \"Dot Rename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"private-keyring-file\": {\n-                                \"description\": \"In a PGP decrypt mode, this keyring contains the private key of the recipient\",\n-                                \"displayName\": \"Private Keyring File\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-keyring-file\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"private-keyring-passphrase\": {\n-                                \"description\": \"In a PGP decrypt mode, this is the private keyring passphrase\",\n-                                \"displayName\": \"Private Keyring Passphrase\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"private-keyring-passphrase\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"public-key-user-id\": {\n-                                \"description\": \"In a PGP encrypt mode, this user id of the recipient\",\n-                                \"displayName\": \"Public Key User Id\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-user-id\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"public-keyring-file\": {\n-                                \"description\": \"In a PGP encrypt mode, this keyring contains the public key of the recipient\",\n-                                \"displayName\": \"Public Keyring File\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-keyring-file\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"raw-key-hex\": {\n-                                \"description\": \"In keyed encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Raw Key (hexadecimal)\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"raw-key-hex\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully encrypted or decrypted will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be encrypted or decrypted will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"Argon2\",\n-                            \"Bcrypt\",\n-                            \"JCE\",\n-                            \"KDF\",\n-                            \"PBKDF2\",\n-                            \"Scrypt\",\n-                            \"decryption\",\n-                            \"encryption\",\n-                            \"iv\",\n-                            \"password\",\n-                            \"salt\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EncryptContent\",\n-                        \"typeDescription\": \"Encrypts or Decrypts a FlowFile using either symmetric encryption with a raw key or password and randomly generated salt, or asymmetric encryption using a public and secret key.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"\\\"encrypted\\\" or \\\"decrypted\\\" depending on the processor action\",\n-                                \"name\": \"encryptcontent.action\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used for the cryptographic operation\",\n-                                \"name\": \"encryptcontent.algorithm\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The cipher text length in bytes (including IV, salt, and delimiters if present). Determined from incoming content in decrypt mode; outgoing content in encrypt mode\",\n-                                \"name\": \"encryptcontent.cipher_text_length\"\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The Initialization Vector in hex encoding (if present)\",\n-                                \"name\": \"encryptcontent.iv\"\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The IV length in bytes\",\n-                                \"name\": \"encryptcontent.iv_length\"\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The Key Derivation Function used if Password-Based Encryption was enabled. See Admin Guide - Key Derivation Functions\",\n-                                \"name\": \"encryptcontent.kdf\"\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The KDF-specific salt including algorithm and cost parameters (if present). See Admin Guide - Key Derivation Functions\",\n-                                \"name\": \"encryptcontent.kdf_salt\"\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The KDF salt length in bytes\",\n-                                \"name\": \"encryptcontent.kdf_salt_length\"\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The number of iterations used in PBKDF2 KDF (if present). PBKDF2 does not encode the cost parameter in a custom salt\",\n-                                \"name\": \"encryptcontent.pbkdf2_iterations\"\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The plaintext length in bytes. Determined from incoming content in encrypt mode; outgoing content in decrypt mode\",\n-                                \"name\": \"encryptcontent.plaintext_length\"\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The raw salt in hex encoding (if present)\",\n-                                \"name\": \"encryptcontent.salt\"\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The raw salt length in bytes\",\n-                                \"name\": \"encryptcontent.salt_length\"\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The timestamp at which the cryptographic operation occurred in 'yyyy-MM-dd HH:mm:ss.SSS Z' format\",\n-                                \"name\": \"encryptcontent.timestamp\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"batch-count\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n-                                \"displayName\": \"Batch Count\",\n+                            \"Reject Zero-Byte Files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-count\",\n-                                \"required\": true,\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"group-id\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Group Identifier\",\n+                            \"Remote Group\": {\n+                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n+                                \"displayName\": \"Remote Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"group-id\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"inactive-timeout\": {\n-                                \"defaultValue\": \"30 min\",\n-                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n-                                \"displayName\": \"Inactive Timeout\",\n+                            \"Remote Owner\": {\n+                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inactive-timeout\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-order\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n-                                \"displayName\": \"Initial Order\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"initial-order\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maximum-order\": {\n-                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n-                                \"displayName\": \"Maximum Order\",\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-order\",\n+                                \"name\": \"Temporary Filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"order-attribute\": {\n-                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Order Attribute\",\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"order-attribute\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n-                                \"displayName\": \"Wait Timeout\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n-                                \"name\": \"overtook\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n-                                \"name\": \"skipped\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n-                                \"name\": \"wait\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"order\",\n-                            \"sort\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"sftp\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n-                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n-                                \"name\": \"EnforceOrder.startedAt\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n-                                \"name\": \"EnforceOrder.result\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n-                                \"name\": \"EnforceOrder.detail\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n-                                \"name\": \"EnforceOrder.expectedOrder\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n-                                \"value\": \"A JsonPath expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JDBC Connection Pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Obtain Generated Keys\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n+                                \"displayName\": \"Obtain Generated Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n+                                \"name\": \"Obtain Generated Keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n+                            \"Support Fragmented Transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n+                                \"displayName\": \"Support Fragmented Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n-                                \"required\": true,\n+                                \"name\": \"Support Fragmented Transactions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Not Found Behavior\": {\n+                            \"Transaction Timeout\": {\n+                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n+                                \"displayName\": \"Transaction Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transaction Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-session-autocommit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"skip\",\n-                                        \"value\": \"skip\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ignore\",\n-                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n-                                \"displayName\": \"Path Not Found Behavior\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Not Found Behavior\",\n-                                \"required\": true,\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"putsql-sql-statement\": {\n+                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n+                                \"displayName\": \"SQL Statement\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"putsql-sql-statement\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"rollback-on-failure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"scalar\",\n-                                        \"value\": \"scalar\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"rollback-on-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"JSON\",\n-                            \"JsonPath\",\n-                            \"evaluate\"\n+                            \"database\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n-                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n+                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n+                                \"name\": \"sql.generated.key\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XPath expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The IP address or hostname of the Syslog server.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"5 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Body\": {\n+                                \"description\": \"The body for the Syslog messages.\",\n+                                \"displayName\": \"Message Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Body\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The hostname for the Syslog messages.\",\n+                                \"displayName\": \"Message Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Priority\": {\n+                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n+                                \"displayName\": \"Message Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Priority\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Timestamp\": {\n+                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n+                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n+                                \"displayName\": \"Message Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Version\": {\n+                                \"description\": \"The version for the Syslog messages.\",\n+                                \"displayName\": \"Message Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Message Version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"nodeset\",\n-                                        \"value\": \"nodeset\"\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"evaluate\"\n+                            \"logs\",\n+                            \"put\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n-                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n+                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XQuery\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Per FlowFile\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n-                                \"displayName\": \"Destination\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n+                                \"displayName\": \"Connection Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"Connection Per FlowFile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Indent\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n-                                \"displayName\": \"Output: Indent\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the destination.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Indent\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Method\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xml\",\n-                                        \"value\": \"xml\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"html\",\n-                                        \"value\": \"html\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"xml\",\n-                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n-                                \"displayName\": \"Output: Method\",\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Method\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Idle Connection Expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Omit XML Declaration\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n-                                \"displayName\": \"Output: Omit XML Declaration\",\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Omit XML Declaration\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                            \"Outgoing Message Delimiter\": {\n+                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n+                                \"displayName\": \"Outgoing Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Outgoing Message Delimiter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"The port on the destination.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be sent over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenTCP\",\n+                            \"org.apache.nifi.processors.standard.PutUDP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"XQuery\",\n-                            \"evaluate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n-                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n+                        \"typeDescription\": \"The PutTCP processor receives a FlowFile and transmits the FlowFile content over a TCP connection to the configured TCP server. By default, the FlowFiles are transmitted over the same TCP connection (or pool of TCP connections if multiple input threads are configured). To assist the TCP server with determining message boundaries, an optional \\\"Outgoing Message Delimiter\\\" string can be configured which is appended to the end of each FlowFiles content when it is transmitted over the TCP connection. An optional \\\"Connection Per FlowFile\\\" parameter can be specified to change the behaviour so that each FlowFiles content is transmitted over a single TCP connection which is opened when the FlowFile is received and closed after the FlowFile has been sent. This option should only be used for low message volume scenarios, otherwise the platform may run out of TCP sockets.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n@@ -94144,284 +94464,298 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \" \",\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n-                                \"displayName\": \"Argument Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Duration\": {\n-                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n-                                \"displayName\": \"Batch Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the destination.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Command\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Command Arguments\": {\n-                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n-                                \"displayName\": \"Command Arguments\",\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Command Arguments\",\n-                                \"required\": false,\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redirect Error Stream\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n-                                \"displayName\": \"Redirect Error Stream\",\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redirect Error Stream\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"Port\": {\n+                                \"description\": \"The port on the destination.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Working Directory\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenUDP\",\n+                            \"org.apache.nifi.processors.standard.PutTCP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All created FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"external\",\n-                            \"invoke\",\n-                            \"process\",\n-                            \"script\",\n-                            \"source\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n-                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Executed command\",\n-                                \"name\": \"command\"\n-                            },\n-                            {\n-                                \"description\": \"Arguments of the command\",\n-                                \"name\": \"command.arguments\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n+                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n                                 \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Max Wait Time\": {\n                                 \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n                                 \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-fetch-sql-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"dbf-default-precision\": {\n                                 \"defaultValue\": \"10\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n                                 \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-scale\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n                                 \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -94464,279 +94798,362 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"initial-load-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"initial-load-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-fetch-size\": {\n+                            \"qdbt-max-frags\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-frags\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-max-rows\": {\n+                            \"qdbt-max-rows\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n                                 \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-output-batch-size\": {\n+                            \"qdbt-output-batch-size\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n                                 \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n+                            \"transaction-isolation-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_NONE\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n+                                        \"value\": \"8\"\n+                                    }\n+                                ],\n+                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n+                                \"displayName\": \"Transaction Isolation Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"transaction-isolation-level\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n                             \"database\",\n                             \"jdbc\",\n                             \"query\",\n                             \"select\",\n                             \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.duration\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n-                                \"name\": \"executesql.query.executiontime\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.fetchtime\"\n-                            },\n-                            {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n                                 \"name\": \"fragment.identifier\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n                                 \"name\": \"fragment.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n                                 \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n                                 \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Max Wait Time\": {\n                                 \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n                                 \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n                                 \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"name\": \"Maximum-value Columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-db-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-fetch-db-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-fetch-sql-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-precision\": {\n                                 \"defaultValue\": \"10\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n                                 \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-default-scale\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n                                 \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n@@ -94756,218 +95173,173 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"initial-load-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"initial-load-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-fetch-size\": {\n+                            \"qdbt-max-frags\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-frags\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-max-rows\": {\n+                            \"qdbt-max-rows\": {\n                                 \"defaultValue\": \"0\",\n                                 \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n                                 \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-output-batch-size\": {\n+                            \"qdbt-output-batch-size\": {\n                                 \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n                                 \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-normalize\": {\n+                            \"qdbtr-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n+                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n                                 \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-normalize\",\n+                                \"name\": \"qdbtr-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-record-writer\": {\n+                            \"qdbtr-record-writer\": {\n                                 \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-record-writer\",\n+                                \"name\": \"qdbtr-record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n                             \"database\",\n                             \"jdbc\",\n                             \"query\",\n                             \"record\",\n                             \"select\",\n                             \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned in the select query\",\n-                                \"name\": \"executesql.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.duration\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the query execution time in milliseconds\",\n-                                \"name\": \"executesql.query.executiontime\"\n-                            },\n-                            {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.fetchtime\"\n-                            },\n-                            {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n                                 \"name\": \"fragment.identifier\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n                                 \"name\": \"fragment.count\"\n                             },\n                             {\n                                 \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n                                 \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             },\n                             {\n                                 \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n                                 \"description\": \"The number of records output by the Record Writer.\",\n@@ -94992,405 +95364,191 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            },\n-                            {\n-                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"command.argument.<commandIndex>\",\n-                                \"value\": \"Argument to be supplied to the command\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the relationship to route data to\",\n+                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n                             }\n                         ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n+                            \"name\": \"<Property Name>\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \";\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n-                                \"displayName\": \"Argument Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command Arguments\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n-                                \"displayName\": \"Command Arguments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Command Arguments\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Command Path\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Command Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore STDIN\": {\n+                            \"cache-schema\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n-                                \"displayName\": \"Ignore STDIN\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore STDIN\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Attribute Length\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Attribute Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Attribute Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Destination Attribute\": {\n-                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n-                                \"displayName\": \"Output Destination Attribute\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n+                                \"displayName\": \"Cache Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Destination Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"cache-schema\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Working Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"argumentsStrategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n-                                        \"displayName\": \"Command Arguments Property\",\n-                                        \"value\": \"Command Arguments Property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n-                                        \"displayName\": \"Dynamic Property Arguments\",\n-                                        \"value\": \"Dynamic Property Arguments\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Command Arguments Property\",\n-                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n-                                \"displayName\": \"Command Arguments Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"argumentsStrategy\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n-                                \"name\": \"output stream\"\n-                            },\n-                            {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n-                                \"name\": \"nonzero status\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"command\",\n-                            \"command execution\",\n-                            \"execute\",\n-                            \"stream\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n-                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the command executed\",\n-                                \"name\": \"execution.command\"\n-                            },\n-                            {\n-                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n-                                \"name\": \"execution.command.args\"\n-                            },\n-                            {\n-                                \"description\": \"The exit status code returned from executing the command\",\n-                                \"name\": \"execution.status\"\n-                            },\n-                            {\n-                                \"description\": \"Any error messages returned from executing the command\",\n-                                \"name\": \"execution.error\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grok Expression\": {\n-                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n-                                \"displayName\": \"Grok Expression\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grok Pattern file\": {\n-                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n-                                \"displayName\": \"Grok Patterns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Pattern file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Empty Captures\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n-                                \"displayName\": \"Keep Empty Captures\",\n+                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Empty Captures\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Named captures only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Only store named captures from grok\",\n-                                \"displayName\": \"Named captures only\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Named captures only\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"The original FlowFile is routed to this relationship\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"delimit\",\n-                            \"extract\",\n-                            \"grok\",\n-                            \"log\",\n-                            \"parse\",\n-                            \"text\"\n+                            \"aggregate\",\n+                            \"avro\",\n+                            \"calcite\",\n+                            \"csv\",\n+                            \"etl\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"modify\",\n+                            \"query\",\n+                            \"record\",\n+                            \"route\",\n+                            \"select\",\n+                            \"sql\",\n+                            \"text\",\n+                            \"transform\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n-                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n+                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n-                                \"name\": \"grok.XXX\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records selected by the query\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"QueryRecord.Route\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -95400,22 +95558,14 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute\",\n-                                \"value\": \"A Regular Expression with one or more capturing group\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n                                 \"description\": \"The Character Set in which the file is encoded\",\n@@ -95423,345 +95573,258 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Canonical Equivalence\": {\n+                            \"Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Line-by-Line\",\n+                                        \"value\": \"Line-by-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Entire text\",\n+                                        \"value\": \"Entire text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n-                                \"displayName\": \"Enable Canonical Equivalence\",\n+                                \"defaultValue\": \"Line-by-Line\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n+                                \"displayName\": \"Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Canonical Equivalence\",\n+                                \"name\": \"Evaluation Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Case-insensitive Matching\": {\n+                            \"Line-by-Line Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"All\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n-                                \"displayName\": \"Enable Case-insensitive Matching\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Case-insensitive Matching\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable DOTALL Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"First-Line\",\n+                                        \"value\": \"First-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n-                                \"displayName\": \"Enable DOTALL Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable DOTALL Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable Literal Parsing of the Pattern\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Last-Line\",\n+                                        \"value\": \"Last-Line\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Except-First-Line\",\n+                                        \"value\": \"Except-First-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Except-Last-Line\",\n+                                        \"value\": \"Except-Last-Line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n-                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n+                                \"defaultValue\": \"All\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n+                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Literal Parsing of the Pattern\",\n-                                \"required\": true,\n+                                \"name\": \"Line-by-Line Evaluation Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Multiline Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n-                                \"displayName\": \"Enable Multiline Mode\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Multiline Mode\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode Predefined Character Classes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"(?s)(^.*$)\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Regex Replace\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n-                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n+                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n+                                \"displayName\": \"Search Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode-aware Case Folding\": {\n+                            \"Replacement Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n+                                        \"displayName\": \"Prepend\",\n+                                        \"value\": \"Prepend\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n-                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode-aware Case Folding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable Unix Lines Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n+                                        \"displayName\": \"Append\",\n+                                        \"value\": \"Append\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n+                                        \"displayName\": \"Surround\",\n+                                        \"value\": \"Surround\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n-                                \"displayName\": \"Enable Unix Lines Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unix Lines Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Capture Group 0\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n+                                        \"displayName\": \"Regex Replace\",\n+                                        \"value\": \"Regex Replace\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n+                                        \"displayName\": \"Literal Replace\",\n+                                        \"value\": \"Literal Replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n+                                        \"displayName\": \"Always Replace\",\n+                                        \"value\": \"Always Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n+                                        \"displayName\": \"Substitute Variables\",\n+                                        \"value\": \"Substitute Variables\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n-                                \"displayName\": \"Include Capture Group 0\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Capture Group 0\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions.  Files larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"defaultValue\": \"Regex Replace\",\n+                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n+                                \"displayName\": \"Replacement Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"Replacement Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Capture Group Length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters a given capture group value can have.  Any characters beyond the max will be truncated.\",\n-                                \"displayName\": \"Maximum Capture Group Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Capture Group Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permit Whitespace and Comments in Pattern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Replacement Value\": {\n+                                \"defaultValue\": \"$1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Prepend\",\n+                                            \"Regex Replace\",\n+                                            \"Always Replace\",\n+                                            \"Append\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n-                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n+                                \"displayName\": \"Replacement Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Replacement Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"extract-text-enable-named-groups\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Text to Append\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the group will be used in the attribute name as opposed to the group index.  All capturing groups must be named, if the number of groups (not including capture group 0) does not equal the number of named groups validation will fail.\",\n-                                \"displayName\": \"Enable named group support\",\n+                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Append\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"extract-text-enable-named-groups\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Text to Append\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"extract-text-enable-repeating-capture-group\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Text to Prepend\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n-                                \"displayName\": \"Enable repeating capture group\",\n+                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Prepend\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"extract-text-enable-repeating-capture-group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Text to Prepend\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n+                            \"Change\",\n+                            \"Modify\",\n+                            \"Regex\",\n                             \"Regular Expression\",\n+                            \"Replace\",\n                             \"Text\",\n-                            \"evaluate\",\n-                            \"extract\",\n-                            \"regex\"\n+                            \"Update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n-                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n@@ -95779,121 +95842,122 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Character Set\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Mapping File\": {\n+                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n+                                \"displayName\": \"Mapping File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Mapping File\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Length To Put In Attribute\",\n+                            \"Mapping File Refresh Interval\": {\n+                                \"defaultValue\": \"60s\",\n+                                \"description\": \"The polling interval in seconds to check for updates to the mapping file. The default is 60s.\",\n+                                \"displayName\": \"Mapping File Refresh Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Mapping File Refresh Interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Put Cache Value In Attribute\": {\n-                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n-                                \"displayName\": \"Put Cache Value In Attribute\",\n+                            \"Matching Group\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n+                                \"displayName\": \"Matching Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Matching Group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"\\\\S+\",\n+                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n+                                \"displayName\": \"Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Cache Value In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n+                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"not-found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"fetch\",\n-                            \"map\"\n+                            \"Change\",\n+                            \"Mapping\",\n+                            \"Modify\",\n+                            \"Regex\",\n+                            \"Regular Expression\",\n+                            \"Replace\",\n+                            \"Text\",\n+                            \"Update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n-                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n@@ -95905,1256 +95969,854 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Exceeded FlowFile Attribute Key\",\n+                                \"value\": \"The value of the attribute added to the FlowFile\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\n+                            \"Fail on Non-numerical Overwrite\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n+                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Fail on Non-numerical Overwrite\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n+                            \"maximum-retries\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n+                                \"displayName\": \"Maximum Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"name\": \"maximum-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n+                            \"penalize-retries\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n+                                \"displayName\": \"Penalize Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"penalize-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"retry-attribute\": {\n+                                \"defaultValue\": \"flowfile.retries\",\n+                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n+                                \"displayName\": \"Retry Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"retry-attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"reuse-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n+                                        \"displayName\": \"Fail on Reuse\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Warn on Reuse\",\n+                                        \"value\": \"warn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Reset Reuse\",\n+                                        \"value\": \"reset\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n+                                \"displayName\": \"Reuse Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"reuse-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n+                                \"name\": \"Retry Attribute\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n+                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n+                                \"name\": \"retries_exceeded\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n+                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"FlowFile\",\n+                            \"Retry\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n+                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"ftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n-                                \"name\": \"ftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"ftp.remote.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n+                                \"name\": \"Retry Attribute\"\n                             },\n                             {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n+                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n+                                \"name\": \"Retry Attribute .uuid\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n+                                \"description\": \"Routes FlowFiles whose attributes match the Attribute Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"Attribute Expression Language\"\n                             }\n                         ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to Property name\",\n+                                        \"value\": \"Route to Property name\"\n                                     },\n                                     {\n-                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if all match\",\n+                                        \"value\": \"Route to 'match' if all match\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the original file from the file system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if any matches\",\n+                                        \"value\": \"Route to 'match' if any matches\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n-                                \"displayName\": \"Completion Strategy\",\n+                                \"defaultValue\": \"Route to Property name\",\n+                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Routing Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"File to Fetch\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n-                                \"displayName\": \"File to Fetch\",\n-                                \"dynamic\": false,\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n+                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"RouteOnAttribute.Route\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"File to Fetch\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log level when file not found\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"A Regular Expression\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when file not found\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when permission denied\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case user jwitt does not have sufficient permissions to read the file\",\n-                                \"displayName\": \"Log level when permission denied\",\n+                            \"Content Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n+                                \"displayName\": \"Content Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when permission denied\",\n+                                \"name\": \"Content Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Conflict Strategy\": {\n+                            \"Match Requirement\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n-                                        \"displayName\": \"Rename\",\n-                                        \"value\": \"Rename\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n-                                        \"displayName\": \"Replace File\",\n-                                        \"value\": \"Replace File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n-                                        \"displayName\": \"Keep Existing\",\n-                                        \"value\": \"Keep Existing\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"content must match exactly\",\n+                                        \"value\": \"content must match exactly\"\n                                     },\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"content must contain match\",\n+                                        \"value\": \"content must contain match\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Rename\",\n-                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n-                                \"displayName\": \"Move Conflict Strategy\",\n+                                \"defaultValue\": \"content must match exactly\",\n+                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n+                                \"displayName\": \"Match Requirement\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Move Conflict Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.ListFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                                \"name\": \"Match Requirement\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"content\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"regular expression\",\n+                            \"route\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n-                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n+                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"value to match against\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Completion Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the incoming text is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Grouping Regular Expression\": {\n+                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n+                                \"displayName\": \"Grouping Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Grouping Regular Expression\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n+                            \"Ignore Case\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n+                                \"displayName\": \"Ignore Case\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": false,\n+                                \"name\": \"Ignore Case\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Ignore Leading/Trailing Whitespace\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n+                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Disable Directory Listing\": {\n+                            \"Matching Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n+                                        \"displayName\": \"Satisfies Expression\",\n+                                        \"value\": \"Satisfies Expression\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n+                                        \"displayName\": \"Starts With\",\n+                                        \"value\": \"Starts With\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n+                                        \"displayName\": \"Ends With\",\n+                                        \"value\": \"Ends With\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Match lines based on whether the line contains the property value\",\n+                                        \"displayName\": \"Contains\",\n+                                        \"value\": \"Contains\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Match lines based on whether the line equals the property value\",\n+                                        \"displayName\": \"Equals\",\n+                                        \"value\": \"Equals\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Matches Regular Expression\",\n+                                        \"value\": \"Matches Regular Expression\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Contains Regular Expression\",\n+                                        \"value\": \"Contains Regular Expression\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n+                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n+                                \"displayName\": \"Matching Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n+                                \"name\": \"Matching Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Routing Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to each matching Property Name\",\n+                                        \"value\": \"Route to each matching Property Name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n+                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n+                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to each matching Property Name\",\n+                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Routing Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n+                                \"name\": \"original\"\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"logs\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n+                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n+                                \"name\": \"RouteText.Route\"\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n+                            {\n+                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n+                                \"name\": \"RouteText.Group\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"sample-record-interval\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"interval\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n+                                \"displayName\": \"Sampling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n+                            \"sample-record-probability\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n+                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n+                                \"displayName\": \"Sampling Probability\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"name\": \"sample-record-probability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sample-record-random-seed\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\",\n+                                            \"reservoir\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n+                                \"displayName\": \"Random Seed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-random-seed\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sample-record-range\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"range\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n+                                \"displayName\": \"Sampling Range\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"sample-record-range\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sample-record-reservoir\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"reservoir\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n+                                \"displayName\": \"Reservoir Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"sample-record-reservoir\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"sample-record-sampling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n+                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n+                                        \"displayName\": \"Interval Sampling\",\n+                                        \"value\": \"interval\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n+                                        \"displayName\": \"Range Sampling\",\n+                                        \"value\": \"range\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n+                                        \"displayName\": \"Probabilistic Sampling\",\n+                                        \"value\": \"probabilistic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n+                                        \"displayName\": \"Reservoir Sampling\",\n+                                        \"value\": \"reservoir\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"defaultValue\": \"reservoir\",\n+                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n+                                \"displayName\": \"Sampling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"sample-record-sampling-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"interval\",\n+                            \"range\",\n+                            \"record\",\n+                            \"reservoir\",\n+                            \"sample\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n+                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n-                                \"name\": \"sftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"sftp.remote.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -97173,1493 +96835,1639 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"flatten-json-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Attribute Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n+                                \"displayName\": \"Attribute Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-character-set\",\n+                                \"name\": \"Attribute Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-json-pretty-print-json\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n+                            \"Dictionary File\": {\n+                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n+                                \"displayName\": \"Dictionary File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Dictionary File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Dictionary Filter Pattern\": {\n+                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n+                                \"displayName\": \"Dictionary Filter Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-pretty-print-json\",\n-                                \"required\": true,\n+                                \"name\": \"Dictionary Filter Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-json-return-type\": {\n+                            \"Match Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flatten\",\n-                                        \"value\": \"flatten\"\n+                                        \"displayName\": \"At Least 1 Must Match\",\n+                                        \"value\": \"At Least 1 Must Match\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"unflatten\",\n-                                        \"value\": \"unflatten\"\n+                                        \"displayName\": \"All Must Match\",\n+                                        \"value\": \"All Must Match\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flatten\",\n-                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"At Least 1 Must Match\",\n+                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n+                                \"displayName\": \"Match Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-return-type\",\n+                                \"name\": \"Match Criteria\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"flatten-json-separator\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n-                                \"displayName\": \"Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"flatten-json-separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-mode\": {\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"find\",\n+                            \"lookup\",\n+                            \"scan\",\n+                            \"search\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n+                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Dictionary Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flattens every objects into a single level json\",\n-                                        \"displayName\": \"normal\",\n-                                        \"value\": \"normal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects and keep arrays format\",\n-                                        \"displayName\": \"keep arrays\",\n-                                        \"value\": \"keep arrays\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n-                                        \"displayName\": \"dot notation\",\n-                                        \"value\": \"dot notation\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     },\n                                     {\n-                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n-                                        \"displayName\": \"keep primitive arrays\",\n-                                        \"value\": \"keep primitive arrays\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"binary\",\n+                                        \"value\": \"binary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"keep arrays\",\n-                                \"description\": \"Specifies how json should be flattened/unflattened\",\n-                                \"displayName\": \"Flatten Mode\",\n+                                \"defaultValue\": \"text\",\n+                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n+                                \"displayName\": \"Dictionary Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-mode\",\n+                                \"name\": \"Dictionary Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-reserved-characters\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, reserved characters in keys will be ignored\",\n-                                \"displayName\": \"Ignore Reserved Characters\",\n+                            \"Dictionary File\": {\n+                                \"description\": \"The filename of the terms dictionary\",\n+                                \"displayName\": \"Dictionary File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-reserved-characters\",\n+                                \"name\": \"Dictionary File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\",\n                             \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"flatten\",\n-                            \"json\",\n-                            \"unflatten\"\n+                            \"aho-corasick\",\n+                            \"byte sequence\",\n+                            \"content\",\n+                            \"dictionary\",\n+                            \"find\",\n+                            \"scan\",\n+                            \"search\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n-                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n+                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n+                                \"name\": \"matching.term\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Segment Size\": {\n+                                \"description\": \"The maximum data size in bytes for each segment\",\n+                                \"displayName\": \"Segment Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Segment Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"enrichment\"\n+                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n+                                \"name\": \"segments\"\n                             },\n                             {\n-                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"description\": \"The original FlowFile will be sent to this relationship\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"record\"\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n-                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n+                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n-                                \"name\": \"enrichment.group.id\"\n+                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute. This attribute is added to maintain backward compatibility, but the fragment.identifier is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n-                                \"name\": \"enrichment.role\"\n+                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.index is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of segments generated from the parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.count is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n+                                \"name\": \"segment.count\"\n+                            },\n+                            {\n+                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of segments generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fork-mode\": {\n+                            \"Byte Sequence\": {\n+                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n+                                \"displayName\": \"Byte Sequence\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Byte Sequence Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generated records will be the elements of the array\",\n-                                        \"displayName\": \"Extract\",\n-                                        \"value\": \"extract\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"split\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"split\",\n-                                \"description\": \"Specifies the forking mode of the processor\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"Hexadecimal\",\n+                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n+                                \"displayName\": \"Byte Sequence Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fork-mode\",\n+                                \"name\": \"Byte Sequence Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-parent-fields\": {\n+                            \"Byte Sequence Location\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Trailing\",\n+                                        \"value\": \"Trailing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Leading\",\n+                                        \"value\": \"Leading\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Trailing\",\n+                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n+                                \"displayName\": \"Byte Sequence Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Byte Sequence\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n-                                \"displayName\": \"Include Parent Fields\",\n+                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n+                                \"displayName\": \"Keep Byte Sequence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-parent-fields\",\n+                                \"name\": \"Keep Byte Sequence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"All Splits will be routed to the splits relationship\",\n+                                \"name\": \"splits\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"description\": \"The original file\",\n                                 \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n-                                \"name\": \"fork\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"array\",\n+                            \"binary\",\n                             \"content\",\n-                            \"event\",\n-                            \"fork\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n-                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n+                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Generated FlowFile attribute name\",\n-                                \"value\": \"Generated FlowFile attribute value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Specifies whether the data should be Text or Binary\",\n-                                \"displayName\": \"Data Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Size\": {\n-                                \"defaultValue\": \"0B\",\n-                                \"description\": \"The size of the file that will be used\",\n-                                \"displayName\": \"File Size\",\n+                            \"JsonPath Expression\": {\n+                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n+                                \"displayName\": \"JsonPath Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Size\",\n+                                \"name\": \"JsonPath Expression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Unique FlowFiles\": {\n+                            \"Null Value Representation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n-                                \"displayName\": \"Unique FlowFiles\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unique FlowFiles\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-set\",\n+                                \"name\": \"Null Value Representation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"generate-ff-custom-text\": {\n-                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n-                                \"displayName\": \"Custom Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"generate-ff-custom-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mime-type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n-                                \"displayName\": \"Mime Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mime-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"generate\",\n-                            \"load\",\n-                            \"random\",\n-                            \"test\"\n+                            \"json\",\n+                            \"jsonpath\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n+                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Field name in generated record\",\n-                                \"value\": \"Faker category for generated record values\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"null-percentage\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Nullable Fields\",\n-                                        \"propertyName\": \"nullable-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n-                                \"displayName\": \"Null Value Percentage\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"null-percentage\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"nullable-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n-                                \"displayName\": \"Nullable Fields\",\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nullable-fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"number-of-records\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n-                                \"displayName\": \"Number of Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"number-of-records\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"record-writer\": {\n+                            \"Record Writer\": {\n                                 \"description\": \"Specifies the Controller Service to use for writing out the records\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"Records Per Split\": {\n+                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n+                                \"displayName\": \"Records Per Split\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Records Per Split\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"splits\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"fake\",\n-                            \"generate\",\n-                            \"random\",\n-                            \"test\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"schema\",\n+                            \"split\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n+                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n+                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n                                 \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Header Line Count\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n+                                \"displayName\": \"Header Line Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"Header Line Count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"Header Line Marker Characters\": {\n+                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n+                                \"displayName\": \"Header Line Marker Characters\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Header Line Marker Characters\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                            \"Line Split Count\": {\n+                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n+                                \"displayName\": \"Line Split Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"Line Split Count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-column-for-val-partitioning\": {\n-                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n-                                \"displayName\": \"Column for Value Partitioning\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-column-for-val-partitioning\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-custom-orderby-column\": {\n-                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n-                                \"displayName\": \"Custom ORDER BY Column\",\n+                            \"Maximum Fragment Size\": {\n+                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n+                                \"displayName\": \"Maximum Fragment Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-custom-orderby-column\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Fragment Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gen-table-fetch-partition-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n-                                \"displayName\": \"Partition Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"gen-table-fetch-partition-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-output-flowfile-on-zero-results\": {\n+                            \"Remove Trailing Newlines\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n-                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\n and \\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n+                                \"displayName\": \"Remove Trailing Newlines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n+                                \"name\": \"Remove Trailing Newlines\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n+                                \"name\": \"splits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"database\",\n-                            \"fetch\",\n-                            \"generate\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"split\",\n+                            \"text\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n-                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Variable Registry.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n+                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"generatetablefetch.sql.error\"\n+                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"name\": \"generatetablefetch.tableName\"\n+                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n+                                \"name\": \"fragment.size\"\n                             },\n                             {\n-                                \"description\": \"The comma-separated list of column names used in the query.\",\n-                                \"name\": \"generatetablefetch.columnNames\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"Where clause used in the query to get the expected rows.\",\n-                                \"name\": \"generatetablefetch.whereClause\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n-                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n-                                \"name\": \"generatetablefetch.limit\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Split Depth\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n+                                \"displayName\": \"Split Depth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Split Depth\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n-                                \"name\": \"generatetablefetch.offset\"\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"split\",\n+                            \"xml\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n+                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n                                 \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n                                 \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"30 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n+                            \"File Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n+                                \"displayName\": \"State Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"File Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"File to Tail\": {\n+                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n+                                \"displayName\": \"File(s) to Tail\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"File to Tail\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Delete Original\": {\n+                            \"Initial Start Position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n+                                        \"displayName\": \"Beginning of Time\",\n+                                        \"value\": \"Beginning of Time\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n+                                        \"displayName\": \"Beginning of File\",\n+                                        \"value\": \"Beginning of File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n+                                        \"displayName\": \"Current Time\",\n+                                        \"value\": \"Current Time\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n+                                \"defaultValue\": \"Beginning of File\",\n+                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n+                                \"displayName\": \"Initial Start Position\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n+                                \"name\": \"Initial Start Position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"Line Start Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Single file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Tailing mode\",\n+                                        \"propertyName\": \"tail-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n+                                \"displayName\": \"Line Start Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n+                                \"name\": \"Line Start Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"64 KB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Line Start Pattern\",\n+                                        \"propertyName\": \"Line Start Pattern\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n+                                \"displayName\": \"Max Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"Post-Rollover Tail Period\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n+                                \"displayName\": \"Post-Rollover Tail Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Post-Rollover Tail Period\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"Rolling Filename Pattern\": {\n+                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n+                                \"displayName\": \"Rolling Filename Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Rolling Filename Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"pre-allocated-buffer-size\": {\n+                                \"defaultValue\": \"65536 B\",\n+                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n+                                \"displayName\": \"Pre-Allocated Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pre-allocated-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reread-on-nul\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n+                                \"displayName\": \"Reread when NUL encountered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n+                                \"name\": \"reread-on-nul\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"tail-base-directory\": {\n+                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n+                                \"displayName\": \"Base directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"tail-base-directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                            \"tail-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n+                                        \"displayName\": \"Single file\",\n+                                        \"value\": \"Single file\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n+                                        \"displayName\": \"Multiple files\",\n+                                        \"value\": \"Multiple files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Single file\",\n+                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n+                                \"displayName\": \"Tailing mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n+                                \"name\": \"tail-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"tailfile-lookup-frequency\": {\n+                                \"defaultValue\": \"10 minutes\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n+                                \"displayName\": \"Lookup frequency\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"name\": \"tailfile-lookup-frequency\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"tailfile-maximum-age\": {\n+                                \"defaultValue\": \"24 hours\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n+                                \"displayName\": \"Maximum age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"tailfile-maximum-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"tailfile-recursive-lookup\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n+                                \"displayName\": \"Recursive lookup\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"tailfile-recursive-lookup\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"file\",\n+                            \"log\",\n+                            \"source\",\n+                            \"tail\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n+                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Path of the original file the flow file comes from.\",\n+                                \"name\": \"tailfile.original.path\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These XSLT parameters are passed to the transformer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An XSLT transform parameter name\",\n+                                \"value\": \"An XSLT transform parameter value\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"XSLT file name\": {\n+                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n+                                \"displayName\": \"XSLT file name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"XSLT file name\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n+                                \"displayName\": \"Cache size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                            \"cache-ttl-after-last-access\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n+                                \"displayName\": \"Cache TTL after last access\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"cache-ttl-after-last-access\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"indent-output\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to indent the output.\",\n+                                \"displayName\": \"Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n+                                \"name\": \"indent-output\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n+                            \"secure-processing\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n+                                \"displayName\": \"Secure processing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"name\": \"secure-processing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"xslt-controller\": {\n+                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n+                                \"displayName\": \"XSLT Lookup\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"xslt-controller\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"xslt-controller-key\": {\n+                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n+                                \"displayName\": \"XSLT Lookup key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"name\": \"xslt-controller-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"transform\",\n+                            \"xml\",\n+                            \"xslt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n+                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"File Filter\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"Packaging Format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"tar\",\n+                                        \"value\": \"tar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zip\",\n+                                        \"value\": \"zip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-stream-v3\",\n+                                        \"value\": \"flowfile-stream-v3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-stream-v2\",\n+                                        \"value\": \"flowfile-stream-v2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-tar-v1\",\n+                                        \"value\": \"flowfile-tar-v1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The Packaging Format used to create the file\",\n+                                \"displayName\": \"Packaging Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"Packaging Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": true\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"Unpack\",\n+                            \"archive\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"tar\",\n+                            \"un-merge\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n-                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n+                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n+                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n+                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n                                 \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n+                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n+                                \"name\": \"file.creationTime\"\n                             },\n                             {\n-                                \"description\": \"The numeric owner id of the source file\",\n+                                \"description\": \"The owner of the unpacked file (tar only)\",\n                                 \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n+                                \"description\": \"The group owner of the unpacked file (tar only)\",\n                                 \"name\": \"file.group\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n                                 \"name\": \"file.permissions\"\n                             },\n                             {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"The encryption method for entries in Zip archives\",\n+                                \"name\": \"file.encryptionMethod\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -98673,1591 +98481,1764 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"counter-name\": {\n+                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n+                                \"displayName\": \"Counter Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"counter-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n+                                \"displayName\": \"Delta\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"delta\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n+                                \"description\": \"The name of the counter to update/get.\",\n+                                \"name\": \"counterName\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Counter was updated/retrieved\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"counter\",\n+                            \"debug\",\n+                            \"instrumentation\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n+                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of files to pull in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"db-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-catalog-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"updatedatabasetable-create-table\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n+                                        \"displayName\": \"Create If Not Exists\",\n+                                        \"value\": \"Create If Not Exists\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n+                                        \"displayName\": \"Fail If Not Exists\",\n+                                        \"value\": \"Fail If Not Exists\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"Fail If Not Exists\",\n+                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n+                                \"displayName\": \"Create Table Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"updatedatabasetable-create-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"updatedatabasetable-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Input Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"updatedatabasetable-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-primary-keys\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Create If Not Exists\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Create Table Strategy\",\n+                                        \"propertyName\": \"updatedatabasetable-create-table\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n+                                \"displayName\": \"Primary Key Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-primary-keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"updatedatabasetable-query-timeout\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n+                                \"displayName\": \"Query Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"updatedatabasetable-quoted-column-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"updatedatabasetable-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"updatedatabasetable-record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Update Field Names\",\n+                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"updatedatabasetable-record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"updatedatabasetable-schema-name\": {\n+                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"updatedatabasetable-table-name\": {\n+                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-table-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"updatedatabasetable-translate-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"updatedatabasetable-translate-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"updatedatabasetable-update-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n+                                \"displayName\": \"Update Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"updatedatabasetable-update-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are routed to success\",\n+                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"alter\",\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"metadata\",\n+                            \"table\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n-                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n+                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on disk\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n+                                \"name\": \"output.table\"\n                             },\n                             {\n-                                \"description\": \"The group owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n+                                \"name\": \"output.path\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The additional headers to be sent by the processor whenever making a new HTTP request. \\n Setting a dynamic property name to XYZ and value to ${attribute} will result in the header 'XYZ: attribute_value' being sent to the HTTP endpoint\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"Header Name\",\n-                                \"value\": \"The Expression Language to be used to populate the header value\"\n+                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A RecordPath.\",\n+                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Accept Content-Type\": {\n-                                \"description\": \"If specified, requests will only accept the provided Content-Type\",\n-                                \"displayName\": \"Accept Content-Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Accept Content-Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Filename\": {\n-                                \"description\": \"The filename to assign to the file when pulled\",\n-                                \"displayName\": \"Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Filename\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Follow Redirects\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If we receive a 3xx HTTP Status Code from the server, indicates whether or not we should follow the redirect that the server specifies\",\n-                                \"displayName\": \"Follow Redirects\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Follow Redirects\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password required to access the URL\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL to pull from\",\n-                                \"displayName\": \"URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"User Agent\": {\n-                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n-                                \"displayName\": \"User Agent\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"User Agent\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username required to access the URL\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"redirect-cookie-policy\": {\n+                            \"replacement-value-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Default cookie policy that provides a higher degree of compatibility with common cookie management of popular HTTP agents for non-standard (Netscape style) cookies.\",\n-                                        \"displayName\": \"default\",\n-                                        \"value\": \"default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"RFC 6265 compliant cookie policy (interoperability profile).\",\n-                                        \"displayName\": \"standard\",\n-                                        \"value\": \"standard\"\n-                                    },\n-                                    {\n-                                        \"description\": \"RFC 6265 compliant cookie policy (strict profile).\",\n-                                        \"displayName\": \"strict\",\n-                                        \"value\": \"strict\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Netscape draft compliant cookie policy.\",\n-                                        \"displayName\": \"netscape\",\n-                                        \"value\": \"netscape\"\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n+                                        \"displayName\": \"Literal Value\",\n+                                        \"value\": \"literal-value\"\n                                     },\n                                     {\n-                                        \"description\": \"A cookie policy that ignores cookies.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n+                                        \"displayName\": \"Record Path Value\",\n+                                        \"value\": \"record-path-value\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"When a HTTP server responds to a request with a redirect, this is the cookie policy used to copy cookies to the following request.\",\n-                                \"displayName\": \"Redirect Cookie Policy\",\n+                                \"defaultValue\": \"literal-value\",\n+                                \"description\": \"Specifies how to interpret the configured replacement values\",\n+                                \"displayName\": \"Replacement Value Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-cookie-policy\",\n-                                \"required\": false,\n+                                \"name\": \"replacement-value-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores Last Modified Time and ETag headers returned by server so that the same data will not be fetched multiple times.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are transferred to the success relationship\",\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"poll\",\n-                            \"source\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetHTTP\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Fetches data from an HTTP or HTTPS URL and writes the data to the content of a FlowFile. Once the content has been fetched, the ETag and Last Modified dates are remembered (if the web server supports these concepts). This allows the Processor to fetch new data only if the remote data has changed or until the state is cleared. That is, once the content has been fetched from the given URL, it will not be fetched again until the content on the remote server changes. Note that due to limitations on state management, stored \\\"last modified\\\" and etag fields never expire. If the URL in GetHttp uses Expression Language that is unbounded, there is the potential for Out of Memory Errors to occur.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n+                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n+                                \"name\": \"record.index\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type of the FlowFile, as reported by the HTTP Content-Type header\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases. \",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Client Acknowledge\",\n-                                        \"value\": \"Client Acknowledge\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Auto Acknowledge\",\n-                                        \"value\": \"Auto Acknowledge\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Client Acknowledge\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n+                            \"validate-csv-delimiter\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n+                                \"displayName\": \"Delimiter character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"validate-csv-eol\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n+                                \"displayName\": \"End of line symbols\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-eol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy JMS Properties to Attributes\": {\n+                            \"validate-csv-header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n-                                \"displayName\": \"Copy JMS Properties to Attributes\",\n+                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n+                                \"displayName\": \"Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy JMS Properties to Attributes\",\n+                                \"name\": \"validate-csv-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"validate-csv-quote\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n+                                \"displayName\": \"Quote character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-quote\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"validate-csv-schema\": {\n+                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n+                                \"displayName\": \"Schema\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-schema\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"validate-csv-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n+                                        \"displayName\": \"Line by line validation\",\n+                                        \"value\": \"Line by line validation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n+                                        \"displayName\": \"FlowFile validation\",\n+                                        \"value\": \"FlowFile validation\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FlowFile validation\",\n+                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n+                                \"displayName\": \"Validation strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"validate-csv-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n-                                \"displayName\": \"Message Selector\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"csv\",\n+                            \"schema\",\n+                            \"validation\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n+                                \"name\": \"count.valid.lines\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n+                                \"name\": \"count.invalid.lines\"\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                            {\n+                                \"description\": \"If line by line validation, total number of lines in the source data\",\n+                                \"name\": \"count.total.lines\"\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            {\n+                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n+                                \"name\": \"validation.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"JSON Schema\": {\n+                                \"description\": \"The content of a JSON Schema\",\n+                                \"displayName\": \"JSON Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n+                                \"name\": \"JSON Schema\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"Schema Version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"name\": \"Schema Version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutJMS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"consume\",\n-                            \"consumer\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"listen\",\n-                            \"pull\",\n-                            \"queue\",\n-                            \"source\"\n+                            \"JSON\",\n+                            \"schema\",\n+                            \"validation\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetJMSQueue\",\n-                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Queue, creating a FlowFile for each JMS Message or bundle of messages, as configured\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"json.validation.errors\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n+                            \"allow-extra-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Client Acknowledge\",\n-                                        \"value\": \"Client Acknowledge\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Auto Acknowledge\",\n-                                        \"value\": \"Auto Acknowledge\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Client Acknowledge\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n+                                \"displayName\": \"Allow Extra Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"allow-extra-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy JMS Properties to Attributes\": {\n+                            \"coerce-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not the JMS Message Properties should be copied to the FlowFile Attributes; if so, the attribute name will be jms.XXX, where XXX is the JMS Property name\",\n-                                \"displayName\": \"Copy JMS Properties to Attributes\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n+                                \"displayName\": \"Force Types From Reader's Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy JMS Properties to Attributes\",\n+                                \"name\": \"coerce-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"invalid-record-writer\": {\n+                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n+                                \"displayName\": \"Record Writer for Invalid Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n-                                \"required\": true,\n+                                \"name\": \"invalid-record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"maximum-validation-details-length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n+                                \"displayName\": \"Maximum Validation Details Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"maximum-validation-details-length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to use in order to narrow the messages that are pulled\",\n-                                \"displayName\": \"Message Selector\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n+                                        \"displayName\": \"Use Reader's Schema\",\n+                                        \"value\": \"reader-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n+                                        \"displayName\": \"Use Schema Name Property\",\n+                                        \"value\": \"schema-name-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n+                                        \"displayName\": \"Use Schema Text Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"reader-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"schema-registry\": {\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Durable Subscription\": {\n+                            \"strict-type-checking\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, connections to the specified topic will use Durable Subscription so that messages are queued when we are not pulling them\",\n-                                \"displayName\": \"Use Durable Subscription\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n+                                \"displayName\": \"Strict Type Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Durable Subscription\",\n+                                \"name\": \"strict-type-checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"validation-details-attribute-name\": {\n+                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n+                                \"displayName\": \"Validation Details Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"validation-details-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutJMS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"consumer\",\n-                            \"durable\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"listen\",\n-                            \"non-durable\",\n-                            \"pull\",\n-                            \"source\",\n-                            \"subscription\",\n-                            \"topic\"\n+                            \"record\",\n+                            \"schema\",\n+                            \"validate\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetJMSTopic\",\n-                        \"typeDescription\": \"Pulls messages from a ActiveMQ JMS Topic, creating a FlowFile for each JMS Message or bundle of messages, as configured.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n+                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                            \"Schema File\": {\n+                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n+                                \"displayName\": \"Schema File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delete Original\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"name\": \"Schema File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"XML Source Attribute\": {\n+                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n+                                \"displayName\": \"XML Source Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"XML Source Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"schema\",\n+                            \"validation\",\n+                            \"xml\",\n+                            \"xsd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n+                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"validatexml.invalid.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"attribute-copy-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"keeporiginal\",\n+                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n+                                \"displayName\": \"Attribute Copy Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"attribute-copy-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n+                                \"name\": \"distributed-cache-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"expiration-duration\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n+                                \"displayName\": \"Expiration Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"expiration-duration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"releasable-flowfile-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n+                                \"displayName\": \"Releasable FlowFile Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"releasable-flowfile-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n+                                \"displayName\": \"Release Signal Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"release-signal-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"signal-counter-name\": {\n+                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n+                                \"displayName\": \"Signal Counter Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"name\": \"signal-counter-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"target-signal-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n+                                \"displayName\": \"Target Signal Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n+                                \"name\": \"target-signal-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"wait-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n+                                \"displayName\": \"Wait Buffer Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-buffer-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"wait-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n+                                        \"displayName\": \"Transfer to wait relationship\",\n+                                        \"value\": \"wait\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n+                                        \"displayName\": \"Keep in the upstream connection\",\n+                                        \"value\": \"keep\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"wait\",\n+                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n+                                \"displayName\": \"Wait Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"name\": \"wait-mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n+                            \"wait-penalty-duration\": {\n+                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n+                                \"displayName\": \"Wait Penalty Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"wait-penalty-duration\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Notify\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n+                                \"name\": \"expired\"\n                             },\n-                            \"Search Recursively\": {\n+                            {\n+                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"hold\",\n+                            \"map\",\n+                            \"release\",\n+                            \"signal\",\n+                            \"wait\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n+                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n+                                \"name\": \"wait.start.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n+                                \"name\": \"wait.counter.<counterName>\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Show Deltas\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n+                                \"displayName\": \"Show Deltas\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"Show Deltas\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n+                            \"reporting-granularity\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n+                                        \"displayName\": \"Five Minutes\",\n+                                        \"value\": \"five-minutes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n+                                        \"displayName\": \"One Second\",\n+                                        \"value\": \"one-second\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"defaultValue\": \"five-minutes\",\n+                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n+                                \"displayName\": \"Reporting Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"reporting-granularity\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"log\",\n+                            \"stats\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n+                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Directory Display Name\": {\n+                                \"defaultValue\": \"Un-Named\",\n+                                \"description\": \"The name to display for the directory in alerts.\",\n+                                \"displayName\": \"Directory Display Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Directory Display Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                            \"Directory Location\": {\n+                                \"description\": \"The directory path of the partition to be monitored.\",\n+                                \"displayName\": \"Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"Directory Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n+                            \"Threshold\": {\n+                                \"defaultValue\": \"80%\",\n+                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n+                                \"displayName\": \"Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Threshold\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"disk\",\n+                            \"monitoring\",\n+                            \"repo\",\n+                            \"storage\",\n+                            \"warning\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n+                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Memory Pool\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PS Eden Space\",\n+                                        \"value\": \"PS Eden Space\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PS Survivor Space\",\n+                                        \"value\": \"PS Survivor Space\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PS Old Gen\",\n+                                        \"value\": \"PS Old Gen\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"PS Old Gen\",\n+                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n+                                \"displayName\": \"Memory Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"Memory Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                            \"Reporting Interval\": {\n+                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n+                                \"displayName\": \"Reporting Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"name\": \"Reporting Interval\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Usage Threshold\": {\n+                                \"defaultValue\": \"65%\",\n+                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n+                                \"displayName\": \"Usage Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Usage Threshold\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"garbage collection\",\n+                            \"gc\",\n+                            \"heap\",\n+                            \"jvm\",\n+                            \"memory\",\n+                            \"monitor\",\n+                            \"warning\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n+                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8649\",\n+                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"Send JVM Metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"ganglia\",\n+                            \"stats\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n-                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n+                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hl7-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -100266,1334 +100247,1033 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional HTTP Methods\": {\n-                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n-                                \"displayName\": \"Additional HTTP Methods\",\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional HTTP Methods\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Character Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow DELETE\": {\n+                            \"hl7-input-version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"autodetect\",\n+                                        \"value\": \"autodetect\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP DELETE Method\",\n-                                \"displayName\": \"Allow DELETE\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow DELETE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Allow GET\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"2.2\",\n+                                        \"value\": \"2.2\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"2.3\",\n+                                        \"value\": \"2.3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP GET Method\",\n-                                \"displayName\": \"Allow GET\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow GET\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Allow HEAD\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"2.3.1\",\n+                                        \"value\": \"2.3.1\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"2.4\",\n+                                        \"value\": \"2.4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"2.5\",\n+                                        \"value\": \"2.5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.5.1\",\n+                                        \"value\": \"2.5.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.6\",\n+                                        \"value\": \"2.6\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP HEAD Method\",\n-                                \"displayName\": \"Allow HEAD\",\n+                                \"defaultValue\": \"autodetect\",\n+                                \"description\": \"The HL7 version to use for parsing and validation\",\n+                                \"displayName\": \"HL7 Input Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow HEAD\",\n+                                \"name\": \"hl7-input-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow OPTIONS\": {\n+                            \"parse-segment-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP OPTIONS Method\",\n-                                \"displayName\": \"Allow OPTIONS\",\n+                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n+                                \"displayName\": \"Parse Segment Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow OPTIONS\",\n+                                \"name\": \"parse-segment-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow POST\": {\n+                            \"skip-validation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP POST Method\",\n-                                \"displayName\": \"Allow POST\",\n+                                \"description\": \"Whether or not to validate HL7 message values\",\n+                                \"displayName\": \"Skip Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow POST\",\n+                                \"name\": \"skip-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow PUT\": {\n+                            \"use-segment-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP PUT Method\",\n-                                \"displayName\": \"Allow PUT\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow PUT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Allowed Paths\": {\n-                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n-                                \"displayName\": \"Allowed Paths\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allowed Paths\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Default URL Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n-                                \"displayName\": \"Default URL Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Default URL Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"HTTP Protocols\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n-                                    }\n-                                ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listening Port\": {\n-                                \"defaultValue\": \"80\",\n-                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Listening Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Threads\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n-                                \"displayName\": \"Maximum Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Threads\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"container-queue-size\": {\n-                                \"defaultValue\": \"50\",\n-                                \"description\": \"The size of the queue for Http Request Containers\",\n-                                \"displayName\": \"Container Queue Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"container-queue-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n+                                \"displayName\": \"Use Segment Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"name\": \"use-segment-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"parameters-to-attributes\": {\n-                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n-                                \"displayName\": \"Parameters to Attributes List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameters-to-attributes\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingress\",\n-                            \"listen\",\n-                            \"request\",\n-                            \"web service\"\n+                            \"HL7\",\n+                            \"attributes\",\n+                            \"extract\",\n+                            \"health level 7\",\n+                            \"healthcare\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n-                                \"name\": \"http.servlet.path\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n-                                \"name\": \"http.context.path\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n-                                \"name\": \"http.method\"\n-                            },\n-                            {\n-                                \"description\": \"IP address/hostname of the server\",\n-                                \"name\": \"http.local.name\"\n-                            },\n-                            {\n-                                \"description\": \"Listening port of the server\",\n-                                \"name\": \"http.server.port\"\n-                            },\n-                            {\n-                                \"description\": \"The query string portion of the Request URL\",\n-                                \"name\": \"http.query.string\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the requestor\",\n-                                \"name\": \"http.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname:port combination of the requestor\",\n-                                \"name\": \"http.remote.addr\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the requestor\",\n-                                \"name\": \"http.remote.user\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol used to communicate\",\n-                                \"name\": \"http.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The full Request URL\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The type of HTTP Authorization used\",\n-                                \"name\": \"http.auth.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the authenticated user making the request\",\n-                                \"name\": \"http.principal.name\"\n-                            },\n-                            {\n-                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n-                                \"name\": \"http.query.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n-                                \"name\": \"http.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.subject.dn\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n-                                \"name\": \"http.headers.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n-                                \"name\": \"http.headers.multipart.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n-                                \"name\": \"http.multipart.size\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n-                                \"name\": \"http.multipart.content.type\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n-                                \"name\": \"http.multipart.name\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n-                                \"name\": \"http.multipart.filename\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n-                                \"name\": \"http.multipart.fragments.sequence.number\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n-                                \"name\": \"http.multipart.fragments.total.number\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n+                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An HTTP header name\",\n-                                \"value\": \"An HTTP header value\"\n+                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of a Relationship\",\n+                                \"value\": \"An HL7 Query Language query\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to add to the HTTP Response (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n-                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"HTTP Status Code\": {\n-                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n-                                \"displayName\": \"HTTP Status Code\",\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HTTP Status Code\",\n+                                \"name\": \"Character Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"IP address of the client. Used for provenance event.\",\n-                                \"name\": \"http.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n-                                \"name\": \"http.local.name\"\n-                            },\n-                            {\n-                                \"description\": \"Listening port of the server. Used for provenance event.\",\n-                                \"name\": \"http.server.port\"\n-                            },\n-                            {\n-                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n-                                \"name\": \"http.subject.dn\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.http.StandardHttpContextMap\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"http\",\n-                            \"https\",\n-                            \"response\",\n-                            \"web service\"\n+                            \"HL7\",\n+                            \"Health Level 7\",\n+                            \"healthcare\",\n+                            \"route\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n-                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n+                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n+                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n+                                \"name\": \"RouteHL7.Route\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.attributes.UpdateAttribute\"\n-                        ],\n-                        \"deprecationReason\": \"UpdateAttribute can be configured using the hash Expression Language function to digest one or more attributes\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"This regular expression is evaluated against the flowfile attribute values. If the regular expression contains a capturing group, the value of that group will be used when comparing flow file attributes. Otherwise, the original flow file attribute's value will be used if and only if the value matches the given regular expression.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A flowfile attribute key for attribute inspection\",\n-                                \"value\": \"A Regular Expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hash Value Attribute Key\": {\n-                                \"description\": \"The name of the flowfile attribute where the hash value should be stored\",\n-                                \"displayName\": \"Hash Value Attribute Key\",\n+                            \"remote-file\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n+                                \"displayName\": \"Remote File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"remote-file\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Value Attribute Key\",\n+                                \"name\": \"smb-client-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"description\": \"A flowfile will be routed here for each successfully fetched file.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Used for flowfiles that are missing required attributes\",\n+                                \"description\": \"A flowfile will be routed here when failed to fetch its content.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"hash\"\n+                            \"cifs\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"samba\",\n+                            \"smb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HashAttribute\",\n-                        \"typeDescription\": \"Hashes together the key/value pairs of several flowfile attributes and adds the hash as a new attribute. Optional properties are to be added such that the name of the property is the name of a flowfile attribute to consider and the value of the property is a regular expression that, if matched by the attribute value, will cause that attribute to be used as part of the hash. If the regular expression contains a capturing group, only the value of the capturing group will be used. For a processor which accepts various attributes and generates a cryptographic hash of each, see \\\"CryptographicHashAttribute\\\". \",\n+                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n+                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing flowfile attributes. The name of this attribute is specified by the <Hash Value Attribute Key> property.\",\n-                                \"name\": \"<Hash Value Attribute Key>\"\n+                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.CryptographicHashContent\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hash Algorithm\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of files to pull in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Domain\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"File Filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"1.0.10118.3.0.55\",\n-                                        \"value\": \"1.0.10118.3.0.55\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HARAKA-256\",\n-                                        \"value\": \"HARAKA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-256\",\n-                                        \"value\": \"SKEIN-512-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-384\",\n-                                        \"value\": \"SKEIN-1024-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE3-256\",\n-                                        \"value\": \"BLAKE3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-160\",\n-                                        \"value\": \"BLAKE2B-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-288\",\n-                                        \"value\": \"KECCAK-288\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WHIRLPOOL\",\n-                                        \"value\": \"WHIRLPOOL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-384\",\n-                                        \"value\": \"SKEIN-512-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SM3\",\n-                                        \"value\": \"SM3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-512\",\n-                                        \"value\": \"BLAKE2B-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.0.10118.3.0.55\",\n-                                        \"value\": \"OID.1.0.10118.3.0.55\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TUPLEHASH128-256\",\n-                                        \"value\": \"TUPLEHASH128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411-2012-512\",\n-                                        \"value\": \"GOST3411-2012-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-256\",\n-                                        \"value\": \"KECCAK-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-128\",\n-                                        \"value\": \"SKEIN-512-128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-384\",\n-                                        \"value\": \"BLAKE2B-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHAKE256-512\",\n-                                        \"value\": \"SHAKE256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.12\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.11\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-160\",\n-                                        \"value\": \"SKEIN-256-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.10\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-256\",\n-                                        \"value\": \"DSTU7564-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-224\",\n-                                        \"value\": \"BLAKE2S-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-384\",\n-                                        \"value\": \"KECCAK-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-128\",\n-                                        \"value\": \"SKEIN-256-128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-384\",\n-                                        \"value\": \"DSTU7564-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HARAKA-512\",\n-                                        \"value\": \"HARAKA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARALLELHASH128-256\",\n-                                        \"value\": \"PARALLELHASH128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHAKE128-256\",\n-                                        \"value\": \"SHAKE128-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-224\",\n-                                        \"value\": \"KECCAK-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-512\",\n-                                        \"value\": \"SKEIN-512-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PARALLELHASH256-512\",\n-                                        \"value\": \"PARALLELHASH256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-512\",\n-                                        \"value\": \"SKEIN-1024-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-160\",\n-                                        \"value\": \"SKEIN-512-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.3\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411\",\n-                                        \"value\": \"GOST3411\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.3\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2B-256\",\n-                                        \"value\": \"BLAKE2B-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.2\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-1024-1024\",\n-                                        \"value\": \"SKEIN-1024-1024\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.1.2.804.2.1.1.1.1.2.2.1\",\n-                                        \"value\": \"OID.1.2.804.2.1.1.1.1.2.2.1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.9\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-256\",\n-                                        \"value\": \"BLAKE2S-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.8\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OID.2.16.840.1.101.3.4.2.7\",\n-                                        \"value\": \"OID.2.16.840.1.101.3.4.2.7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TIGER\",\n-                                        \"value\": \"TIGER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD256\",\n-                                        \"value\": \"RIPEMD256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-256\",\n-                                        \"value\": \"SKEIN-256-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD320\",\n-                                        \"value\": \"RIPEMD320\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.9\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD160\",\n-                                        \"value\": \"RIPEMD160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TUPLEHASH256-512\",\n-                                        \"value\": \"TUPLEHASH256-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GOST3411-2012-256\",\n-                                        \"value\": \"GOST3411-2012-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.8\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.1\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KECCAK-512\",\n-                                        \"value\": \"KECCAK-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-512-224\",\n-                                        \"value\": \"SKEIN-512-224\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.7\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.7\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Hidden Files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Source File\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"1.2.804.2.1.1.1.1.2.2.2\",\n-                                        \"value\": \"1.2.804.2.1.1.1.1.2.2.2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.12\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.12\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n+                                \"displayName\": \"Keep Source File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Source File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.10\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.10\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.16.840.1.101.3.4.2.11\",\n-                                        \"value\": \"2.16.840.1.101.3.4.2.11\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Recurse Subdirectories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Share Access Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-160\",\n-                                        \"value\": \"BLAKE2S-160\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"RIPEMD128\",\n-                                        \"value\": \"RIPEMD128\"\n-                                    },\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share Access Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"smb-dialect\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MD4\",\n-                                        \"value\": \"MD4\"\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SKEIN-256-224\",\n-                                        \"value\": \"SKEIN-256-224\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BLAKE2S-128\",\n-                                        \"value\": \"BLAKE2S-128\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DSTU7564-512\",\n-                                        \"value\": \"DSTU7564-512\"\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MD5\",\n-                                \"description\": \"Determines what hashing algorithm should be used to perform the hashing function\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Algorithm\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Attribute Name\": {\n-                                \"defaultValue\": \"hash.value\",\n-                                \"description\": \"The name of the FlowFile Attribute into which the Hash Value should be written. If the value already exists, it will be overwritten\",\n-                                \"displayName\": \"Hash Attribute Name\",\n+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Attribute Name\",\n+                                \"name\": \"use-encryption\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are process successfully will be sent to this relationship\",\n+                                \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be processed successfully will be sent to this relationship without any attribute being added\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"MD5\",\n-                            \"SHA-1\",\n-                            \"SHA-256\",\n-                            \"content\",\n-                            \"hash\"\n+                            \"samba, smb, cifs, files, get\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HashContent\",\n-                        \"typeDescription\": \"Calculates a hash value for the Content of a FlowFile and puts that hash value on the FlowFile as an attribute whose name is determined by the <Hash Attribute Name> property. This processor did not provide a consistent offering of hash algorithms, and is now deprecated. For modern cryptographic hashing capabilities, see \\\"CryptographicHashContent\\\". \",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This Processor adds an attribute whose value is the result of Hashing the existing FlowFile content. The name of this attribute is specified by the <Hash Attribute Name> property\",\n-                                \"name\": \"<Hash Attribute Name>\"\n+                                \"description\": \"The filename is set to the name of the file on the network share\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n+                                \"name\": \"file.creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"config-body\": {\n-                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config Body\",\n+                            \"directory\": {\n+                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"config-body\",\n+                                \"name\": \"directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-file\": {\n-                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config File\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"config-file\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-filename-in-detection\": {\n+                            \"file-name-suffix-filter\": {\n+                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n+                                \"displayName\": \"File Name Suffix Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"file-name-suffix-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n-                                \"displayName\": \"Use Filename In Detection\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-filename-in-detection\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-file-age\": {\n+                                \"description\": \"Any file older than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-file-size\": {\n+                                \"description\": \"Any file larger than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-file-age\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-file-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-file-size\": {\n+                                \"description\": \"Any file smaller than the given value will be omitted.\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-file-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-client-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"MIME\",\n-                            \"bzip2\",\n-                            \"compression\",\n-                            \"file\",\n-                            \"gzip\",\n-                            \"identify\",\n-                            \"mime.type\",\n-                            \"zip\"\n+                            \"list\",\n+                            \"samba, smb, cifs, files\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n-                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute mime.extension will be set if a common file extension for the MIME Type is known. If both Config File and Config Body are not set, the default NiFi MIME Types will be used.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n+                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n-                                \"name\": \"mime.extension\"\n+                                \"description\": \"The short name of the file that was read from filesystem.\",\n+                                \"name\": \"shortName\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The SMB URL of the share.\",\n+                                \"name\": \"serviceLocation\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"changeTime\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file in bytes.\",\n+                                \"name\": \"size\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes allocated for the file on the server.\",\n+                                \"name\": \"allocationSize\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -101601,1513 +101281,1205 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Header Name\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            },\n-                            {\n-                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"post:form:<NAME>\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Add Response Headers to Request\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to put in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Header Request Attributes Enabled\",\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Add Response Headers to Request\",\n-                                \"required\": false,\n+                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Always Output Response\": {\n+                            \"Create Missing Directories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n-                                \"displayName\": \"Response Generation Required\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Always Output Response\",\n+                                \"name\": \"Create Missing Directories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Attributes to Send\": {\n-                                \"description\": \"Regular expression that defines which attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be sent as headers. The dynamic property name will be the header key and the dynamic property value will be interpreted as expression language will be the header value.\",\n-                                \"displayName\": \"Request Header Attributes Pattern\",\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Send\",\n+                                \"name\": \"Domain\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Basic Authentication Password\": {\n-                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Password\",\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Basic Authentication Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Basic Authentication Username\": {\n-                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Username\",\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Basic Authentication Username\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Connect Timeout\",\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Share\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content-Encoding\": {\n+                            \"Share Access Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Content encoding not applied during transmission\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n-                                \"displayName\": \"Request Content-Encoding\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content-Encoding\",\n+                                \"name\": \"Share Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"dependencies\": [\n+                            \"Temporary Suffix\": {\n+                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n+                                \"displayName\": \"Temporary Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Temporary Suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"smb-dialect\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n-                                \"displayName\": \"Request Content-Type\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Digest Authentication\": {\n+                            \"use-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"samba, smb, cifs, files, put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Request Header to add\",\n+                                \"value\": \"The value of the Header\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"api-key\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Request Username\",\n-                                        \"propertyName\": \"Basic Authentication Username\"\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n-                                \"displayName\": \"Request Digest Authentication Enabled\",\n+                                \"description\": \"Encoded API key.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Digest Authentication\",\n+                                \"name\": \"api-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Follow Redirects\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n+                            \"api-key-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n-                                \"displayName\": \"Response Redirects Enabled\",\n+                                \"description\": \"Unique identifier of the API key.\",\n+                                \"displayName\": \"API Key ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Follow Redirects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Method\": {\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n-                                \"displayName\": \"HTTP Method\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"HTTP Method\",\n-                                \"required\": true,\n+                                \"name\": \"api-key-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Date Header\": {\n+                            \"authorization-scheme\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"No authorization scheme.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n+                                        \"displayName\": \"PKI\",\n+                                        \"value\": \"PKI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Basic authorization scheme.\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"API key authorization scheme.\",\n+                                        \"displayName\": \"API Key\",\n+                                        \"value\": \"API_KEY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n-                                \"displayName\": \"Request Date Header Enabled\",\n+                                \"defaultValue\": \"BASIC\",\n+                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n+                                \"displayName\": \"Authorization Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Date Header\",\n+                                \"name\": \"authorization-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n-                                        \"propertyName\": \"Put Response Body In Attribute\"\n-                                    }\n-                                ],\n-                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n-                                \"displayName\": \"Response Body Attribute Size\",\n+                            \"el-cs-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n+                                \"displayName\": \"Charset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Penalize on \\\"No Retry\\\"\": {\n+                            \"el-cs-connect-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n+                                \"displayName\": \"Connect timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-connect-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-cs-enable-compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n-                                \"displayName\": \"Request Failure Penalization Enabled\",\n+                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n+                                \"displayName\": \"Enable Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Penalize on \\\"No Retry\\\"\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-enable-compression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"Proxy Host and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy Host can be configured using an IP address or DNS address.\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"el-cs-http-hosts\": {\n+                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n+                                \"displayName\": \"HTTP Hosts\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-http-hosts\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"dependencies\": [\n+                            \"el-cs-node-selector\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n+                                        \"displayName\": \"Any\",\n+                                        \"value\": \"ANY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n+                                        \"displayName\": \"Skip Dedicated Masters\",\n+                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Port and dependent properties are deprecated in favor of Proxy Configuration Service. Port number for the configured Proxy Host address.\",\n-                                \"displayName\": \"Proxy Port\",\n+                                \"defaultValue\": \"ANY\",\n+                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n+                                \"displayName\": \"Node Selector\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-node-selector\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n-                                \"defaultValue\": \"http\",\n+                            \"el-cs-password\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy Type and dependent properties are deprecated in favor of Proxy Configuration Service. Proxy protocol type is not used\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"description\": \"The password to use with XPack security.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"el-cs-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Put Response Body In Attribute\": {\n-                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Body Attribute Name\",\n+                            \"el-cs-path-prefix\": {\n+                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n+                                \"displayName\": \"Path Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Put Response Body In Attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-path-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Read Timeout\",\n+                            \"el-cs-retry-timeout\": {\n+                                \"defaultValue\": \"60000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when retrying the operation.\",\n+                                \"displayName\": \"Retry timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote URL\": {\n-                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n-                                \"displayName\": \"HTTP URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote URL\",\n+                                \"name\": \"el-cs-retry-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Use Chunked Encoding\": {\n+                            \"el-cs-send-meta-header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n-                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n+                                \"displayName\": \"Send Meta Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Chunked Encoding\",\n+                                \"name\": \"el-cs-send-meta-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Useragent\": {\n-                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n-                                \"displayName\": \"Request User-Agent\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Useragent\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cookie-strategy\": {\n+                            \"el-cs-sniff-cluster-nodes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ACCEPT_ALL\",\n-                                        \"value\": \"ACCEPT_ALL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n-                                \"displayName\": \"Response Cookie Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n+                                \"displayName\": \"Sniff Cluster Nodes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cookie-strategy\",\n+                                \"name\": \"el-cs-sniff-cluster-nodes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"disable-http2\": {\n+                            \"el-cs-sniff-failure\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n-                                \"displayName\": \"HTTP/2 Disabled\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"disable-http2\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"etag-max-cache-size\": {\n-                                \"defaultValue\": \"10MB\",\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n                                             \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n-                                        \"propertyName\": \"use-etag\"\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n                                     }\n                                 ],\n-                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Size\",\n+                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n+                                \"displayName\": \"Sniff on Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"etag-max-cache-size\",\n+                                \"name\": \"el-cs-sniff-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flow-file-naming-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n-                                        \"displayName\": \"RANDOM\",\n-                                        \"value\": \"RANDOM\"\n-                                    },\n+                            \"el-cs-sniffer-failure-delay\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n-                                        \"displayName\": \"URL_PATH\",\n-                                        \"value\": \"URL_PATH\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff on Failure\",\n+                                        \"propertyName\": \"el-cs-sniff-failure\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RANDOM\",\n-                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n-                                \"displayName\": \"Response FlowFile Naming Strategy\",\n+                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n+                                \"displayName\": \"Sniffer Failure Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flow-file-naming-strategy\",\n+                                \"name\": \"el-cs-sniffer-failure-delay\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"form-body-form-name\": {\n+                            \"el-cs-sniffer-interval\": {\n+                                \"defaultValue\": \"5 mins\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n                                             \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Request Body Enabled\",\n-                                        \"propertyName\": \"send-message-body\"\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n-                                \"displayName\": \"Request Multipart Form-Data Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"form-body-form-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"idle-timeout\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Timeout\",\n+                                \"description\": \"Interval between Cluster sniffer operations\",\n+                                \"displayName\": \"Sniffer Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"idle-timeout\",\n+                                \"name\": \"el-cs-sniffer-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-response-content\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"el-cs-sniffer-request-timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n-                                \"displayName\": \"Response Body Ignored\",\n+                                \"description\": \"Cluster sniffer timeout for node info requests\",\n+                                \"displayName\": \"Sniffer Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-response-content\",\n+                                \"name\": \"el-cs-sniffer-request-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"invokehttp-proxy-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n-                                    }\n-                                ],\n-                                \"description\": \"Proxy Password and dependent properties are deprecated in favor of Proxy Configuration Service. Password to set when authenticating with a Proxy server.\",\n-                                \"displayName\": \"Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invokehttp-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"invokehttp-proxy-user\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Proxy Host\",\n-                                        \"propertyName\": \"Proxy Host\"\n-                                    }\n-                                ],\n-                                \"description\": \"Proxy Username and dependent properties are deprecated in favor of Proxy Configuration Service. Username to set when authenticating with a Proxy server.\",\n-                                \"displayName\": \"Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"invokehttp-proxy-user\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-idle-connections\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Connections\",\n+                            \"el-cs-socket-timeout\": {\n+                                \"defaultValue\": \"60000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n+                                \"displayName\": \"Read timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-idle-connections\",\n+                                \"name\": \"el-cs-socket-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n-                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"el-cs-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"el-cs-ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"send-message-body\": {\n+                            \"el-cs-strict-deprecation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n-                                \"displayName\": \"Request Body Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n+                                \"displayName\": \"Strict Deprecation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"send-message-body\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-strict-deprecation\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"set-form-filename\": {\n+                            \"el-cs-suppress-nulls\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n-                                        \"propertyName\": \"form-body-form-name\"\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n-                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"defaultValue\": \"always-suppress\",\n+                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n+                                \"displayName\": \"Suppress Null/Empty Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"set-form-filename\",\n-                                \"required\": false,\n+                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-etag\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"el-cs-username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Enabled\",\n+                                \"description\": \"The username to use with XPack security.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-cs-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-etag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n-                                \"name\": \"No Retry\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Response\"\n+                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n                             \"client\",\n-                            \"http\",\n-                            \"https\",\n-                            \"rest\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n-                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. FlowFile attributes are converted to HTTP headers and the FlowFile contents are included as the body of the request (if the HTTP Method is PUT, POST or PATCH).\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The status code that is returned\",\n-                                \"name\": \"invokehttp.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"The status message that is returned\",\n-                                \"name\": \"invokehttp.status.message\"\n-                            },\n-                            {\n-                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n-                                \"name\": \"invokehttp.response.body\"\n-                            },\n-                            {\n-                                \"description\": \"The original request URL\",\n-                                \"name\": \"invokehttp.request.url\"\n-                            },\n-                            {\n-                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n-                                \"name\": \"invokehttp.request.duration\"\n-                            },\n-                            {\n-                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n-                                \"name\": \"invokehttp.response.url\"\n-                            },\n-                            {\n-                                \"description\": \"The transaction ID that is returned after reading the response\",\n-                                \"name\": \"invokehttp.tx.id\"\n-                            },\n-                            {\n-                                \"description\": \"The DN of the remote server\",\n-                                \"name\": \"invokehttp.remote.dn\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.class\"\n-                            },\n-                            {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n+                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client. Uses the Elasticsearch REST Client (7.13.4, the last version before client connections verifythe server is Elastic provided, this should allow for connections to compatible alternatives, e.g. AWS OpenSearch)\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A JSONPath expression\",\n+                                \"value\": \"A Record Path expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Enrichment Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n-                                \"displayName\": \"Enrichment Record Reader\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enrichment Record Reader\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Insertion Record Path\": {\n-                                \"defaultValue\": \"/\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Insert Enrichment Fields\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n-                                \"displayName\": \"Insertion Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Insertion Record Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Join Strategy\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n-                                        \"displayName\": \"Wrapper\",\n-                                        \"value\": \"Wrapper\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n-                                        \"displayName\": \"SQL\",\n-                                        \"value\": \"SQL\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n-                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n-                                        \"displayName\": \"Insert Enrichment Fields\",\n-                                        \"value\": \"Insert Enrichment Fields\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Wrapper\",\n-                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n-                                \"displayName\": \"Join Strategy\",\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Join Strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Original Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n-                                \"displayName\": \"Original Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Original Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"SQL\": {\n-                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n-                                \"displayName\": \"SQL\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SQL\",\n-                                \"required\": true,\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"confluent-encoded\",\n+                                            \"schema-name\",\n+                                            \"hwx-schema-ref-attributes\",\n+                                            \"hwx-content-encoded-schema\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-text-property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n+                            \"schema-version\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n-                                \"name\": \"joined\"\n-                            },\n-                            {\n-                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"combine\",\n-                            \"enrichment\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"sql\",\n-                            \"streams\",\n-                            \"wrap\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"lookup\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n-                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Transform Cache Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"el-lookup-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-custom-class\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Specification\",\n-                                        \"propertyName\": \"jolt-spec\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-custom-class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-custom-modules\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Specification\",\n-                                        \"propertyName\": \"jolt-spec\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"jolt-custom-modules\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"jolt-spec\": {\n-                                \"description\": \"Jolt Specification for transform of JSON data. This value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"jolt-spec\",\n+                                \"name\": \"el-lookup-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-transform\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Apply default values to the output JSON.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \" Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transformation DSL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-transform\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pretty_print\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"json\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.JoltTransformJSON\",\n-                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n+                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"list-db-include-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n-                                \"displayName\": \"Include Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-include-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-refresh-interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n-                                \"displayName\": \"Refresh Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-refresh-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-catalog\": {\n-                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n-                                \"displayName\": \"Catalog\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-catalog\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-db-connection\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-db-connection\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"list-db-tables-name-pattern\": {\n-                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n-                                \"displayName\": \"Table Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-name-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-schema-pattern\": {\n-                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n-                                \"displayName\": \"Schema Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-schema-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-types\": {\n-                                \"defaultValue\": \"TABLE\",\n-                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n-                                \"displayName\": \"Table Types\",\n+                            \"file\": {\n+                                \"defaultValue\": \"${dropbox.id}\",\n+                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n+                                \"displayName\": \"File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-types\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"list\",\n-                            \"sql\",\n-                            \"table\"\n+                            \"dropbox\",\n+                            \"fetch\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.name\"\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.catalog\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.schema\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n-                                \"name\": \"db.table.fullname\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n-                                \"name\": \"db.table.type\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.remarks\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"Contains the number of rows in the table\",\n-                                \"name\": \"db.table.count\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -103119,305 +102491,29 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n                                         \"displayName\": \"Tracking Time Window\",\n                                         \"value\": \"window\"\n@@ -103425,24 +102521,42 @@\n                                     {\n                                         \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n                                         \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n                                 \"required\": false,\n@@ -103452,66 +102566,40 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n                                 \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n@@ -103520,36 +102608,47 @@\n                                     },\n                                     {\n                                         \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n                                         \"displayName\": \"Tracking Entities\",\n                                         \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n                                         \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n                                         \"displayName\": \"Time Window\",\n                                         \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -103572,56 +102671,45 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFTP\",\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n@@ -103633,1239 +102721,1872 @@\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ftp\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"source\"\n+                            \"dropbox\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the FTP Server\",\n-                                \"name\": \"ftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was connected to on the FTP Server\",\n-                                \"name\": \"ftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the user that performed the FTP Listing\",\n-                                \"name\": \"ftp.listing.user\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the FTP Server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"8 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"150 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include File Attributes\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n-                                \"displayName\": \"Include File Attributes\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include File Attributes\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which files to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Input Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dropbox-credential-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The full name of the file to upload.\",\n+                                \"displayName\": \"Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n-                                \"displayName\": \"Input Directory Location\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Directory Location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            {\n+                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"dropbox\",\n+                            \"put\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n+                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n+                            },\n+                            {\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n+                            },\n+                            {\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cf\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"integration\",\n+                            \"jms\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n+                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.factory.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.factory.initial\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n+                                \"name\": \"java.naming.security.credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"integration\",\n+                            \"jms\",\n+                            \"jndi\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Acknowledgement Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n+                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n+                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n+                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n+                                        \"value\": \"3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Connection Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"name\": \"Connection Factory Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"Destination Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Durable subscription\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createDurableConsumer-javax.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Durable Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Durable subscription\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-node-identifier\": {\n-                                \"defaultValue\": \"${hostname()}\",\n-                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Node Identifier\",\n+                            \"Error Queue Name\": {\n+                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n+                                \"displayName\": \"Error Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Error Queue Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n+                                \"displayName\": \"Message Selector\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-node-identifier\",\n+                                \"name\": \"Message Selector\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Session Cache size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n+                                \"displayName\": \"Session Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Cache size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Shared subscription\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createSharedConsumer-javax.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Shared Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Shared subscription\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Subscription Name\": {\n+                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n+                                \"displayName\": \"Subscription Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Subscription Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-listing-time\": {\n-                                \"defaultValue\": \"3 mins\",\n-                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Directory Listing Time\",\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-listing-time\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-operation-time\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Disk Operation Time\",\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-operation-time\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-performance-metrics\": {\n-                                \"defaultValue\": \"100000\",\n-                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n-                                \"displayName\": \"Maximum Number of Files to Track\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-performance-metrics\",\n+                                \"name\": \"cf\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.factory.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.factory.initial\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"java.naming.security.credentials\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n+                                        \"description\": \"Write only the message to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n+                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n-                                    },\n+                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Appender\",\n+                                        \"value\": \"USE_APPENDER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"output-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"track-performance\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n-                                \"displayName\": \"Track Performance\",\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"track-performance\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"filesystem\",\n+                            \"consume\",\n                             \"get\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"jms\",\n+                            \"message\",\n+                            \"receive\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n-                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n+                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The JMSDeliveryMode from the message header.\",\n+                                \"name\": \"jms_deliveryMode\"\n                             },\n                             {\n-                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The JMSExpiration from the message header.\",\n+                                \"name\": \"jms_expiration\"\n                             },\n                             {\n-                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"The JMSPriority from the message header.\",\n+                                \"name\": \"jms_priority\"\n                             },\n                             {\n-                                \"description\": \"The user that owns the file in filesystem\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"The JMSRedelivered from the message header.\",\n+                                \"name\": \"jms_redelivered\"\n                             },\n                             {\n-                                \"description\": \"The group that owns the file in filesystem\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The JMSTimestamp from the message header.\",\n+                                \"name\": \"jms_timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the file in filesystem\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The JMSCorrelationID from the message header.\",\n+                                \"name\": \"jms_correlationId\"\n                             },\n                             {\n-                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The JMSMessageID from the message header.\",\n+                                \"name\": \"jms_messageId\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The JMSType from the message header.\",\n+                                \"name\": \"jms_type\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastAccessTime\"\n+                                \"description\": \"The JMSReplyTo from the message header.\",\n+                                \"name\": \"jms_replyTo\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.creationTime\"\n+                                \"description\": \"The JMSDestination from the message header.\",\n+                                \"name\": \"jms_destination\"\n+                            },\n+                            {\n+                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n+                                \"name\": \"jms.messagetype\"\n+                            },\n+                            {\n+                                \"description\": \"Each message property is written to an attribute.\",\n+                                \"name\": \"other attributes\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n+                                \"name\": \"Connection Client ID\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Session Cache size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"This property is deprecated and no longer has any effect on the Processor. It will be removed in a later version.\",\n+                                \"displayName\": \"Session Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"name\": \"Session Cache size\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"allow-illegal-chars-in-jms-header-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n+                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"attributes-to-send-as-jms-headers-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n+                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"cf\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"cflib\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"connection.factory.name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"java.naming.factory.initial\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"java.naming.provider.url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"java.naming.security.credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"java.naming.security.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"message-body-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"bytes\",\n+                                        \"value\": \"bytes\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"bytes\",\n+                                \"description\": \"The type of JMS message body to construct.\",\n+                                \"displayName\": \"Message Body Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"message-body-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"naming.factory.libraries\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n+                                \"name\": \"jms_deliveryMode\"\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be an integer.\",\n+                                \"name\": \"jms_expiration\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n+                                \"name\": \"jms_priority\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n+                                \"name\": \"jms_redelivered\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n+                                \"name\": \"jms_timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n+                                \"name\": \"jms_correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n+                                \"name\": \"jms_type\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n+                                \"name\": \"jms_replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n+                                \"name\": \"jms_destination\"\n+                            },\n+                            {\n+                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n+                                \"name\": \"other attributes\"\n+                            },\n+                            {\n+                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n+                                \"name\": \"other attributes .type\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"jms\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"send\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n+                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-snmp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Strict Host Key Checking\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"snmp-authentication-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"snmp-oid\": {\n+                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n+                                \"displayName\": \"OID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-oid\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-private-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n+                                        \"displayName\": \"GET\",\n+                                        \"value\": \"GET\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n+                                        \"displayName\": \"WALK\",\n+                                        \"value\": \"WALK\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n+                                \"displayName\": \"SNMP Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"snmp-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"snmp-textual-oid\": {\n+                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n+                                \"displayName\": \"Textual OID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"snmp-textual-oid\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"snmp-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"get\",\n+                            \"oid\",\n+                            \"snmp\",\n+                            \"walk\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n+                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the SFTP Server\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was connected to on the SFTP Server\",\n-                                \"name\": \"sftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the user that performed the SFTP Listing\",\n-                                \"name\": \"sftp.listing.user\"\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n                             },\n                             {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the SFTP Server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n+                                \"name\": \"snmp$textualOid\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -104877,113 +104598,278 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bind-address\": {\n-                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n-                                \"displayName\": \"Bind Address\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"bind-address\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-manager-port\": {\n+                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-manager-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listening-port\": {\n-                                \"defaultValue\": \"2221\",\n-                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n-                                \"displayName\": \"Listening Port\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"listening-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n-                                \"displayName\": \"Password\",\n+                            \"snmp-usm-security-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-security-names\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"noAuthNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"SNMP Users Security Names\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-security-names\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-usm-users-file-path\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-json-file-path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    }\n+                                ],\n+                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON File Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"snmp-usm-users-file-path\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n-                                \"displayName\": \"Username\",\n+                            \"snmp-usm-users-json-content\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"usm-json-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON content\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-json-content\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"snmp-usm-users-source\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The JSON containing the USM users\",\n+                                        \"displayName\": \"Json Content\",\n+                                        \"value\": \"usm-json-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The path of the JSON file containing the USM users\",\n+                                        \"displayName\": \"Json File Path\",\n+                                        \"value\": \"usm-json-file-path\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n+                                        \"displayName\": \"Security Names\",\n+                                        \"value\": \"usm-security-names\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ways to provide USM User data\",\n+                                \"displayName\": \"USM Users Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully received files.\",\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"FTPS\",\n-                            \"ingest\",\n-                            \"listen\"\n+                            \"listen\",\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n-                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n+                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n+                                \"name\": \"snmp$*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -104992,305 +104878,482 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authorized DN Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Subject DN Pattern\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authorized DN Pattern\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Base Path\": {\n-                                \"defaultValue\": \"contentListener\",\n-                                \"description\": \"Base path for incoming connections\",\n-                                \"displayName\": \"Base Path\",\n+                            \"snmp-authentication-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Base Path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Headers to receive as Attributes (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n-                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"HTTP Protocols\": {\n+                            \"snmp-private-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Listening Port\": {\n-                                \"description\": \"The Port to listen on for incoming connections\",\n-                                \"displayName\": \"Listening Port\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Listening Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Data to Receive per Second\": {\n-                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n-                                \"displayName\": \"Max Data to Receive per Second\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Receive per Second\",\n+                                \"name\": \"snmp-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Unconfirmed Flowfile Time\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n-                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Unconfirmed Flowfile Time\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Code\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The HTTP return code returned after every HTTP call\",\n-                                \"displayName\": \"Return Code\",\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Code\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables support for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"authorized-issuer-dn-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Issuer DN Pattern\",\n+                            \"snmp-trap-agent-address\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n+                                \"displayName\": \"SNMP Trap Agent Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorized-issuer-dn-pattern\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-agent-address\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n+                            \"snmp-trap-enterprise-oid\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n+                                \"displayName\": \"Enterprise OID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-enterprise-oid\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-generic-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n+                                        \"displayName\": \"Cold Start\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n+                                        \"displayName\": \"Warm Start\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n+                                        \"displayName\": \"Link Down\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not request the client certificate on handshake\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n+                                        \"displayName\": \"Link Up\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n+                                        \"displayName\": \"Authentication Failure\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n+                                        \"displayName\": \"EGP Neighborloss\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n+                                        \"displayName\": \"Enterprise Specific\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n+                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n+                                        \"value\": \"generic-trap-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n+                                \"displayName\": \"Generic Trap Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"health-check-port\": {\n-                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n-                                \"displayName\": \"Listening Port for Health Check Requests\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"health-check-port\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-trap-generic-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-thread-pool-size\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n-                                \"displayName\": \"Maximum Thread Pool Size\",\n+                            \"snmp-trap-manager-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The host where the SNMP Manager sends the trap.\",\n+                                \"displayName\": \"SNMP Manager Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-thread-pool-size\",\n+                                \"name\": \"snmp-trap-manager-host\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n+                            \"snmp-trap-manager-port\": {\n+                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n+                                \"name\": \"snmp-trap-manager-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                            \"snmp-trap-oid-value\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The value of the trap OID.\",\n+                                \"displayName\": \"Trap OID Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-oid-value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"snmp-trap-specific-type\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"6\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Generic Trap Type\",\n+                                        \"propertyName\": \"snmp-trap-generic-type\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n+                                \"displayName\": \"Specific Trap Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-specific-type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully received FlowFiles\",\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rest\"\n+                            \"send\",\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, and DELETE will result in an error and the HTTP response status code 405. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n+                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -105299,831 +105362,1627 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Client Auth\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"snmp-hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n+                                \"name\": \"snmp-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-retries\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"snmp-security-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"relp\",\n-                            \"tcp\"\n+                            \"oid\",\n+                            \"set\",\n+                            \"snmp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n-                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n+                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The command of the RELP frames.\",\n-                                \"name\": \"relp.command\"\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n                             },\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"relp.sender\"\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received over.\",\n-                                \"name\": \"relp.port\"\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n                             },\n                             {\n-                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n-                                \"name\": \"relp.txnr\"\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n                             },\n                             {\n-                                \"description\": \"The mime.type of the content which is text/plain\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n                         },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n+                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n+                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credential-configuration-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n+                                        \"displayName\": \"Default Credential\",\n+                                        \"value\": \"default-credential\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"managed-identity\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default-credential\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credential-configuration-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"managed-identity\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n+                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"credentials\",\n+                            \"provider\",\n+                            \"security\",\n+                            \"session\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n+                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-consistency-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"document\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Azure Event Hub shared access key\",\n+                                        \"displayName\": \"Shared Access Key\",\n+                                        \"value\": \"SHARED_ACCESS_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n+                                        \"displayName\": \"Default Azure Credential\",\n+                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n+                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n+                                \"displayName\": \"Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Provides the Event Hub Name for connections\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Partition Key\": {\n+                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n+                                \"displayName\": \"Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Partition Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Default Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n+                                    },\n+                                    {\n+                                        \"description\": \"China Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Germany Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"United States Government Endpoint\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n+                                \"displayName\": \"Shared Access Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n+                                \"name\": \"Shared Access Policy\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"Shared Access Policy Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The primary or secondary key of the shared access policy\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n+                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"managed-identity-client-id\": {\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-secret\": {\n+                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-tenant-id\": {\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"dfs.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-use-managed-identity\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register ADLSCredentialsService\",\n+                                \"value\": \"The ADLSCredentialsService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n+                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Azure Storage processors. Uses Account Name with Account Key or Account Name with SAS Token.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService\",\n+                                \"value\": \"The AzureStorageCredentialsService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup\",\n+                        \"typeDescription\": \"Provides an AzureStorageCredentialsService that can be used to dynamically select another AzureStorageCredentialsService. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService that has been registered with that name. This will allow multiple AzureStorageCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n+                                \"value\": \"The AzureStorageCredentialsService_v12\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n+                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n+                                        \"displayName\": \"Account Key\",\n+                                        \"value\": \"ACCOUNT_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n+                                        \"displayName\": \"SAS Token\",\n+                                        \"value\": \"SAS_TOKEN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"credentials-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n+                            \"managed-identity-client-id\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"MANAGED_IDENTITY\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n+                            \"service-principal-client-id\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"SERVICE_PRINCIPAL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"service-principal-client-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"service-principal-client-secret\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password of the Client/Application. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n+                                \"name\": \"service-principal-client-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Parse Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n-                                \"displayName\": \"Parse Messages\",\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Parse Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"service-principal-tenant-id\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n-                                    },\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"dependentValues\": [\n+                                            \"ACCOUNT_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies.\",\n+                                \"displayName\": \"Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"blob.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"socket-keep-alive\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n+                            \"storage-sas-token\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"SAS_TOKEN\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n-                                \"displayName\": \"Socket Keep Alive\",\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socket-keep-alive\",\n+                                \"name\": \"storage-sas-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            },\n-                            {\n-                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n-                                \"name\": \"syslog.valid\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol over which the Syslog message was received.\",\n-                                \"name\": \"syslog.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The port over which the Syslog message was received.\",\n-                                \"name\": \"syslog.port\"\n-                            },\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n+                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azurite-uri\": {\n+                                \"description\": \"URI to connect to Azure Storage Emulator (Azurite)\",\n+                                \"displayName\": \"Storage Emulator URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azurite-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n-                                \"name\": \"mime.type\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"credentials\",\n+                            \"emulator\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageEmulatorCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Azure Storage processors that connects to Azurite emulator.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n+                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Ignore\",\n+                                        \"value\": \"IGNORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Upsert\",\n+                                        \"value\": \"UPSERT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"IGNORE\",\n+                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n+                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"azure-cosmos-db-connection-service\": {\n+                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n+                                \"displayName\": \"Cosmos DB Connection Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-connection-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"azure-cosmos-db-consistency-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"azure-cosmos-db-container-id\": {\n+                                \"description\": \"The unique identifier for the container\",\n+                                \"displayName\": \"Cosmos DB Container ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"azure-cosmos-db-container-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"azure-cosmos-db-name\": {\n+                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n+                                \"displayName\": \"Cosmos DB Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"azure-cosmos-db-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"azure-cosmos-db-partition-key\": {\n+                                \"description\": \"The partition key used to distribute data among servers\",\n+                                \"displayName\": \"Cosmos DB Partition Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"azure-cosmos-db-partition-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"insert-batch-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n+                                \"displayName\": \"Insert Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"insert-batch-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n-                            },\n-                            \"idle-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n-                                \"displayName\": \"Idle Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"idle-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-receiving-threads\": {\n-                                \"description\": \"This property is deprecated and no longer used.\",\n-                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-receiving-threads\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"pool-receive-buffers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n-                                \"displayName\": \"Pool Receive Buffers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pool-receive-buffers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"CRON_DRIVEN\",\n+                            \"EVENT_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsEventDriven\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"listen\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -106135,236 +106994,347 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-auth\": {\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-auth\",\n-                                \"required\": false,\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-number-tcp-connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-number-tcp-connections\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-size-socket-buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"event-hub-batch-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-size-socket-buffer\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"event-hub-consumer-group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use.\",\n+                                \"displayName\": \"Consumer Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"port\",\n+                                \"name\": \"event-hub-consumer-group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"event-hub-consumer-hostname\": {\n+                                \"description\": \"DEPRECATED: This property is no longer used.\",\n+                                \"displayName\": \"Consumer Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-consumer-hostname\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"reader-error-handling-strategy\": {\n+                            \"event-hub-initial-offset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfers any records already received and closes the connection.\",\n-                                        \"displayName\": \"Transfer\",\n-                                        \"value\": \"Transfer\"\n+                                        \"description\": \"Read from the oldest message retained in the stream.\",\n+                                        \"displayName\": \"Start of stream\",\n+                                        \"value\": \"start-of-stream\"\n                                     },\n                                     {\n-                                        \"description\": \"Discards any records already received and closes the connection.\",\n-                                        \"displayName\": \"Discard\",\n-                                        \"value\": \"Discard\"\n+                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n+                                        \"displayName\": \"End of stream\",\n+                                        \"value\": \"end-of-stream\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Transfer\",\n-                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n-                                \"displayName\": \"Read Error Strategy\",\n+                                \"defaultValue\": \"end-of-stream\",\n+                                \"description\": \"Specify where to start receiving messages if offset is not stored in Azure Storage.\",\n+                                \"displayName\": \"Initial Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reader-error-handling-strategy\",\n+                                \"name\": \"event-hub-initial-offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n-                                \"displayName\": \"Record Batch Size\",\n+                            \"event-hub-message-receive-timeout\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time this consumer should wait to receive the Prefetch Count before returning.\",\n+                                \"displayName\": \"Message Receive Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-batch-size\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-name\": {\n+                                \"description\": \"The name of the event hub to pull messages from.\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-namespace\": {\n+                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-prefetch-count\": {\n+                                \"defaultValue\": \"300\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Prefetch Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-prefetch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"event-hub-shared-access-policy-name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"event-hub-shared-access-policy-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-shared-access-policy-primary-key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n                             \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"storage-account-key\": {\n+                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-container-name\": {\n+                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n+                                \"displayName\": \"Storage Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-container-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n+                                \"displayName\": \"Storage SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"use-managed-identity\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"FlowFiles received from Event Hub.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a message from event hub cannot be parsed using the configured Record Reader or failed to be written by the configured Record Writer, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"record\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The host that sent the data.\",\n-                                \"name\": \"tcp.sender\"\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The port that the processor accepted the connection on.\",\n-                                \"name\": \"tcp.port\"\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n                             },\n                             {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n                             },\n                             {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n                             },\n                             {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n+                                \"description\": \"The name of the partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n                             },\n                             {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -106376,162 +107346,248 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Event Hub Consumer Group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use when pulling events\",\n+                                \"displayName\": \"Consumer Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Event Hub Consumer Group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"Event Hub Message Enqueue Time\": {\n+                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n+                                \"displayName\": \"Message Enqueue Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Message Enqueue Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs source\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"Event Hub Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"Number of Event Hub Partitions\": {\n+                                \"description\": \"This property is deprecated and no longer used.\",\n+                                \"displayName\": \"Number of Event Hub Partitions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n+                                \"name\": \"Number of Event Hub Partitions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"Partition Receiver Timeout (millseconds)\": {\n+                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n+                                \"displayName\": \"Partition Receiver Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Partition Recivier Fetch Size\": {\n+                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n+                                \"displayName\": \"Partition Receiver Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partition Recivier Fetch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Sending Host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sending Host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Sending Host Port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Sending Host Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-managed-identity\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The Azure sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -106540,850 +107596,689 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs destination\",\n+                                \"displayName\": \"Event Hub Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"Event Hub Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"poll-timeout\": {\n-                                \"defaultValue\": \"50 ms\",\n-                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n-                                \"displayName\": \"Poll Timeout\",\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-timeout\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"max-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"partitioning-key-attribute-name\": {\n+                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n+                                \"displayName\": \"Partitioning Key Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"sending-host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sending-host\",\n+                                \"name\": \"partitioning-key-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sending-host-port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"sending-host-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-managed-identity\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"record\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n+                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to Ignore\": {\n-                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Ignore\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Attributes to Log\": {\n-                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log\",\n+                            \"blob\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Log\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log FlowFile Properties\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n-                                \"displayName\": \"Log FlowFile Properties\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log FlowFile Properties\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n+                            \"delete-snapshots-option\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"trace\",\n-                                        \"value\": \"trace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"debug\",\n-                                        \"value\": \"debug\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"info\",\n-                                        \"value\": \"info\"\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE_SNAPSHOTS\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"error\",\n-                                        \"value\": \"error\"\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"DELETE_SNAPSHOTS_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the Attributes\",\n-                                \"displayName\": \"Log Level\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n+                                \"displayName\": \"Delete Snapshots Option\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Payload\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n-                                \"displayName\": \"Log Payload\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Payload\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Log prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n-                                \"displayName\": \"Log prefix\",\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Log prefix\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Output Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n-                                        \"displayName\": \"Line per Attribute\",\n-                                        \"value\": \"Line per Attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"Single Line\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Line per Attribute\",\n-                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n-                                \"displayName\": \"Output Format\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"attributes-to-ignore-regex\": {\n-                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-ignore-regex\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"attributes-to-log-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log by Regular Expression\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-log-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the CharacterSet to use\",\n-                                \"displayName\": \"Character Set\",\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n-                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                        \"typeDescription\": \"Deletes the provided blob from Azure Storage\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"log-level\": {\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n-                                \"displayName\": \"Log Level\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-level\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"log-message\": {\n-                                \"description\": \"The log message to emit\",\n-                                \"displayName\": \"Log message\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-message\",\n-                                \"required\": false,\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"log-prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n-                                \"displayName\": \"Log prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"log-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n-                        \"typeDescription\": \"Emits a log message at the specified log level\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the attribute to add to the FlowFile\",\n-                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"include-empty-values\": {\n+                            \"delete-snapshots-option\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Include null or blank values for keys that are null or blank\",\n-                                \"displayName\": \"Include Empty Values\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n+                                \"displayName\": \"Delete Snapshots Option\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-empty-values\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-service\": {\n-                                \"description\": \"The lookup service to use for attribute lookups\",\n-                                \"displayName\": \"Lookup Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"lookup\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n-                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Value To Lookup\",\n-                                \"value\": \"Valid Record Path\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"lookup-service\": {\n-                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n-                                \"displayName\": \"Lookup Service\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-path-lookup-miss-result-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-update-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n-                                        \"displayName\": \"Replace Existing Values\",\n-                                        \"value\": \"replace-existing-values\"\n-                                    },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n-                                        \"displayName\": \"Use Property\",\n-                                        \"value\": \"use-property\"\n+                                        \"dependentValues\": [\n+                                            \"file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n+                                        \"propertyName\": \"filesystem-object-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use-property\",\n-                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n-                                \"displayName\": \"Record Update Strategy\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-update-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"result-contents\": {\n+                            \"filesystem-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Entire Record\",\n-                                        \"value\": \"insert-entire-record\"\n+                                        \"description\": \"The object to be deleted is a file.\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"file\"\n                                     },\n                                     {\n-                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Record Fields\",\n-                                        \"value\": \"record-fields\"\n+                                        \"description\": \"The object to be deleted is a directory.\",\n+                                        \"displayName\": \"Directory\",\n+                                        \"value\": \"directory\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"insert-entire-record\",\n-                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n-                                \"displayName\": \"Record Result Contents\",\n+                                \"defaultValue\": \"file\",\n+                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n+                                \"displayName\": \"Filesystem Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"result-contents\",\n+                                \"name\": \"filesystem-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"result-record-path\": {\n-                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n-                                \"displayName\": \"Result RecordPath\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"result-record-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"routing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n-                                        \"displayName\": \"Route to 'success'\",\n-                                        \"value\": \"route-to-success\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles.\",\n-                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n-                                        \"value\": \"route-to-matched-unmatched\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"route-to-success\",\n-                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"database\",\n-                            \"db\",\n-                            \"enrichment\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"route\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n-                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -107391,637 +108286,245 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Correlation Attribute Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n+                            \"blob\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Correlation Attribute Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delimiter Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n-                                        \"displayName\": \"Do Not Use Delimiters\",\n-                                        \"value\": \"Do Not Use Delimiters\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n-                                        \"displayName\": \"Filename\",\n-                                        \"value\": \"Filename\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Use Delimiters\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n-                                \"displayName\": \"Delimiter Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delimiter Strategy\",\n+                                \"name\": \"blob\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Demarcator File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n-                                \"displayName\": \"Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Demarcator File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Footer File\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n-                                \"displayName\": \"Footer\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Footer File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Header File\": {\n+                            \"cse-key-id\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n+                                            \"SYMMETRIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n-                                \"displayName\": \"Header\",\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Header File\",\n+                                \"name\": \"cse-key-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Path\": {\n+                            \"cse-key-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\",\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n+                                        \"displayName\": \"SYMMETRIC\",\n+                                        \"value\": \"SYMMETRIC\"\n                                     }\n                                 ],\n-                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n-                                \"displayName\": \"Keep Path\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Path\",\n+                                \"name\": \"cse-key-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Bin Age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Bin Age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Group Size\": {\n+                            \"cse-symmetric-key-hex\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"SYMMETRIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n-                                \"displayName\": \"Maximum Group Size\",\n+                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Symmetric Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Group Size\",\n+                                \"name\": \"cse-symmetric-key-hex\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Maximum Number of Entries\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of files to include in a bundle\",\n-                                \"displayName\": \"Maximum Number of Entries\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Number of Entries\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n-                                        \"displayName\": \"TAR\",\n-                                        \"value\": \"TAR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v3\",\n-                                        \"value\": \"FlowFile Stream, v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v2\",\n-                                        \"value\": \"FlowFile Stream, v2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n-                                        \"displayName\": \"FlowFile Tar, v1\",\n-                                        \"value\": \"FlowFile Tar, v1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Binary Concatenation\",\n-                                        \"value\": \"Binary Concatenation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary Concatenation\",\n-                                \"description\": \"Determines the format that will be used to merge the content.\",\n-                                \"displayName\": \"Merge Format\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Format\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index> or alternatively (for backward compatibility purposes) <segment.identifier>, <segment.count>, and <segment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum Group Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The minimum size for the bundle\",\n-                                \"displayName\": \"Minimum Group Size\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Group Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum Number of Entries\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The minimum number of files to include in a bundle\",\n-                                \"displayName\": \"Minimum Number of Entries\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Number of Entries\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Tar Modified Time\": {\n-                                \"defaultValue\": \"${file.lastModifiedTime}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n-                                \"displayName\": \"Tar Modified Time\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Tar Modified Time\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mergecontent-metadata-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n-                                        \"displayName\": \"Use First Metadata\",\n-                                        \"value\": \"Use First Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Keep Only Common Metadata\",\n-                                        \"value\": \"Keep Only Common Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n-                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n-                                        \"displayName\": \"Ignore Metadata\",\n-                                        \"value\": \"Ignore Metadata\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Avro\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n-                                \"displayName\": \"Metadata Strategy\",\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mergecontent-metadata-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n-                                \"name\": \"segment.original.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n-                                \"name\": \"tar.permissions\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeRecord\",\n-                            \"org.apache.nifi.processors.standard.SegmentContent\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFile containing the merged content\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"archive\",\n-                            \"concatenation\",\n-                            \"content\",\n-                            \"correlation\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"merge\",\n-                            \"stream\",\n-                            \"tar\",\n-                            \"zip\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n-                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                        \"typeDescription\": \"Retrieves contents of an Azure Storage Blob, writing the contents to the content of the FlowFile\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n-                            },\n-                            {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n-                            },\n-                            {\n-                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n-                                \"name\": \"merge.uuid\"\n-                            },\n-                            {\n-                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n-                                \"name\": \"merge.reason\"\n+                                \"description\": \"The length of the blob fetched\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -108033,2269 +108536,1606 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"correlation-attribute-name\": {\n-                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"correlation-attribute-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-bin-age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-bin-size\": {\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n-                                \"displayName\": \"Maximum Bin Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-records\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"max-records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.bin.count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Bins\",\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.bin.count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"merge-strategy\": {\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"merge-strategy\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-bin-size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size of for the bin\",\n-                                \"displayName\": \"Minimum Bin Size\",\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-bin-size\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-records\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The minimum number of records to include in a bin\",\n-                                \"displayName\": \"Minimum Number of Records\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"min-records\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n+                                \"displayName\": \"Range Start\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n-                                \"name\": \"fragment.count\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFile containing the merged records\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"content\",\n-                            \"correlation\",\n-                            \"event\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n-                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n                             {\n-                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"End Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the end of the file.\",\n-                                \"displayName\": \"End Offset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"End Offset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remove All Content\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n-                                \"displayName\": \"Remove All Content\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove All Content\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Start Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n-                                \"displayName\": \"Start Offset\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Start Offset\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Processed flowfiles.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"binary\",\n-                            \"discard\",\n-                            \"keep\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n-                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Activity Restored Message\": {\n-                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n-                                \"displayName\": \"Activity Restored Message\",\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Activity Restored Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Continually Send Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n-                                \"displayName\": \"Continually Send Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Continually Send Messages\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy Attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n-                                \"displayName\": \"Copy Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Inactivity Message\": {\n-                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n-                                \"displayName\": \"Inactivity Message\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Inactivity Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Monitoring Scope\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"node\",\n-                                        \"value\": \"node\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"cluster\",\n-                                        \"value\": \"cluster\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"node\",\n-                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n-                                \"displayName\": \"Monitoring Scope\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Monitoring Scope\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reporting Node\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"all\",\n-                                        \"value\": \"all\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"primary\",\n-                                        \"value\": \"primary\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n-                                \"displayName\": \"Reporting Node\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Node\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Threshold Duration\": {\n-                                \"defaultValue\": \"5 min\",\n-                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n-                                \"displayName\": \"Threshold Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Threshold Duration\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide.If 'Copy Attribute' is set to true, then flow file attributes are also persisted.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n-                                \"name\": \"inactive\"\n-                            },\n-                            {\n-                                \"description\": \"All incoming FlowFiles are routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n-                                \"name\": \"activity.restored\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"active\",\n-                            \"activity\",\n-                            \"detection\",\n-                            \"flow\",\n-                            \"inactive\",\n-                            \"monitor\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n-                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n-                                \"name\": \"inactivityStartMillis\"\n                             },\n-                            {\n-                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n-                                \"name\": \"inactivityDurationMillis\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"attribute-cache-regex\": {\n-                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n-                                \"displayName\": \"Attribute Cache Regex\",\n+                            \"number-of-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-cache-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"number-of-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n-                                \"displayName\": \"Release Signal Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"signal-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n-                                \"displayName\": \"Signal Buffer Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signal-buffer-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"signal-counter-delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n-                                \"displayName\": \"Signal Counter Delta\",\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-delta\",\n-                                \"required\": true,\n+                                \"name\": \"range-length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n-                                \"required\": true,\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Wait\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"notify\",\n-                            \"release\",\n-                            \"signal\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n-                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Fetch the provided file from Azure Data Lake Storage\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n-                                \"name\": \"notified\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.statusCode\"\n+                            },\n+                            {\n+                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorCode\"\n+                            },\n+                            {\n+                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n-                                \"displayName\": \"Append raw message to JSON\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"DATETIME_REPRESENTATION\": {\n-                                \"defaultValue\": \"en-US\",\n-                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n-                                \"displayName\": \"DateTime Locale\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DATETIME_REPRESENTATION\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"FIELDS_DESTINATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n-                                \"displayName\": \"Include custom extensions\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TIME_REPRESENTATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Local Timezone (system Default)\",\n-                                        \"value\": \"Local Timezone (system Default)\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local Timezone (system Default)\",\n-                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n-                                \"displayName\": \"Timezone\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"TIME_REPRESENTATION\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"VALIDATE_DATA\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to true, the event will be validated against the CEF standard (revision 23). If the event is invalid, the FlowFile will be routed to the failure relationship. If this property is set to false, the event will be processed without validating the data.\",\n-                                \"displayName\": \"Validate the CEF event\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"VALIDATE_DATA\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"cef\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"system\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n-                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The version of the CEF message.\",\n-                                \"name\": \"cef.header.version\"\n-                            },\n-                            {\n-                                \"description\": \"The Device Vendor of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVendor\"\n-                            },\n-                            {\n-                                \"description\": \"The Device Product of the CEF message.\",\n-                                \"name\": \"cef.header.deviceProduct\"\n-                            },\n-                            {\n-                                \"description\": \"The Device Version of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVersion\"\n-                            },\n-                            {\n-                                \"description\": \"The Device Event Class ID of the CEF message.\",\n-                                \"name\": \"cef.header.deviceEventClassId\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the CEF message.\",\n-                                \"name\": \"cef.header.name\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the CEF message.\",\n-                                \"name\": \"cef.header.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The key and value generated by the parsing of the message.\",\n-                                \"name\": \"cef.extension.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"system\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n                             },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"include_policy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n-                                \"displayName\": \"Include Message Body in Attributes\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include_policy\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"nil_policy\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The missing field will not have an attribute added.\",\n-                                        \"displayName\": \"OMIT\",\n-                                        \"value\": \"OMIT\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an empty attribute added.\",\n-                                        \"displayName\": \"NULL\",\n-                                        \"value\": \"NULL\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n-                                        \"displayName\": \"DASH\",\n-                                        \"value\": \"DASH\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NULL\",\n-                                \"description\": \"Defines how NIL values are handled for header fields.\",\n-                                \"displayName\": \"NIL Policy\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nil_policy\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"syslog5424\",\n-                            \"system\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n-                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The appname of the Syslog message.\",\n-                                \"name\": \"syslog.appname\"\n-                            },\n-                            {\n-                                \"description\": \"The procid of the Syslog message.\",\n-                                \"name\": \"syslog.procid\"\n                             },\n-                            {\n-                                \"description\": \"The messageid the Syslog message.\",\n-                                \"name\": \"syslog.messageid\"\n-                            },\n-                            {\n-                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n-                                \"name\": \"syslog.structuredData\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                            \"prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associted RecordPath.\",\n-                                \"value\": \"A RecordPath that points to a field in the Record.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored. This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run.  State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"bin\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"rpath\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates one or more RecordPaths against the each record in the incoming FlowFile. Each record is then grouped with other \\\"like records\\\" and a FlowFile is created for each group of \\\"like records.\\\" What it means for two records to be \\\"like records\\\" is determined by user-defined properties. The user is required to enter at least one user-defined property whose value is a RecordPath. Two records are considered alike if they have the same value for all configured RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage.  This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The name of the Azure container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure blob\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for blob content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"Secondary location for blob content\",\n+                                \"name\": \"azure.secondaryUri\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Etag for the Azure blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n                             {\n-                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The timestamp in Azure for the blob\",\n+                                \"name\": \"azure.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"MimeType of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n                             },\n                             {\n-                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n-                                \"name\": \"<dynamic property name>\"\n+                                \"description\": \"This is the type of blob and can be either page or block type\",\n+                                \"name\": \"azure.blobtype\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.processors.standard.InvokeHTTP\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to Send as HTTP Headers (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as HTTP Headers\",\n-                                \"displayName\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Send as HTTP Headers (Regex)\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Level\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Determines the GZIP Compression Level to use when sending the file; the value must be in the range of 0-9. A value of 0 indicates that the file will not be GZIP'ed\",\n-                                \"displayName\": \"Compression Level\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait when attempting to connect to the remote server before giving up\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"The Content-Type to specify for the content of the FlowFile being POSTed if Send as FlowFile is false. In the case of an empty value after evaluating an expression language expression, Content-Type defaults to application/octet-stream\",\n-                                \"displayName\": \"Content-Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content-Type\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"How long to wait between receiving segments of data from the remote server before giving up and discarding the partial file\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"100 MB\",\n-                                \"description\": \"If the Send as FlowFile property is true, specifies the max data size for a batch of FlowFiles to send in a single HTTP POST. If not specified, each FlowFile will be sent separately. If the Send as FlowFile property is false, this property is ignored\",\n-                                \"displayName\": \"Max Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Data to Post per Second\": {\n-                                \"description\": \"The maximum amount of data to send per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n-                                \"displayName\": \"Max Data to Post per Second\",\n+                            \"blob-name-prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Blob Name Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Post per Second\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"blob-name-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password required to access the URL\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Send as FlowFile\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will package the FlowFile's contents and attributes together and send the FlowFile Package; otherwise, will send only the FlowFile's content\",\n-                                \"displayName\": \"Send as FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send as FlowFile\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"URL\": {\n-                                \"description\": \"The URL to POST to. The URL may be defined using the Attribute Expression Language. A separate connection pool will be created for each unique host:port combination.\",\n-                                \"displayName\": \"URL\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Chunked Encoding\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether or not to use Chunked Encoding to send the data. This property is ignored in the event the contents are compressed or sent as FlowFiles.\",\n-                                \"displayName\": \"Use Chunked Encoding\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Chunked Encoding\",\n-                                \"required\": false,\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"User Agent\": {\n-                                \"defaultValue\": \"Apache-HttpClient/4.5.14 (Java/1.8.0_362)\",\n-                                \"description\": \"What to report as the User Agent when we connect to the remote server\",\n-                                \"displayName\": \"User Agent\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"User Agent\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username required to access the URL\",\n-                                \"displayName\": \"Username\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that are successfully send will be transferred to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that fail to send will transferred to failure\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"http\",\n-                            \"https\",\n-                            \"remote\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PostHTTP\",\n-                        \"typeDescription\": \"Please be aware this processor is deprecated and may be removed in the near future. Use InvokeHTTP instead. Performs an HTTP Post with the content of the FlowFile. Uses a connection pool with max number of connections equal to the number of possible endpoints multiplied by the Concurrent Tasks configuration.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Data Record Path\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n-                                \"displayName\": \"Data Record Path\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Record Path\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type Record Path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE.\",\n-                                \"displayName\": \"Statement Type Record Path\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type Record Path\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-allow-multiple-statements\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Allow Multiple SQL Statements\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-allow-multiple-statements\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-catalog-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-dcbp-service\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"put-db-record-field-containing-sql\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Field Containing SQL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-field-containing-sql\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-max-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies maximum number of statements to be included in each batch. Zero means the batch size is not limited, which can cause memory usage issues for a large number of statements.\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-max-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"put-db-record-query-timeout\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-identifiers\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-identifiers\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-table-identifiers\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-record-reader\",\n-                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"put-db-record-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-schema-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-statement-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPSERT\",\n-                                        \"value\": \"UPSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT_IGNORE\",\n-                                        \"value\": \"INSERT_IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use Record Path\",\n-                                        \"value\": \"Use Record Path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n-                                \"displayName\": \"Statement Type\",\n+                            \"file-filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-statement-type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"file-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-table-name\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-translate-field-names\": {\n+                            \"include-temporary-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n+                                \"displayName\": \"Include Temporary Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-translate-field-names\",\n-                                \"required\": false,\n+                                \"name\": \"include-temporary-files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-column-behavior\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-column-behavior\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"path-filter\": {\n+                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"path-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-field-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-field-behavior\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"put-db-record-update-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\",\n-                                            \"UPSERT\",\n-                                            \"UPDATE\",\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-update-keys\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"recurse-subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"name\": \"recurse-subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n-                                \"name\": \"statement.type\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"insert\",\n-                            \"jdbc\",\n-                            \"put\",\n-                            \"record\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n-                                \"name\": \"putdatabaserecord.error\"\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The full path of the Azure File\",\n+                                \"name\": \"azure.filePath\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the Azure File\",\n+                                \"name\": \"azure.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The ETag of the Azure File\",\n+                                \"name\": \"azure.etag\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Cache update strategy\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n-                                        \"displayName\": \"Replace if present\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n                                         \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n-                                \"displayName\": \"Cache update strategy\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache update strategy\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache flow files\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n+                                \"displayName\": \"Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n+                                \"displayName\": \"Destination Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Max cache entry size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum amount of data to put into cache\",\n-                                \"displayName\": \"Max cache entry size\",\n+                            \"source-directory-name\": {\n+                                \"defaultValue\": \"${azure.directory}\",\n+                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n+                                \"displayName\": \"Source Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max cache entry size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"source-directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\n+                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n+                                \"displayName\": \"Source Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"source-filesystem-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"put\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n-                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n-                                \"name\": \"cached\"\n+                                \"description\": \"The name of the source Azure File System\",\n+                                \"name\": \"azure.source.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the source Azure Directory\",\n+                                \"name\": \"azure.source.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -110303,360 +110143,267 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"mail.propertyName\",\n-                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n                         ],\n+                        \"deprecationReason\": \"Processor depends on legacy Microsoft Azure SDK\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attach File\": {\n+                            \"azure-create-container\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n-                                \"displayName\": \"Attach File\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attach File\",\n+                                \"name\": \"azure-create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"BCC\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"BCC\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"CC\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n+                            \"blob\": {\n+                                \"description\": \"The filename of the blob\",\n+                                \"displayName\": \"Blob\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"CC\",\n-                                \"required\": false,\n+                                \"name\": \"blob\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Type\": {\n-                                \"defaultValue\": \"text/plain\",\n-                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n-                                \"displayName\": \"Content Type\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"From\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n+                            \"cse-key-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SYMMETRIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"From\",\n-                                \"required\": true,\n+                                \"name\": \"cse-key-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include All Attributes In Message\": {\n+                            \"cse-key-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The blobs sent to Azure are not encrypted.\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The blobs sent to Azure are encrypted using a symmetric algorithm.\",\n+                                        \"displayName\": \"SYMMETRIC\",\n+                                        \"value\": \"SYMMETRIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n-                                \"displayName\": \"Include All Attributes In Message\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include All Attributes In Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message\": {\n-                                \"description\": \"The body of the email message\",\n-                                \"displayName\": \"Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Auth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Hostname\": {\n-                                \"description\": \"The hostname of the SMTP host\",\n-                                \"displayName\": \"SMTP Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Hostname\",\n+                                \"name\": \"cse-key-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SMTP Password\": {\n+                            \"cse-symmetric-key-hex\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"SYMMETRIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"cse-key-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n+                                \"description\": \"When using symmetric client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Symmetric Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cse-symmetric-key-hex\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"SMTP Port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Socket Factory\": {\n-                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n-                                \"description\": \"Socket Factory to use for SMTP Connection\",\n-                                \"displayName\": \"SMTP Socket Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Socket Factory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP TLS\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP TLS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Username\": {\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP X-Mailer Header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"SMTP X-Mailer Header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Subject\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"To\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"To\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"email-ff-content-as-message\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n-                                \"displayName\": \"Flow file content as message\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"email-ff-content-as-message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"input-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n-                                \"displayName\": \"Input Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n-                                \"required\": true,\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"email\",\n-                            \"notify\",\n-                            \"put\",\n-                            \"smtp\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n-                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage\",\n+                        \"typeDescription\": \"Puts content into an Azure Storage Blob\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure blob\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for blob content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"Etag for the Azure blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp in Azure for the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -110664,431 +110411,377 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"pre.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            },\n-                            {\n-                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"post.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n+                                        \"description\": \"Client-Side Encryption disabled\",\n                                         \"displayName\": \"NONE\",\n                                         \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"IGNORE_RESOLUTION\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace blob contents if the blob already exist\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"REPLACE_RESOLUTION\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                                \"defaultValue\": \"FAIL_RESOLUTION\",\n+                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dot Rename\": {\n+                            \"create-container\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n                             },\n-                            \"Reject Zero-Byte Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n+                                \"name\": \"azure.ignored\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n+                            \"base-temporary-path\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n+                                \"displayName\": \"Base Temporary Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n+                                \"name\": \"base-temporary-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -111097,245 +110790,287 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"put\",\n-                            \"remote\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Puts content into an Azure Data Lake Storage Gen 2\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n                         ],\n+                        \"deprecationReason\": \"\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Missing Directories\": {\n+                            \"auto-delete-messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n+                                \"name\": \"auto-delete-messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n-                                \"displayName\": \"Directory\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"The number of messages to be retrieved from the queue.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Group\": {\n-                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n-                                \"displayName\": \"Group\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Group\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n-                                \"displayName\": \"Last Modified Time\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Maximum File Count\": {\n-                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n-                                \"displayName\": \"Maximum File Count\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Count\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n-                                \"displayName\": \"Owner\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Permissions\": {\n-                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n-                                \"displayName\": \"Permissions\",\n+                            \"storage-queue-name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"name\": \"storage-queue-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"visibility-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n+                                \"displayName\": \"Visibility Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"visibility-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\"\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"put\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\",\n+                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n+                                \"name\": \"azure.queue.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message was inserted into the queue storage\",\n+                                \"name\": \"azure.queue.insertionTime\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message will expire from the queue storage\",\n+                                \"name\": \"azure.queue.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the retrieved message\",\n+                                \"name\": \"azure.queue.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The pop receipt of the retrieved message\",\n+                                \"name\": \"azure.queue.popReceipt\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -111343,1221 +111078,1396 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"deprecated\": true,\n-                        \"deprecationAlternatives\": [\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n-                        \"deprecationReason\": \"This processor is deprecated and may be removed in future releases.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client ID Prefix\": {\n-                                \"description\": \"A human-readable ID that can be used to associate connections with yourself so that the maintainers of the JMS Server know who to contact if problems arise\",\n-                                \"displayName\": \"Client ID Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client ID Prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait when attempting to receive a message before giving up and assuming failure\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Copy Attributes to JMS Properties\": {\n+                            \"Auto Delete Messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not FlowFile Attributes should be translated into JMS Message Properties. If true, all attributes starting with 'jms.' will be set as Properties on the JMS Message (without the 'jms.' prefix). If an attribute exists that starts with the same value but ends in '.type', that attribute will be used to determine the JMS Message Property type.\",\n-                                \"displayName\": \"Copy Attributes to JMS Properties\",\n+                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes to JMS Properties\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Topic or queue to use\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Credentials Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Queue\",\n-                                        \"value\": \"Queue\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Topic\",\n-                                        \"value\": \"Topic\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Queue\",\n-                                \"description\": \"The type of the JMS Destination to use\",\n-                                \"displayName\": \"Destination Type\",\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"The number of messages to be retrieved from the queue.\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"JMS Provider\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ActiveMQ\",\n-                                        \"value\": \"ActiveMQ\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ActiveMQ\",\n-                                \"description\": \"The Provider used for the JMS Server\",\n-                                \"displayName\": \"JMS Provider\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JMS Provider\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum amount of data that can be buffered for a JMS Message. If a FlowFile's size exceeds this value, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Buffer Size\",\n+                                \"name\": \"Request Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to pull/push in a single iteration of the processor\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n+                                \"displayName\": \"Visibility Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The Priority of the Message\",\n-                                \"displayName\": \"Message Priority\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Time to Live\": {\n-                                \"description\": \"The amount of time that the message should live on the destination before being removed; if not specified, the message will never expire.\",\n-                                \"displayName\": \"Message Time to Live\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Time to Live\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Message Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"byte\",\n-                                        \"value\": \"byte\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"stream\",\n-                                        \"value\": \"stream\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"map\",\n-                                        \"value\": \"map\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"empty\",\n-                                        \"value\": \"empty\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte\",\n-                                \"description\": \"The Type of JMS Message to Construct\",\n-                                \"displayName\": \"Message Type\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Type\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n+                                \"name\": \"azure.queue.uri\"\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization\",\n-                                \"displayName\": \"Password\",\n+                            {\n+                                \"description\": \"The time when the message was inserted into the queue storage\",\n+                                \"name\": \"azure.queue.insertionTime\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message will expire from the queue storage\",\n+                                \"name\": \"azure.queue.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the retrieved message\",\n+                                \"name\": \"azure.queue.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The pop receipt of the retrieved message\",\n+                                \"name\": \"azure.queue.popReceipt\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationAlternatives\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n+                        ],\n+                        \"deprecationReason\": \"\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Reply-To Queue\": {\n-                                \"description\": \"The name of the queue to which a reply to should be added\",\n-                                \"displayName\": \"Reply-To Queue\",\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions. Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, the preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Storage Account Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Reply-To Queue\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"The Controller Service used to obtain Azure Storage Credentials. Instead of the processor level properties, the credentials can be configured here through a common/shared controller service, which is the preferred way. The 'Lookup' version of the service can also be used to select the credentials dynamically at runtime based on a FlowFile attribute (if the processor has FlowFile input).\",\n+                                \"displayName\": \"Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"URL\": {\n-                                \"description\": \"The URL of the JMS Server\",\n-                                \"displayName\": \"URL\",\n+                            \"storage-endpoint-suffix\": {\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). The preferred way is to configure them through a controller service specified in the Storage Credentials property. The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials can also be looked up dynamically with the 'Lookup' version of the service.\",\n+                                \"displayName\": \"Common Storage Account Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-queue-name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-queue-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"description\": \"Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key. There are certain risks in allowing the SAS token to be stored as a flowfile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a flowfile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"time-to-live\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Maximum time to allow the message to be in the queue. If left empty, the default value of 7 days will be used.\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"URL\",\n-                                \"required\": true,\n+                                \"name\": \"time-to-live\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username used for authentication and authorization\",\n-                                \"displayName\": \"Username\",\n+                            \"visibility-delay\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"The length of time during which the message will be invisible, starting when it is added to the queue. This value must be greater than or equal to 0 and less than the TTL value.\",\n+                                \"displayName\": \"Visibility Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"visibility-delay\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetJMSQueue\",\n-                            \"org.apache.nifi.processors.standard.GetJMSTopic\"\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be routed to the JMS destination are routed to this relationship\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"jms\",\n-                            \"put\",\n-                            \"send\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutJMS\",\n-                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends the message to a ActiveMQ JMS Server.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"put-record-include-zero-record-results\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n-                                \"displayName\": \"Include Zero Record Results\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-include-zero-record-results\",\n+                                \"name\": \"Credentials Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Message Time To Live\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Maximum time to allow the message to be in the queue\",\n+                                \"displayName\": \"Message Time To Live\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Time To Live\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-reader\",\n+                                \"name\": \"Request Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-record-sink\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n-                                \"displayName\": \"Record Destination Service\",\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n+                                \"displayName\": \"Visibility Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-sink\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: SOCKS, HTTP In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"put\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n-                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Disables directory listings before operations which might fail, such as configurations which create directory structures.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"value\": \"true or false\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Application ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n                                 \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n+                                \"name\": \"Instance ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Instance URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Job Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifiprovenance\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Disable Directory Listing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each event.\",\n+                                \"displayName\": \"Platform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dot Rename\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n+                                \"name\": \"include-null-values\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"s2s-prov-task-event-filter\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Event Type to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"s2s-prov-task-event-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Event Type to Exclude\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"s2s-prov-task-id-filter\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component ID to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"s2s-prov-task-id-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component ID to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n+                            \"s2s-prov-task-name-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Name to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Algorithms Allowed\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                            \"s2s-prov-task-name-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Name to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n+                            \"s2s-prov-task-type-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Type to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"s2s-prov-task-type-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Type to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"start-position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n+                                        \"displayName\": \"Beginning of Stream\",\n+                                        \"value\": \"beginning-of-stream\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n+                                        \"displayName\": \"End of Stream\",\n+                                        \"value\": \"end-of-stream\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"beginning-of-stream\",\n+                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n+                                \"displayName\": \"Start Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"start-position\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"provenace\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Application ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Instance ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Job Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifimetrics\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Process group ID(s)\": {\n+                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n+                                \"displayName\": \"Process group ID(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Process group ID(s)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Reject Zero-Byte Files\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"name\": \"Send JVM Metrics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"metrics\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n+                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HBase Cache Table Name\": {\n+                                \"description\": \"Name of the table on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Cache Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Cache Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HBase Client Service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HBase Client Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"HBase Column Family\": {\n+                                \"defaultValue\": \"f\",\n+                                \"description\": \"Name of the column family on HBase to use for the cache.\",\n+                                \"displayName\": \"HBase Column Family\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Family\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HBase Column Qualifier\": {\n+                                \"defaultValue\": \"q\",\n+                                \"description\": \"Name of the column qualifier on HBase to use for the cache\",\n+                                \"displayName\": \"HBase Column Qualifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Column Qualifier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-authorizations\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Group\": {\n-                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n-                                \"displayName\": \"Remote Group\",\n+                            \"hbase-cache-visibility-expression\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"The default visibility expression to apply to cells when visibility expression support is enabled.\",\n+                                \"displayName\": \"Visibility Expression\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hbase-cache-visibility-expression\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n                             },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n-                                \"displayName\": \"Remote Owner\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.hbase.HBase_1_1_2_ClientService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"hbase\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ClientMapCacheService\",\n+                        \"typeDescription\": \"Provides the ability to use an HBase table as a cache, in place of a DistributedMapCache. Uses a HBase_1_1_2_ClientService controller to communicate with HBase.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be set on the HBase configuration after loading any provided configuration files.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name of an HBase configuration property.\",\n+                                \"value\": \"The value of the given HBase configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"HBase Client Retries\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of times the HBase client will retry connecting. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"HBase Client Retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Owner\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HBase Client Retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"Hadoop Configuration Files\": {\n+                                \"description\": \"Comma-separated list of Hadoop Configuration files, such as hbase-site.xml and core-site.xml for kerberos, including full paths to the files.\",\n+                                \"displayName\": \"Hadoop Configuration Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Files\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n+                            \"Phoenix Client JAR Location\": {\n+                                \"description\": \"The full path to the Phoenix client JAR. Required if Phoenix is installed on top of HBase.\",\n+                                \"displayName\": \"Phoenix Client JAR Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Phoenix Client JAR Location\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                            \"ZooKeeper Client Port\": {\n+                                \"description\": \"The port on which ZooKeeper is accepting client connections. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Client Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Client Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"ZooKeeper Quorum\": {\n+                                \"description\": \"Comma-separated list of ZooKeeper hosts for HBase. Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper Quorum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper Quorum\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS + AuthN, HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ZooKeeper ZNode Parent\": {\n+                                \"description\": \"The ZooKeeper ZNode Parent value for HBase (example: /hbase). Required if Hadoop Configuration Files are not provided.\",\n+                                \"displayName\": \"ZooKeeper ZNode Parent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"ZooKeeper ZNode Parent\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"sftp\"\n+                            \"client\",\n+                            \"hbase\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n+                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ClientService\",\n+                        \"typeDescription\": \"Implementation of HBaseClientService using the HBase 1.1.x client. Although this service was originally built with the 1.1.2 client and has 1_1_2 in it's name, the client library has since been upgraded to 1.1.13 to leverage bug fixes. This service can be configured by providing a comma-separated list of configuration files, or by specifying values for the other properties. If configuration files are provided, they will be loaded first, and the values of the additional properties will override the values from the configuration files. In addition, any user defined properties on the processor will also be passed to the HBase configuration.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"hb-lu-authorizations\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"hb-lu-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n+                                \"name\": \"hb-lu-charset\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Obtain Generated Keys\": {\n+                            \"hb-lu-list-return-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Return the row as a list of the column qualifiers (keys)\",\n+                                        \"displayName\": \"List of keys\",\n+                                        \"value\": \"key_list\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Return the row as a list of the values associated with each column qualifier.\",\n+                                        \"displayName\": \"List of values\",\n+                                        \"value\": \"value_list\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n-                                \"displayName\": \"Obtain Generated Keys\",\n+                                \"defaultValue\": \"key_list\",\n+                                \"description\": \"Choose whether to return a list of the keys or a list of the values for the supplied row key.\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Obtain Generated Keys\",\n-                                \"required\": false,\n+                                \"name\": \"hb-lu-list-return-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Support Fragmented Transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n-                                \"displayName\": \"Support Fragmented Transactions\",\n+                            \"hb-lu-return-cols\": {\n+                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n+                                \"displayName\": \"Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Support Fragmented Transactions\",\n+                                \"name\": \"hb-lu-return-cols\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transaction Timeout\": {\n-                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n-                                \"displayName\": \"Transaction Timeout\",\n+                            \"hb-lu-table-name\": {\n+                                \"description\": \"The name of the table where look ups will be run.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transaction Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"hb-lu-table-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\n+                            \"hbase-client-service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\n+                                \"name\": \"hbase-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_ListLookupService\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hbase_1_1_2-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hb-lu-authorizations\": {\n+                                \"description\": \"The list of authorization tokens to be used with cell visibility if it is enabled. These will be used to override the default authorization list for the user accessing HBase.\",\n+                                \"displayName\": \"Authorizations\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-authorizations\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putsql-sql-statement\": {\n-                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n-                                \"displayName\": \"SQL Statement\",\n+                            \"hb-lu-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set used to decode bytes retrieved from HBase.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"putsql-sql-statement\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hb-lu-return-cols\": {\n+                                \"description\": \"A comma-separated list of \\\\\\\"<colFamily>:<colQualifier>\\\\\\\" pairs to return when scanning. To return all columns for a given family, leave off the qualifier such as \\\\\\\"<colFamily1>,<colFamily2>\\\\\\\".\",\n+                                \"displayName\": \"Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hb-lu-return-cols\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n+                            \"hb-lu-table-name\": {\n+                                \"description\": \"The name of the table where look ups will be run.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n+                                \"name\": \"hb-lu-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n                             },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n+                            \"hbase-client-service\": {\n+                                \"description\": \"Specifies the HBase Client Controller Service to use for accessing HBase.\",\n+                                \"displayName\": \"HBase Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hbase-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.hbase.HBaseClientService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n-                                \"name\": \"success\"\n-                            },\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"hbase\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"service\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n-                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n-                                \"name\": \"sql.generated.key\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.hbase.HBase_1_1_2_RecordLookupService\",\n+                        \"typeDescription\": \"A lookup service that retrieves one or more columns from HBase and returns them as a record. The lookup coordinates must contain 'rowKey' which will be the HBase row id.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hadoop-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -112569,235 +112479,245 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The IP address or hostname of the Syslog server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"5 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Message Body\": {\n-                                \"description\": \"The body for the Syslog messages.\",\n-                                \"displayName\": \"Message Body\",\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Body\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The hostname for the Syslog messages.\",\n-                                \"displayName\": \"Message Hostname\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n-                                \"displayName\": \"Message Priority\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Message Timestamp\": {\n-                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n-                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n-                                \"displayName\": \"Message Timestamp\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Timestamp\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Message Version\": {\n-                                \"description\": \"The version for the Syslog messages.\",\n-                                \"displayName\": \"Message Version\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Message Version\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"compression type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"RECORD\",\n+                                        \"value\": \"RECORD\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BLOCK\",\n+                                        \"value\": \"BLOCK\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"description\": \"Type of compression to use when creating Sequence File\",\n+                                \"displayName\": \"Compression type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n-                                \"required\": true,\n+                                \"name\": \"compression type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n+                                \"description\": \"Generated Sequence Files are sent to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n+                                \"description\": \"Incoming files that failed to generate a Sequence File are sent to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n-                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"put\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"create\",\n+                            \"hadoop\",\n+                            \"sequence file\",\n+                            \"sequencefile\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n-                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.CreateHadoopSequenceFile\",\n+                        \"typeDescription\": \"Creates Hadoop Sequence Files from incoming flow files\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -112805,172 +112725,230 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Per FlowFile\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n-                                \"displayName\": \"Connection Per FlowFile\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Per FlowFile\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the destination.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Outgoing Message Delimiter\": {\n-                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n-                                \"displayName\": \"Outgoing Message Delimiter\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Outgoing Message Delimiter\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port on the destination.\",\n-                                \"displayName\": \"Port\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"file_or_directory\": {\n+                                \"description\": \"The HDFS file or directory to delete. A wildcard expression may be used to only delete certain files\",\n+                                \"displayName\": \"Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"file_or_directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be sent over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"recursive\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Remove contents of a non-empty directory recursively\",\n+                                \"displayName\": \"Recursive\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"recursive\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenTCP\",\n-                            \"org.apache.nifi.processors.standard.PutUDP\"\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"When an incoming flowfile is used then if there are no errors invoking delete the flowfile will route here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"description\": \"When an incoming flowfile is used and there is a failure while deleting then the flowfile will route here.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"tcp\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"delete\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"remove\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n-                        \"typeDescription\": \"The PutTCP processor receives a FlowFile and transmits the FlowFile content over a TCP connection to the configured TCP server. By default, the FlowFiles are transmitted over the same TCP connection (or pool of TCP connections if multiple input threads are configured). To assist the TCP server with determining message boundaries, an optional \\\"Outgoing Message Delimiter\\\" string can be configured which is appended to the end of each FlowFiles content when it is transmitted over the TCP connection. An optional \\\"Connection Per FlowFile\\\" parameter can be specified to change the behaviour so that each FlowFiles content is transmitted over a single TCP connection which is opened when the FlowFile is received and closed after the FlowFile has been sent. This option should only be used for low message volume scenarios, otherwise the platform may run out of TCP sockets.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.DeleteHDFS\",\n+                        \"typeDescription\": \"Deletes one or more files or directories from HDFS. The path can be provided as an attribute from an incoming FlowFile, or a statically set path that is periodically removed. If this processor has an incoming connection, itwill ignore running on a periodic basis and instead rely on incoming FlowFiles to trigger a delete. Note that you may use a wildcard character to match multiple files or directories. If there are no incoming connections no flowfiles will be transfered to any output relationships.  If there is an incoming flowfile then provided there are no detected failures it will be transferred to success otherwise it will be sent to false. If knowledge of globbed files deleted is necessary use ListHDFS first to produce a specific list of files to delete. \",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"HDFS file to be deleted. If multiple files are deleted, then only the last filename is set.\",\n+                                \"name\": \"hdfs.filename\"\n+                            },\n+                            {\n+                                \"description\": \"HDFS Path specified in the delete request. If multiple paths are deleted, then only the last path is set.\",\n+                                \"name\": \"hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file to be deleted.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"HDFS error message related to the hdfs.error.code\",\n+                                \"name\": \"hdfs.error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -112978,5759 +112956,5791 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the destination.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Compression codec\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Compression codec\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HDFS Filename\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The name of the HDFS file to retrieve\",\n+                                \"displayName\": \"HDFS Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"HDFS Filename\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port on the destination.\",\n-                                \"displayName\": \"Port\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenUDP\",\n-                            \"org.apache.nifi.processors.standard.PutTCP\"\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles will be routed to this relationship once they have been updated with the content of the HDFS file\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieve due to a communications failure. This generally indicates that the Fetch should be tried again.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles will be routed to this relationship if the content of the HDFS file cannot be retrieved and trying again will likely not be helpful. This would occur, for instance, if the file is not found or if there is a permissions issue\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"udp\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"hcfs\",\n+                            \"hdfs\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n-                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n-                        \"version\": \"1.22.0\"\n+                        \"type\": \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                        \"typeDescription\": \"Retrieves a file from HDFS. The content of the incoming FlowFile is replaced by the content of the file in HDFS. The file in HDFS is left intact without any changes being made to it.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When a FlowFile is routed to 'failure', this attribute is added indicating why the file could not be fetched from HDFS\",\n+                                \"name\": \"hdfs.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"Compression codec\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-fetch-sql-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-normalize\": {\n+                            \"Filter Match Name Only\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n+                                \"displayName\": \"Filter Match Name Only\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-normalize\",\n+                                \"name\": \"Filter Match Name Only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"IO Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-load-strategy\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transaction-isolation-level\": {\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait between performing directory listings\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_NONE\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n-                                        \"value\": \"8\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n-                                \"displayName\": \"Transaction Isolation Level\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"transaction-isolation-level\",\n-                                \"required\": false,\n+                                \"name\": \"Recurse Subdirectories\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                        \"typeDescription\": \"Fetch files from Hadoop Distributed File System (HDFS) into FlowFiles. This Processor will delete the file from HDFS after fetching it.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Fetch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"gethdfsfileinfo-batch-size\": {\n+                                \"description\": \"Number of records to put into an output flowfile when 'Destination' is set to 'Content' and 'Group Results' is set to 'None'\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gethdfsfileinfo-batch-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"gethdfsfileinfo-destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"Details of given HDFS object will be stored in attributes of flowfile. WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases.\",\n+                                        \"displayName\": \"Attributes\",\n+                                        \"value\": \"gethdfsfileinfo-dest-attr\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"Details of given HDFS object will be stored in a content in JSON format\",\n+                                        \"displayName\": \"Content\",\n+                                        \"value\": \"gethdfsfileinfo-dest-content\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"gethdfsfileinfo-dest-content\",\n+                                \"description\": \"Sets the destination for the resutls. When set to 'Content', attributes of flowfile won't be used for storing results. \",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"gethdfsfileinfo-destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n+                            \"gethdfsfileinfo-dir-filter\": {\n+                                \"description\": \"Regex. Only directories whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n+                                \"displayName\": \"Directory Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"db-fetch-sql-query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gethdfsfileinfo-dir-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n+                            \"gethdfsfileinfo-file-exclude-filter\": {\n+                                \"description\": \"Regex. Files whose names match the given regular expression will not be picked up. If not provided, any filter won't be apply (performance considerations).\",\n+                                \"displayName\": \"Exclude Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n+                                \"name\": \"gethdfsfileinfo-file-exclude-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"gethdfsfileinfo-file-filter\": {\n+                                \"description\": \"Regex. Only files whose names match the given regular expression will be picked up. If not provided, any filter would be apply (performance considerations).\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gethdfsfileinfo-file-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"gethdfsfileinfo-full-path\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"A directory to start listing from, or a file's full path.\",\n+                                \"displayName\": \"Full path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"gethdfsfileinfo-full-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n+                            \"gethdfsfileinfo-group\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Group all results into a single flowfile.\",\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"gethdfsfileinfo-group-all\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"initial-load-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"Group HDFS objects by their parent directories only. Processor will generate flowfile for each directory (if recursive). If 'Recurse Subdirectories' property set to 'false', then will have the same effect as 'All'\",\n+                                        \"displayName\": \"Parent Directory\",\n+                                        \"value\": \"gethdfsfileinfo-group-parent-dir\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"Don't group results. Generate flowfile per each HDFS object.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"gethdfsfileinfo-group-none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"gethdfsfileinfo-group-all\",\n+                                \"description\": \"Groups HDFS objects\",\n+                                \"displayName\": \"Group Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"gethdfsfileinfo-group\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-normalize\": {\n+                            \"gethdfsfileinfo-ignore-dotted-dirs\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, directories whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-normalize\",\n+                                \"name\": \"gethdfsfileinfo-ignore-dotted-dirs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Variable Registry may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the relationship to route data to\",\n-                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n-                            \"name\": \"<Property Name>\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"cache-schema\": {\n+                            \"gethdfsfileinfo-ignore-dotted-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n-                                \"displayName\": \"Cache Schema\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-schema\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"gethdfsfileinfo-ignore-dotted-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"gethdfsfileinfo-recurse-subdirs\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"gethdfsfileinfo-recurse-subdirs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n+                                \"description\": \"All successfully generated FlowFiles are transferred to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If no objects are found, original FlowFile are transferred to this relationship\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"All failed attempts to access HDFS will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is routed to this relationship\",\n+                                \"description\": \"Original FlowFiles are transferred to this relationship\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"avro\",\n-                            \"calcite\",\n-                            \"csv\",\n-                            \"etl\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"modify\",\n-                            \"query\",\n-                            \"record\",\n-                            \"route\",\n-                            \"select\",\n-                            \"sql\",\n-                            \"text\",\n-                            \"transform\",\n-                            \"update\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n-                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSFileInfo\",\n+                        \"typeDescription\": \"Retrieves a listing of files and directories from HDFS. This processor creates a FlowFile(s) that represents the HDFS file/dir with relevant information. Main purpose of this processor to provide functionality similar to HDFS Client, i.e. count, du, ls, test, etc. Unlike ListHDFS, this processor is stateless, supports incoming connections and provides information on a dir level. \",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file/dir found on HDFS.\",\n+                                \"name\": \"hdfs.objectName\"\n                             },\n                             {\n-                                \"description\": \"The number of records selected by the query\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The path is set to the absolute path of the object's parent directory on HDFS. For example, if an object is a directory 'foo', under directory '/bar' then 'hdfs.objectName' will have value 'foo', and 'hdfs.path' will be '/bar'\",\n+                                \"name\": \"hdfs.path\"\n                             },\n                             {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"QueryRecord.Route\"\n+                                \"description\": \"The type of an object. Possible values: directory, file, link\",\n+                                \"name\": \"hdfs.type\"\n+                            },\n+                            {\n+                                \"description\": \"The user that owns the object in HDFS\",\n+                                \"name\": \"hdfs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group that owns the object in HDFS\",\n+                                \"name\": \"hdfs.group\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the object in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n+                                \"name\": \"hdfs.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"In case of files: The number of bytes in the file in HDFS.  In case of dirs: Retuns storage space consumed by directory. \",\n+                                \"name\": \"hdfs.length\"\n+                            },\n+                            {\n+                                \"description\": \"In case of type='directory' will represent total count of files under this dir. Won't be populated to other types of HDFS objects. \",\n+                                \"name\": \"hdfs.count.files\"\n+                            },\n+                            {\n+                                \"description\": \"In case of type='directory' will represent total count of directories under this dir (including itself). Won't be populated to other types of HDFS objects. \",\n+                                \"name\": \"hdfs.count.dirs\"\n+                            },\n+                            {\n+                                \"description\": \"The number of HDFS replicas for the file\",\n+                                \"name\": \"hdfs.replication\"\n+                            },\n+                            {\n+                                \"description\": \"The permissions for the object in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"hdfs.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The status contains comma separated list of file/dir paths, which couldn't be listed/accessed. Status won't be set if no errors occured.\",\n+                                \"name\": \"hdfs.status\"\n+                            },\n+                            {\n+                                \"description\": \"When destination is 'attribute', will be populated with full tree of HDFS directory in JSON format.WARNING: In case when scan finds thousands or millions of objects, having huge values in attribute could impact flow file repo and GC/heap usage. Use content destination for such cases\",\n+                                \"name\": \"hdfs.full.tree\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Evaluation Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Line-by-Line\",\n-                                        \"value\": \"Line-by-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Entire text\",\n-                                        \"value\": \"Entire text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Line-by-Line\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n-                                \"displayName\": \"Evaluation Mode\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in each iteration, based on run schedule.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Evaluation Mode\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line-by-Line Evaluation Mode\": {\n+                            \"Compression codec\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"All\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"First-Line\",\n-                                        \"value\": \"First-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Last-Line\",\n-                                        \"value\": \"Last-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-First-Line\",\n-                                        \"value\": \"Except-First-Line\"\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-Last-Line\",\n-                                        \"value\": \"Except-Last-Line\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"All\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n-                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line-by-Line Evaluation Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"(?s)(^.*$)\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Regex Replace\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n-                                \"displayName\": \"Search Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Replacement Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n-                                        \"displayName\": \"Prepend\",\n-                                        \"value\": \"Prepend\"\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n                                     },\n                                     {\n-                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n-                                        \"displayName\": \"Append\",\n-                                        \"value\": \"Append\"\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n-                                        \"displayName\": \"Surround\",\n-                                        \"value\": \"Surround\"\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n-                                        \"displayName\": \"Regex Replace\",\n-                                        \"value\": \"Regex Replace\"\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n                                     },\n                                     {\n-                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n-                                        \"displayName\": \"Literal Replace\",\n-                                        \"value\": \"Literal Replace\"\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     },\n                                     {\n-                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n-                                        \"displayName\": \"Always Replace\",\n-                                        \"value\": \"Always Replace\"\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n                                     },\n                                     {\n-                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n-                                        \"displayName\": \"Substitute Variables\",\n-                                        \"value\": \"Substitute Variables\"\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Regex Replace\",\n-                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n-                                \"displayName\": \"Replacement Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replacement Strategy\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Replacement Value\": {\n-                                \"defaultValue\": \"$1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Prepend\",\n-                                            \"Regex Replace\",\n-                                            \"Always Replace\",\n-                                            \"Append\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n-                                \"displayName\": \"Replacement Value\",\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Replacement Value\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Append\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Surround\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Append\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text to Append\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Prepend\": {\n-                                \"dependencies\": [\n+                            \"Filter Match Name Only\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Surround\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Prepend\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true then File Filter Regex will match on just the filename, otherwise subdirectory names will be included with filename in the regex comparison\",\n+                                \"displayName\": \"Filter Match Name Only\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Text to Prepend\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Filter Match Name Only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"Change\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"FlowFile Content\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VALUE ONLY\",\n+                                        \"value\": \"VALUE ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KEY VALUE PAIR\",\n+                                        \"value\": \"KEY VALUE PAIR\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"VALUE ONLY\",\n+                                \"description\": \"Indicate if the content is to be both the key and value of the Sequence File, or just the value.\",\n+                                \"displayName\": \"FlowFile Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"FlowFile Content\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mapping File\": {\n-                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n-                                \"displayName\": \"Mapping File\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Mapping File Refresh Interval\": {\n-                                \"defaultValue\": \"60s\",\n-                                \"description\": \"The polling interval in seconds to check for updates to the mapping file. The default is 60s.\",\n-                                \"displayName\": \"Mapping File Refresh Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File Refresh Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Matching Group\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n-                                \"displayName\": \"Matching Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Matching Group\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"\\\\S+\",\n-                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n-                                \"displayName\": \"Regular Expression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n-                                \"required\": true,\n+                                \"name\": \"IO Buffer Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"Change\",\n-                            \"Mapping\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Exceeded FlowFile Attribute Key\",\n-                                \"value\": \"The value of the attribute added to the FlowFile\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Fail on Non-numerical Overwrite\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n-                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail on Non-numerical Overwrite\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"maximum-retries\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n-                                \"displayName\": \"Maximum Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-retries\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"penalize-retries\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n-                                \"displayName\": \"Penalize Retries\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether to delete the file from HDFS after it has been successfully transferred. If true, the file will be fetched repeatedly. This is intended for testing only.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"penalize-retries\",\n+                                \"name\": \"Keep Source File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"retry-attribute\": {\n-                                \"defaultValue\": \"flowfile.retries\",\n-                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n-                                \"displayName\": \"Retry Attribute\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"retry-attribute\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"reuse-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n-                                        \"displayName\": \"Fail on Reuse\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Warn on Reuse\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Reset Reuse\",\n-                                        \"value\": \"reset\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n-                                \"displayName\": \"Reuse Mode\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reuse-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n-                                \"name\": \"Retry Attribute\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n-                                \"name\": \"retries_exceeded\"\n-                            },\n-                            {\n-                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"tags\": [\n-                            \"FlowFile\",\n-                            \"Retry\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n-                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n-                                \"name\": \"Retry Attribute\"\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n-                                \"name\": \"Retry Attribute .uuid\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes FlowFiles whose attributes match the Attribute Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Routing Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to Property name\",\n-                                        \"value\": \"Route to Property name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if all match\",\n-                                        \"value\": \"Route to 'match' if all match\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if any matches\",\n-                                        \"value\": \"Route to 'match' if any matches\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Property name\",\n-                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n-                                \"displayName\": \"Routing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n-                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"RouteOnAttribute.Route\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"A Regular Expression\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n-                                \"displayName\": \"Content Buffer Size\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Buffer Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Requirement\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must match exactly\",\n-                                        \"value\": \"content must match exactly\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must contain match\",\n-                                        \"value\": \"content must contain match\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"content must match exactly\",\n-                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n-                                \"displayName\": \"Match Requirement\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Requirement\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"content\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"regular expression\",\n-                            \"route\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n-                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"value to match against\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the incoming text is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Grouping Regular Expression\": {\n-                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n-                                \"displayName\": \"Grouping Regular Expression\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait between performing directory listings\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Regular Expression\",\n-                                \"required\": false,\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Case\": {\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n-                                \"displayName\": \"Ignore Case\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Case\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Leading/Trailing Whitespace\": {\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n-                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n+                                \"description\": \"Indicates whether to pull files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Matching Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n-                                        \"displayName\": \"Satisfies Expression\",\n-                                        \"value\": \"Satisfies Expression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n-                                        \"displayName\": \"Starts With\",\n-                                        \"value\": \"Starts With\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n-                                        \"displayName\": \"Ends With\",\n-                                        \"value\": \"Ends With\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line contains the property value\",\n-                                        \"displayName\": \"Contains\",\n-                                        \"value\": \"Contains\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line equals the property value\",\n-                                        \"displayName\": \"Equals\",\n-                                        \"value\": \"Equals\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Matches Regular Expression\",\n-                                        \"value\": \"Matches Regular Expression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Contains Regular Expression\",\n-                                        \"value\": \"Contains Regular Expression\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n-                                \"displayName\": \"Matching Strategy\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Matching Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Routing Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to each matching Property Name\",\n-                                        \"value\": \"Route to each matching Property Name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n-                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n-                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to each matching Property Name\",\n-                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n-                                \"displayName\": \"Routing Strategy\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"All files retrieved from HDFS are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"logs\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"fetch\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"sequence file\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n-                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.GetHDFSSequenceFile\",\n+                        \"typeDescription\": \"Fetch sequence files from Hadoop Distributed File System (HDFS) into FlowFiles\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n-                                \"name\": \"RouteText.Route\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n-                                \"name\": \"RouteText.Group\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The HDFS directory from which files should be read\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"This property is ignored.  State will be stored in the LOCAL or CLUSTER scope by the State Manager based on NiFi's configuration.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"sample-record-interval\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"interval\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n-                                \"displayName\": \"Sampling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-probability\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n-                                \"displayName\": \"Sampling Probability\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-probability\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-random-seed\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\",\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n-                                \"displayName\": \"Random Seed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-random-seed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-range\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"range\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n-                                \"displayName\": \"Sampling Range\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-range\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-reservoir\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n-                                \"displayName\": \"Reservoir Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"sample-record-reservoir\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-sampling-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n-                                        \"displayName\": \"Interval Sampling\",\n-                                        \"value\": \"interval\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n-                                        \"displayName\": \"Range Sampling\",\n-                                        \"value\": \"range\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n-                                        \"displayName\": \"Probabilistic Sampling\",\n-                                        \"value\": \"probabilistic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n-                                        \"displayName\": \"Reservoir Sampling\",\n-                                        \"value\": \"reservoir\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"reservoir\",\n-                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n-                                \"displayName\": \"Sampling Strategy\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sample-record-sampling-strategy\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"interval\",\n-                            \"range\",\n-                            \"record\",\n-                            \"reservoir\",\n-                            \"sample\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n-                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n                             },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Attribute Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n-                                \"displayName\": \"Attribute Pattern\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Pattern\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n-                                \"displayName\": \"Dictionary File\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary Filter Pattern\": {\n-                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n-                                \"displayName\": \"Dictionary Filter Pattern\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Filter Pattern\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Criteria\": {\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"At Least 1 Must Match\",\n-                                        \"value\": \"At Least 1 Must Match\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"All Must Match\",\n-                                        \"value\": \"All Must Match\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"At Least 1 Must Match\",\n-                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n-                                \"displayName\": \"Match Criteria\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the HDFS directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Criteria\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"find\",\n-                            \"lookup\",\n-                            \"scan\",\n-                            \"search\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n-                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Dictionary Encoding\": {\n+                            \"file-filter-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"description\": \"Filtering will be applied to the names of directories and files.  If Recurse Subdirectories is set to true, only subdirectories with a matching name will be searched for files that match the regular expression defined in File Filter.\",\n+                                        \"displayName\": \"Directories and Files\",\n+                                        \"value\": \"filter-mode-directories-and-files\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"binary\",\n-                                        \"value\": \"binary\"\n+                                        \"description\": \"Filtering will only be applied to the names of files.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files that match the regular expression defined in File Filter.\",\n+                                        \"displayName\": \"Files Only\",\n+                                        \"value\": \"filter-mode-files-only\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Filtering will be applied by evaluating the regular expression defined in File Filter against the full path of files with and without the scheme and authority.  If Recurse Subdirectories is set to true, the entire subdirectory tree will be searched for files in which the full path of the file matches the regular expression defined in File Filter.  See 'Additional Details' for more information.\",\n+                                        \"displayName\": \"Full Path\",\n+                                        \"value\": \"filter-mode-full-path\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"text\",\n-                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n-                                \"displayName\": \"Dictionary Encoding\",\n+                                \"defaultValue\": \"filter-mode-directories-and-files\",\n+                                \"description\": \"Determines how the regular expression in  File Filter will be used when retrieving listings.\",\n+                                \"displayName\": \"File Filter Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Encoding\",\n+                                \"name\": \"file-filter-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"The filename of the terms dictionary\",\n-                                \"displayName\": \"Dictionary File\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"maximum-file-age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (based on last modification date) will be ignored. Minimum value is 100ms.\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maximum-file-age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"aho-corasick\",\n-                            \"byte sequence\",\n-                            \"content\",\n-                            \"dictionary\",\n-                            \"find\",\n-                            \"scan\",\n-                            \"search\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n-                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n-                                \"name\": \"matching.term\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Segment Size\": {\n-                                \"description\": \"The maximum data size in bytes for each segment\",\n-                                \"displayName\": \"Segment Size\",\n+                            \"minimum-file-age\": {\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (based on last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Segment Size\",\n-                                \"required\": true,\n+                                \"name\": \"minimum-file-age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of HDFS files, the latest timestamp of all the files listed and the latest timestamp of all the files transferred are both stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run, without having to store all of the actual filenames/paths which could lead to performance problems. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n-                                \"name\": \"segments\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All FlowFiles are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"segment\",\n-                            \"split\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"hadoop\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n-                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                        \"typeDescription\": \"Retrieves a listing of files from HDFS. Each time a listing is performed, the files with the latest timestamp will be excluded and picked up during the next execution of the processor. This is done to ensure that we do not miss any files, or produce duplicates, in the cases where files with the same timestamp are written immediately before and after a single execution of the processor. For each file that is listed in HDFS, this processor creates a FlowFile that represents the HDFS file to be fetched in conjunction with FetchHDFS. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Unlike GetHDFS, this Processor does not delete any data from HDFS.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute. This attribute is added to maintain backward compatibility, but the fragment.identifier is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.identifier\"\n+                                \"description\": \"The name of the file that was read from HDFS.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.index is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.index\"\n+                                \"description\": \"The path is set to the absolute path of the file's directory on HDFS. For example, if the Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"./\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3\\\".\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The number of segments generated from the parent FlowFile. This attribute is added to maintain backward compatibility, but the fragment.count is preferred, as it is designed to work in conjunction with the MergeContent Processor\",\n-                                \"name\": \"segment.count\"\n+                                \"description\": \"The user that owns the file in HDFS\",\n+                                \"name\": \"hdfs.owner\"\n                             },\n                             {\n-                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The group that owns the file in HDFS\",\n+                                \"name\": \"hdfs.group\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The timestamp of when the file in HDFS was last modified, as milliseconds since midnight Jan 1, 1970 UTC\",\n+                                \"name\": \"hdfs.lastModified\"\n                             },\n                             {\n-                                \"description\": \"The number of segments generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The number of bytes in the file in HDFS\",\n+                                \"name\": \"hdfs.length\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"The number of HDFS replicas for hte file\",\n+                                \"name\": \"hdfs.replication\"\n                             },\n                             {\n-                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"The permissions for the file in HDFS. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"hdfs.permissions\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to retrieve any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"read distributed filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Byte Sequence\": {\n-                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n-                                \"displayName\": \"Byte Sequence\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Byte Sequence Format\": {\n+                            \"Conflict Resolution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n+                                        \"description\": \"Replaces the existing file if any.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Failed rename operation stops processing and routes to success.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Failing to rename a file routes to failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Hexadecimal\",\n-                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n-                                \"displayName\": \"Byte Sequence Format\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Format\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Byte Sequence Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Trailing\",\n-                                        \"value\": \"Trailing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Leading\",\n-                                        \"value\": \"Leading\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Trailing\",\n-                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n-                                \"displayName\": \"Byte Sequence Location\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"A Java Regular Expression for filtering Filenames; if a filter is supplied then only files whose names match that Regular Expression will be fetched, otherwise all files will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Location\",\n-                                \"required\": true,\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Byte Sequence\": {\n+                            \"HDFS Operation\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"move\",\n+                                        \"value\": \"move\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"copy\",\n+                                        \"value\": \"copy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n-                                \"displayName\": \"Keep Byte Sequence\",\n+                                \"defaultValue\": \"move\",\n+                                \"description\": \"The operation that will be performed on the source file\",\n+                                \"displayName\": \"HDFS Operation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Byte Sequence\",\n+                                \"name\": \"HDFS Operation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All Splits will be routed to the splits relationship\",\n-                                \"name\": \"splits\"\n-                            },\n-                            {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"binary\",\n-                            \"content\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n-                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"JsonPath Expression\": {\n-                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n-                                \"displayName\": \"JsonPath Expression\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JsonPath Expression\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n-                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Input Directory or File\": {\n+                                \"defaultValue\": \"${path}\",\n+                                \"description\": \"The HDFS directory from which files should be read, or a single file to read.\",\n+                                \"displayName\": \"Input Directory or File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Input Directory or File\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Records Per Split\": {\n-                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n-                                \"displayName\": \"Records Per Split\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"Records Per Split\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"splits\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"schema\",\n-                            \"split\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n-                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n                             },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Header Line Count\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n-                                \"displayName\": \"Header Line Count\",\n+                            \"Output Directory\": {\n+                                \"description\": \"The HDFS directory where the files will be moved to\",\n+                                \"displayName\": \"Output Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Output Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Line Marker Characters\": {\n-                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n-                                \"displayName\": \"Header Line Marker Characters\",\n+                            \"Remote Group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Marker Characters\",\n+                                \"name\": \"Remote Group\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Split Count\": {\n-                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n-                                \"displayName\": \"Line Split Count\",\n+                            \"Remote Owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Split Count\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Fragment Size\": {\n-                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n-                                \"displayName\": \"Maximum Fragment Size\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Fragment Size\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            \"Remove Trailing Newlines\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\n and \\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n-                                \"displayName\": \"Remove Trailing Newlines\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove Trailing Newlines\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n-                                \"name\": \"splits\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n                             }\n                         ],\n-                        \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n-                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n-                                \"name\": \"fragment.size\"\n-                            },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Split Depth\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n-                                \"displayName\": \"Split Depth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Depth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Files that have been successfully renamed on HDFS are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"Files that could not be renamed on HDFS are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"xml\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"move\",\n+                            \"moveHDFS\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n-                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.MoveHDFS\",\n+                        \"typeDescription\": \"Rename existing files or a directory of files (non-recursive) on Hadoop Distributed File System (HDFS).\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"30 sec\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to in HDFS or the local filesystem.\",\n+                                \"requiredPermission\": \"write distributed filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n-                                    },\n-                                    {\n-                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n-                                \"displayName\": \"State Location\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Location\",\n-                                \"required\": true,\n+                                \"name\": \"Additional Classpath Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"File to Tail\": {\n-                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n-                                \"displayName\": \"File(s) to Tail\",\n+                            \"Block Size\": {\n+                                \"description\": \"Size of each block as written to HDFS. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"Block Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"File to Tail\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Block Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Start Position\": {\n+                            \"Compression codec\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n-                                        \"displayName\": \"Beginning of Time\",\n-                                        \"value\": \"Beginning of Time\"\n+                                        \"description\": \"No compression\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n-                                        \"displayName\": \"Beginning of File\",\n-                                        \"value\": \"Beginning of File\"\n+                                        \"description\": \"Default ZLIB compression\",\n+                                        \"displayName\": \"DEFAULT\",\n+                                        \"value\": \"DEFAULT\"\n                                     },\n                                     {\n-                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n-                                        \"displayName\": \"Current Time\",\n-                                        \"value\": \"Current Time\"\n+                                        \"description\": \"BZIP compression\",\n+                                        \"displayName\": \"BZIP\",\n+                                        \"value\": \"BZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP compression\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4 compression\",\n+                                        \"displayName\": \"LZ4\",\n+                                        \"value\": \"LZ4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZO compression - it assumes LD_LIBRARY_PATH has been set and jar is available\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy compression\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Will attempt to automatically detect the compression codec.\",\n+                                        \"displayName\": \"AUTOMATIC\",\n+                                        \"value\": \"AUTOMATIC\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Beginning of File\",\n-                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n-                                \"displayName\": \"Initial Start Position\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Compression codec\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Initial Start Position\",\n+                                \"name\": \"Compression codec\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Start Pattern\": {\n-                                \"dependencies\": [\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Single file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Tailing mode\",\n-                                        \"propertyName\": \"tail-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n-                                \"displayName\": \"Line Start Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Start Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"64 KB\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Replaces the existing file if any.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Line Start Pattern\",\n-                                        \"propertyName\": \"Line Start Pattern\"\n+                                        \"description\": \"Ignores the flow file and routes it to success.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Penalizes the flow file and routes it to failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Appends to the existing file if any, creates a new file otherwise.\",\n+                                        \"displayName\": \"append\",\n+                                        \"value\": \"append\"\n                                     }\n                                 ],\n-                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Buffer Size\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Post-Rollover Tail Period\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n-                                \"displayName\": \"Post-Rollover Tail Period\",\n+                            \"Directory\": {\n+                                \"description\": \"The parent HDFS directory to which files should be written. The directory will be created if it doesn't exist.\",\n+                                \"displayName\": \"Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Post-Rollover Tail Period\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rolling Filename Pattern\": {\n-                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n-                                \"displayName\": \"Rolling Filename Pattern\",\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rolling Filename Pattern\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"pre-allocated-buffer-size\": {\n-                                \"defaultValue\": \"65536 B\",\n-                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n-                                \"displayName\": \"Pre-Allocated Buffer Size\",\n+                            \"IO Buffer Size\": {\n+                                \"description\": \"Amount of memory to use to buffer file contents during IO. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"IO Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pre-allocated-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"IO Buffer Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"reread-on-nul\": {\n+                            \"Ignore Locality\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n-                                \"displayName\": \"Reread when NUL encountered\",\n+                                \"description\": \"Directs the HDFS system to ignore locality rules so that data is distributed randomly throughout the cluster\",\n+                                \"displayName\": \"Ignore Locality\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reread-on-nul\",\n+                                \"name\": \"Ignore Locality\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tail-base-directory\": {\n-                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n-                                \"displayName\": \"Base directory\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"tail-base-directory\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"tail-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n-                                        \"displayName\": \"Single file\",\n-                                        \"value\": \"Single file\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n-                                        \"displayName\": \"Multiple files\",\n-                                        \"value\": \"Multiple files\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Single file\",\n-                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n-                                \"displayName\": \"Tailing mode\",\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tail-mode\",\n-                                \"required\": true,\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-lookup-frequency\": {\n-                                \"defaultValue\": \"10 minutes\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n-                                \"displayName\": \"Lookup frequency\",\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions umask\": {\n+                                \"description\": \"A umask represented as an octal number which determines the permissions of files written to HDFS. This overrides the Hadoop property \\\"fs.permissions.umask-mode\\\".  If this property and \\\"fs.permissions.umask-mode\\\" are undefined, the Hadoop default \\\"022\\\" will be used.  If the PutHDFS target folder has a default ACL defined, the umask property is ignored by HDFS.\",\n+                                \"displayName\": \"Permissions umask\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-lookup-frequency\",\n+                                \"name\": \"Permissions umask\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-maximum-age\": {\n-                                \"defaultValue\": \"24 hours\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n-                                \"displayName\": \"Maximum age\",\n+                            \"Remote Group\": {\n+                                \"description\": \"Changes the group of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change group\",\n+                                \"displayName\": \"Remote Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Owner\": {\n+                                \"description\": \"Changes the owner of the HDFS file to this value after it is written. This only works if NiFi is running as a user that has HDFS super user privilege to change owner\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Replication\": {\n+                                \"description\": \"Number of times that HDFS will replicate each file. This overrides the Hadoop Configuration\",\n+                                \"displayName\": \"Replication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-maximum-age\",\n+                                \"name\": \"Replication\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-recursive-lookup\": {\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"writing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The processor writes FlowFile data into a temporary file and renames it after completion. This prevents other processes from reading partially written files.\",\n+                                        \"displayName\": \"Write and rename\",\n+                                        \"value\": \"writeAndRename\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The processor writes FlowFile data directly to the destination file. In some cases this might cause reading partially written files.\",\n+                                        \"displayName\": \"Simple write\",\n+                                        \"value\": \"simpleWrite\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n-                                \"displayName\": \"Recursive lookup\",\n+                                \"defaultValue\": \"writeAndRename\",\n+                                \"description\": \"Defines the approach for writing the FlowFile data.\",\n+                                \"displayName\": \"Writing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-recursive-lookup\",\n+                                \"name\": \"writing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the file written to HDFS comes from the value of this attribute.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n                         \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n+                                \"description\": \"Files that have been successfully written to HDFS are transferred to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Files that could not be written to HDFS for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"log\",\n-                            \"source\",\n-                            \"tail\",\n-                            \"text\"\n+                            \"HCFS\",\n+                            \"HDFS\",\n+                            \"copy\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"put\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n-                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n+                        \"type\": \"org.apache.nifi.processors.hadoop.PutHDFS\",\n+                        \"typeDescription\": \"Write FlowFile data to Hadoop Distributed File System (HDFS)\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Path of the original file the flow file comes from.\",\n-                                \"name\": \"tailfile.original.path\"\n+                                \"description\": \"The name of the file written to HDFS is stored in this attribute.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The absolute path to the file on HDFS is stored in this attribute.\",\n+                                \"name\": \"absolute.hdfs.path\"\n+                            },\n+                            {\n+                                \"description\": \"The hadoop url for the file is stored in this attribute.\",\n+                                \"name\": \"hadoop.file.url\"\n+                            },\n+                            {\n+                                \"description\": \"The result(true/false) indicates if the folder is created by the processor.\",\n+                                \"name\": \"target.dir.created\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-hadoop-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These XSLT parameters are passed to the transformer\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An XSLT transform parameter name\",\n-                                \"value\": \"An XSLT transform parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"XSLT file name\": {\n-                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n-                                \"displayName\": \"XSLT file name\",\n+                            \"Additional Classpath Resources\": {\n+                                \"description\": \"A comma-separated list of paths to files and/or directories that will be added to the classpath and used for loading native libraries. When specifying a directory, all files with in the directory will be added to the classpath, but further sub-directories will not be included.\",\n+                                \"displayName\": \"Additional Classpath Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"XSLT file name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional Classpath Resources\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n-                                \"displayName\": \"Cache size\",\n+                            \"Event Types to Filter On\": {\n+                                \"defaultValue\": \"append, close, create, metadata, rename, unlink\",\n+                                \"description\": \"A comma-separated list of event types to process. Valid event types are: append, close, create, metadata, rename, and unlink. Case does not matter.\",\n+                                \"displayName\": \"Event Types to Filter On\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"Event Types to Filter On\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-ttl-after-last-access\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n-                                \"displayName\": \"Cache TTL after last access\",\n+                            \"HDFS Path to Watch\": {\n+                                \"description\": \"The HDFS path to get event notifications for. This property accepts both expression language and regular expressions. This will be evaluated during the OnScheduled phase.\",\n+                                \"displayName\": \"HDFS Path to Watch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"HDFS Path to Watch\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hadoop Configuration Resources\": {\n+                                \"description\": \"A file or comma separated list of files which contains the Hadoop file system configuration. Without this, Hadoop will search the classpath for a 'core-site.xml' and 'hdfs-site.xml' file or will revert to a default configuration. To use swebhdfs, see 'Additional Details' section of PutHDFS's documentation.\",\n+                                \"displayName\": \"Hadoop Configuration Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hadoop Configuration Resources\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"IOException Retries During Event Polling\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"According to the HDFS admin API for event polling it is good to retry at least a few times. This number defines how many times the poll will be retried if it throws an IOException.\",\n+                                \"displayName\": \"IOException Retries During Event Polling\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"name\": \"IOException Retries During Event Polling\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"indent-output\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to indent the output.\",\n-                                \"displayName\": \"Indent\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true and the final component of the path associated with a given event starts with a '.' then that event will not be processed.\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"indent-output\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"secure-processing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n-                                \"displayName\": \"Secure processing\",\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Keytab\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secure-processing\",\n+                                \"name\": \"Kerberos Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kerberos Relogin Period\": {\n+                                \"defaultValue\": \"4 hours\",\n+                                \"description\": \"Period of time which should pass before attempting a kerberos relogin.\\n\\nThis property has been deprecated, and has no effect on processing. Relogins now occur automatically.\",\n+                                \"displayName\": \"Kerberos Relogin Period\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Kerberos Relogin Period\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Poll Duration\": {\n+                                \"defaultValue\": \"1 second\",\n+                                \"description\": \"The time before the polling method returns with the next batch of events if they exist. It may exceed this amount of time by up to the time required for an RPC to the NameNode.\",\n+                                \"displayName\": \"Poll Duration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Poll Duration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"xslt-controller\": {\n-                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n-                                \"displayName\": \"XSLT Lookup\",\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"xslt-controller\",\n+                                \"name\": \"kerberos-credentials-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"xslt-controller-key\": {\n-                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n-                                \"displayName\": \"XSLT Lookup key\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"xslt-controller-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.hadoop.FetchHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.GetHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.ListHDFS\",\n+                            \"org.apache.nifi.processors.hadoop.PutHDFS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last used transaction id is stored. This is used \",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"description\": \"A flow file with updated information about a specific event will be sent to this relationship.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"transform\",\n-                            \"xml\",\n-                            \"xslt\"\n+                            \"events\",\n+                            \"filesystem\",\n+                            \"hadoop\",\n+                            \"inotify\",\n+                            \"notifications\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n-                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n-                        \"version\": \"1.22.0\"\n-                    },\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.hadoop.inotify.GetHDFSEvents\",\n+                        \"typeDescription\": \"This processor polls the notification events provided by the HdfsAdmin API. Since this uses the HdfsAdmin APIs it is required to run as an HDFS super user. Currently there are six types of events (append, close, create, metadata, rename, and unlink). Please see org.apache.hadoop.hdfs.inotify.Event documentation for full explanations of each event. This processor will poll for new events based on a defined duration. For each event received a new flow file will be created with the expected attributes and the event itself serialized to JSON and written to the flow file's content. For example, if event.type is APPEND then the content of the flow file will contain a JSON file containing the information about the append event. If successful the flow files are sent to the 'success' relationship. Be careful of where the generated flow files are stored. If the flow files are stored in one of processor's watch directories there will be a never ending flow of events. It is also important to be aware that this processor must consume all events. The filtering must happen within the processor. This is because the HDFS admin's event notifications API does not have filtering.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This is always application/json.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"This will specify the specific HDFS notification event type. Currently there are six types of events (append, close, create, metadata, rename, and unlink).\",\n+                                \"name\": \"hdfs.inotify.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The specific path that the event is tied to.\",\n+                                \"name\": \"hdfs.inotify.event.path\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dbcp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            },\n+                            {\n+                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"SENSITIVE.JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Connection URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Packaging Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"tar\",\n-                                        \"value\": \"tar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zip\",\n-                                        \"value\": \"zip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v3\",\n-                                        \"value\": \"flowfile-stream-v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v2\",\n-                                        \"value\": \"flowfile-stream-v2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-tar-v1\",\n-                                        \"value\": \"flowfile-tar-v1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The Packaging Format used to create the file\",\n-                                \"displayName\": \"Packaging Format\",\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Packaging Format\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Total Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n+                                \"description\": \"The password for the database user\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n-                                \"name\": \"failure\"\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"Unpack\",\n-                            \"archive\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"tar\",\n-                            \"un-merge\",\n-                            \"zip\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n-                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n-                                \"name\": \"mime.type\"\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n+                                \"displayName\": \"Max Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n-                                \"name\": \"file.creationTime\"\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The number of milliseconds to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.owner\"\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The group owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.group\"\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n-                                \"name\": \"file.permissions\"\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The encryption method for entries in Zip archives\",\n-                                \"name\": \"file.encryptionMethod\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"counter-name\": {\n-                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n-                                \"displayName\": \"Counter Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"counter-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n-                                \"displayName\": \"Delta\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"delta\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The name of the counter to update/get.\",\n-                                \"name\": \"counterName\"\n+                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register DBCPService\",\n+                                \"value\": \"The DBCPService\"\n                             }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Counter was updated/retrieved\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"tags\": [\n-                            \"counter\",\n-                            \"debug\",\n-                            \"instrumentation\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n-                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n+                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n-                                \"displayName\": \"Database Type\",\n+                            \"hikaricp-connection-url\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-connection-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-driver-classname\": {\n+                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-driver-classname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-driver-locations\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"hikaricp-kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"hikaricp-kerberos-user-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"updatedatabasetable-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"hikaricp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-catalog-name\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-conn-lifetime\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-create-table\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n-                                        \"displayName\": \"Create If Not Exists\",\n-                                        \"value\": \"Create If Not Exists\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n-                                        \"displayName\": \"Fail If Not Exists\",\n-                                        \"value\": \"Fail If Not Exists\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Fail If Not Exists\",\n-                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n-                                \"displayName\": \"Create Table Strategy\",\n+                            \"hikaricp-max-total-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n+                                \"displayName\": \"Max Total Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-create-table\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-total-conns\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n+                            \"hikaricp-max-wait-time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-max-wait-time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-min-idle-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-min-idle-conns\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"hikaricp-username\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-validation-query\": {\n+                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"hikaricp-validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"hikari\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n+                        \"version\": \"1.22.0\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"db-record-sink-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n                                 \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-dbcp-service\",\n+                                \"name\": \"db-record-sink-dcbp-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"updatedatabasetable-primary-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Create If Not Exists\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Create Table Strategy\",\n-                                        \"propertyName\": \"updatedatabasetable-create-table\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n-                                \"displayName\": \"Primary Key Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-primary-keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-query-timeout\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n-                                \"displayName\": \"Query Timeout\",\n+                            \"db-record-sink-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-query-timeout\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"db-record-sink-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-column-identifiers\": {\n+                            \"db-record-sink-quoted-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n                                 \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n+                                \"name\": \"db-record-sink-quoted-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-table-identifiers\": {\n+                            \"db-record-sink-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n                                 \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n+                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Update Field Names\",\n-                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"updatedatabasetable-schema-name\": {\n-                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                            \"db-record-sink-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n                                 \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-schema-name\",\n+                                \"name\": \"db-record-sink-schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-table-name\": {\n-                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n+                            \"db-record-sink-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect.\",\n                                 \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-table-name\",\n+                                \"name\": \"db-record-sink-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-translate-field-names\": {\n+                            \"db-record-sink-translate-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n                                 \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-translate-field-names\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-translate-field-names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-update-field-names\": {\n+                            \"db-record-sink-unmatched-column-behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n-                                \"displayName\": \"Update Field Names\",\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-update-field-names\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"db-record-sink-unmatched-field-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"alter\",\n+                            \"connection\",\n                             \"database\",\n+                            \"db\",\n                             \"jdbc\",\n-                            \"metadata\",\n-                            \"table\",\n-                            \"update\"\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n-                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n-                                \"name\": \"output.table\"\n+                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-dropbox-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"access-token\": {\n+                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n-                                \"name\": \"output.path\"\n+                            \"app-key\": {\n+                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n-                                \"name\": \"mime.type\"\n+                            \"app-secret\": {\n+                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"app-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n+                            \"refresh-token\": {\n+                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n+                                \"displayName\": \"Refresh Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"refresh-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n-                                \"name\": \"record.count\"\n+                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"credentials\",\n+                            \"dropbox\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n+                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-workday-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-workday-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A RecordPath.\",\n-                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Web Client Service Provider\": {\n+                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Web Client Service Provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Workday Password\": {\n+                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Workday Report URL\": {\n+                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n+                                \"displayName\": \"Workday Report URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Report URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Workday Username\": {\n+                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n+                                \"name\": \"Workday Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"1.22.0\"\n                                 }\n                             },\n-                            \"replacement-value-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n-                                        \"displayName\": \"Literal Value\",\n-                                        \"value\": \"literal-value\"\n-                                    },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n-                                        \"displayName\": \"Record Path Value\",\n-                                        \"value\": \"record-path-value\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"literal-value\",\n-                                \"description\": \"Specifies how to interpret the configured replacement values\",\n-                                \"displayName\": \"Replacement Value Strategy\",\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"replacement-value-strategy\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"update\"\n+                            \"Workday\",\n+                            \"report\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n-                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n+                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n+                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.class\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-aws-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-proxy-configuration-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-proxy-configuration-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"validate-csv-delimiter\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n-                                \"displayName\": \"Delimiter character\",\n+                            \"proxy-server-host\": {\n+                                \"description\": \"Proxy server hostname or ip-address.\",\n+                                \"displayName\": \"Proxy Server Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-delimiter\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-server-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-eol\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n-                                \"displayName\": \"End of line symbols\",\n+                            \"proxy-server-port\": {\n+                                \"description\": \"Proxy server port number.\",\n+                                \"displayName\": \"Proxy Server Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-eol\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-server-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-header\": {\n+                            \"proxy-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n-                                \"displayName\": \"Header\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type.\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-header\",\n+                                \"name\": \"proxy-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-quote\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n-                                \"displayName\": \"Quote character\",\n+                            \"proxy-user-name\": {\n+                                \"description\": \"The name of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-quote\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-user-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-schema\": {\n-                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n-                                \"displayName\": \"Schema\",\n+                            \"proxy-user-password\": {\n+                                \"description\": \"The password of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-schema\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"validate-csv-strategy\": {\n+                            \"socks-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n-                                        \"displayName\": \"Line by line validation\",\n-                                        \"value\": \"Line by line validation\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS4\",\n+                                        \"value\": \"SOCKS4\"\n                                     },\n                                     {\n-                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n-                                        \"displayName\": \"FlowFile validation\",\n-                                        \"value\": \"FlowFile validation\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS5\",\n+                                        \"value\": \"SOCKS5\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FlowFile validation\",\n-                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n-                                \"displayName\": \"Validation strategy\",\n+                                \"defaultValue\": \"SOCKS5\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SOCKS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Proxy Type\",\n+                                        \"propertyName\": \"proxy-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"SOCKS Protocol Version\",\n+                                \"displayName\": \"SOCKS Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-strategy\",\n+                                \"name\": \"socks-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n                         \"tags\": [\n-                            \"csv\",\n-                            \"schema\",\n-                            \"validation\"\n+                            \"Proxy\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n-                                \"name\": \"count.valid.lines\"\n-                            },\n-                            {\n-                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n-                                \"name\": \"count.invalid.lines\"\n-                            },\n+                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n+                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-registry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"If line by line validation, total number of lines in the source data\",\n-                                \"name\": \"count.total.lines\"\n-                            },\n+                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Schema name\",\n+                                \"value\": \"Schema Content\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"avro-reg-validated-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n+                                \"displayName\": \"Validate Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"avro-reg-validated-field-names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n-                                \"name\": \"validation.error.message\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"1.22.0\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ambari-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-ambari-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"deprecated\": true,\n+                        \"deprecationReason\": \"This reporting task is deprecated and will be removed in NiFi 2.x.\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"JSON Schema\": {\n-                                \"description\": \"The content of a JSON Schema\",\n-                                \"displayName\": \"JSON Schema\",\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Ambari\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Application ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics sent to Ambari\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Metrics Collector URL\": {\n+                                \"defaultValue\": \"http://localhost:6188/ws/v1/timeline/metrics\",\n+                                \"description\": \"The URL of the Ambari Metrics Collector Service\",\n+                                \"displayName\": \"Metrics Collector URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Metrics Collector URL\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Process Group ID\": {\n+                                \"description\": \"If specified, the reporting task will send metrics about this process group only. If not, the root process group is used and global metrics are sent.\",\n+                                \"displayName\": \"Process Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Process Group ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ambari\",\n+                            \"metrics\",\n+                            \"reporting\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.ambari.AmbariReportingTask\",\n+                        \"typeDescription\": \"Publishes metrics from NiFi to Ambari Metrics Service (AMS). Due to how the Ambari Metrics Service works, this reporting task should be scheduled to run every 60 seconds. Each iteration it will send the metrics from the previous iteration, and calculate the current metrics to be sent on next iteration. Scheduling this reporting task at a frequency other than 60 seconds may produce unexpected results.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ssl-context-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-ssl-context-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Keystore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Keystore\",\n+                                \"displayName\": \"Keystore Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keystore Filename\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"TEXT\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Version\": {\n+                            \"Keystore Password\": {\n+                                \"description\": \"The password for the Keystore\",\n+                                \"displayName\": \"Keystore Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Keystore Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Draft Version 4\",\n-                                        \"displayName\": \"Draft 4\",\n-                                        \"value\": \"DRAFT_4\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 6\",\n-                                        \"displayName\": \"Draft 6\",\n-                                        \"value\": \"DRAFT_6\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Type of the Keystore\",\n+                                \"displayName\": \"Keystore Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keystore Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Negotiate latest protocol version based on platform supported versions\",\n+                                        \"displayName\": \"TLS\",\n+                                        \"value\": \"TLS\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\n+                                        \"description\": \"Require TLSv1.3 protocol version\",\n+                                        \"displayName\": \"TLSv1.3\",\n+                                        \"value\": \"TLSv1.3\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"description\": \"Require TLSv1.2 protocol version\",\n+                                        \"displayName\": \"TLSv1.2\",\n+                                        \"value\": \"TLSv1.2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"Schema Version\",\n+                                \"defaultValue\": \"TLS\",\n+                                \"description\": \"TLS Protocol Version for encrypted connections. Supported versions depend on the specific version of Java used.\",\n+                                \"displayName\": \"TLS Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Version\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Protocol\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Truststore Filename\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Truststore Password\": {\n+                                \"description\": \"The password for the Truststore\",\n+                                \"displayName\": \"Truststore Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Truststore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Truststore Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Type of the Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Truststore Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"key-password\": {\n+                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                \"version\": \"1.22.0\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"1.22.0\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"JSON\",\n-                            \"schema\",\n-                            \"validation\"\n+                            \"certificate\",\n+                            \"jks\",\n+                            \"keystore\",\n+                            \"p12\",\n+                            \"pkcs\",\n+                            \"pkcs12\",\n+                            \"secure\",\n+                            \"ssl\",\n+                            \"tls\",\n+                            \"truststore\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"json.validation.errors\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.ssl.StandardRestrictedSSLContextService\",\n+                        \"typeDescription\": \"Restricted implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application, but only allows a restricted set of TLS/SSL protocols to be chosen (no SSL protocols are supported). The set of protocols selectable will evolve over time as new protocols emerge and older protocols are deprecated. This service is recommended over StandardSSLContextService if a component doesn't expect to communicate with legacy systems since it is unlikely that legacy systems will support these protocols.\",\n+                        \"version\": \"1.22.0\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-ssl-context-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"allow-extra-fields\": {\n+                            \"Keystore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Keystore\",\n+                                \"displayName\": \"Keystore Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Keystore Filename\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Keystore Password\": {\n+                                \"description\": \"The password for the Keystore\",\n+                                \"displayName\": \"Keystore Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Keystore Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n-                                \"displayName\": \"Allow Extra Fields\",\n+                                \"description\": \"The Type of the Keystore\",\n+                                \"displayName\": \"Keystore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-extra-fields\",\n-                                \"required\": true,\n+                                \"name\": \"Keystore Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"coerce-types\": {\n+                            \"SSL Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Negotiate latest SSL or TLS protocol version based on platform supported versions\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Negotiate latest TLS protocol version based on platform supported versions\",\n+                                        \"displayName\": \"TLS\",\n+                                        \"value\": \"TLS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.3 protocol version\",\n+                                        \"displayName\": \"TLSv1.3\",\n+                                        \"value\": \"TLSv1.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.2 protocol version\",\n+                                        \"displayName\": \"TLSv1.2\",\n+                                        \"value\": \"TLSv1.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1.1 protocol version\",\n+                                        \"displayName\": \"TLSv1.1\",\n+                                        \"value\": \"TLSv1.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Require TLSv1 protocol version\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n-                                \"displayName\": \"Force Types From Reader's Schema\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"coerce-types\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"invalid-record-writer\": {\n-                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n-                                \"displayName\": \"Record Writer for Invalid Records\",\n+                                \"defaultValue\": \"TLS\",\n+                                \"description\": \"SSL or TLS Protocol Version for encrypted connections. Supported versions include insecure legacy options and depend on the specific version of Java used.\",\n+                                \"displayName\": \"TLS Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"invalid-record-writer\",\n+                                \"name\": \"SSL Protocol\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"maximum-validation-details-length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n-                                \"displayName\": \"Maximum Validation Details Length\",\n+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"maximum-validation-details-length\",\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Truststore Filename\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Truststore Password\": {\n+                                \"description\": \"The password for the Truststore\",\n+                                \"displayName\": \"Truststore Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"name\": \"Truststore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Truststore Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n-                                        \"displayName\": \"Use Reader's Schema\",\n-                                        \"value\": \"reader-schema\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BCFKS\",\n+                                        \"value\": \"BCFKS\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n-                                        \"displayName\": \"Use Schema Name Property\",\n-                                        \"value\": \"schema-name-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PKCS12\",\n+                                        \"value\": \"PKCS12\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n-                                        \"displayName\": \"Use Schema Text Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JKS\",\n+                                        \"value\": \"JKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"reader-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"description\": \"The Type of the Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"name\": \"Truststore Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"key-password\": {\n+                                \"description\": \"The password for the key. If this is not specified, but the Keystore Filename, Password, and Type are specified, then the Keystore Password will be assumed to be the same as the Key Password.\",\n+                                \"displayName\": \"Key Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"key-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"1.22.0\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"certificate\",\n+                            \"jks\",\n+                            \"keystore\",\n+                            \"p12\",\n+                            \"pkcs\",\n+                            \"pkcs12\",\n+                            \"secure\",\n+                            \"ssl\",\n+                            \"tls\",\n+                            \"truststore\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.ssl.StandardSSLContextService\",\n+                        \"typeDescription\": \"Standard implementation of the SSLContextService. Provides the ability to configure keystore and/or truststore properties once and reuse that configuration throughout the application. This service can be used to communicate with both legacy and modern systems. If you only need to communicate with non-legacy systems, then the StandardRestrictedSSLContextService is recommended as it only allows a specific set of SSL protocols to be chosen.\",\n+                        \"version\": \"1.22.0\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jslt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"71e3ea9\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"jslt-transform-cache-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jslt-transform-cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"strict-type-checking\": {\n+                            \"jslt-transform-pretty_print\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n-                                \"displayName\": \"Strict Type Checking\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"strict-type-checking\",\n+                                \"name\": \"jslt-transform-pretty_print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validation-details-attribute-name\": {\n-                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n-                                \"displayName\": \"Validation Details Attribute Name\",\n+                            \"jslt-transform-transformation\": {\n+                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n+                                \"displayName\": \"JSLT Transformation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"validation-details-attribute-name\",\n-                                \"required\": false,\n+                                \"name\": \"jslt-transform-transformation\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"record\",\n-                            \"schema\",\n-                            \"validate\"\n+                            \"jslt\",\n+                            \"json\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n-                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n+                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n+                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Always set to application/json\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n-                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-compress-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-compress-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema File\": {\n-                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n-                                \"displayName\": \"Schema File\",\n+                            \"Input Compression Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n+                                \"displayName\": \"Input Compression Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"Schema File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Compression Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"XML Source Attribute\": {\n-                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n-                                \"displayName\": \"XML Source Attribute\",\n+                            \"Output Compression Level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n+                                        \"propertyName\": \"Output Compression Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Output Compression Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n-                                \"name\": \"XML Source Attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Compression Level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Compression Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Hadoop\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n+                                \"displayName\": \"Output Compression Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Compression Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output Filename Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n+                                        \"displayName\": \"Original\",\n+                                        \"value\": \"ORIGINAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n+                                        \"displayName\": \"Updated\",\n+                                        \"value\": \"UPDATED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UPDATED\",\n+                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n+                                \"displayName\": \"Output Filename Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Filename Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n-                                \"name\": \"valid\"\n+                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n+                        \"supportsEventDriven\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"schema\",\n-                            \"validation\",\n-                            \"xml\",\n-                            \"xsd\"\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"recompress\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n-                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n+                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n+                        \"typeDescription\": \"Decompresses the contents of FlowFiles using a user-specified compression algorithm and recompresses the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n                         \"version\": \"1.22.0\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"validatexml.invalid.error\"\n+                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-flow-registry-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"EVENT_DRIVEN\": 0,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"attribute-copy-mode\": {\n+                            \"Cluster Max Redirects\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n+                                \"displayName\": \"Cluster Max Redirects\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cluster Max Redirects\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communication Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n+                                \"displayName\": \"Communication Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communication Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection String\": {\n+                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n+                                \"displayName\": \"Connection String\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Connection String\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Index\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n+                                \"displayName\": \"Database Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Database Index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis server. See the requirepass property in redis.conf.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Pool - Block When Exhausted\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n-                                        \"displayName\": \"Replace if present\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"keeporiginal\",\n-                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n-                                \"displayName\": \"Attribute Copy Mode\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n+                                \"displayName\": \"Pool - Block When Exhausted\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-copy-mode\",\n+                                \"name\": \"Pool - Block When Exhausted\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Pool - Max Idle\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n+                                \"displayName\": \"Pool - Max Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"name\": \"Pool - Max Idle\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                    \"version\": \"1.22.0\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"expiration-duration\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n-                                \"displayName\": \"Expiration Duration\",\n+                            \"Pool - Max Total\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n+                                \"displayName\": \"Pool - Max Total\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expiration-duration\",\n+                                \"name\": \"Pool - Max Total\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"releasable-flowfile-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n-                                \"displayName\": \"Releasable FlowFile Count\",\n+                            \"Pool - Max Wait Time\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n+                                \"displayName\": \"Pool - Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"releasable-flowfile-count\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n-                                \"displayName\": \"Release Signal Identifier\",\n+                            \"Pool - Min Evictable Idle Time\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Min Evictable Idle Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-name\": {\n-                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"Pool - Min Idle\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n+                                \"displayName\": \"Pool - Min Idle\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Min Idle\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"target-signal-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n-                                \"displayName\": \"Target Signal Count\",\n+                            \"Pool - Num Tests Per Eviction Run\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n+                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Variable Registry and FlowFile Attributes\",\n-                                \"name\": \"target-signal-count\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n-                                \"displayName\": \"Wait Buffer Count\",\n+                            \"Pool - Test On Borrow\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n+                                \"displayName\": \"Pool - Test On Borrow\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-buffer-count\",\n+                                \"name\": \"Pool - Test On Borrow\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-mode\": {\n+                            \"Pool - Test On Create\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n-                                        \"displayName\": \"Transfer to wait relationship\",\n-                                        \"value\": \"wait\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n-                                        \"displayName\": \"Keep in the upstream connection\",\n-                                        \"value\": \"keep\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"wait\",\n-                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n-                                \"displayName\": \"Wait Mode\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon creation.\",\n+                                \"displayName\": \"Pool - Test On Create\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-mode\",\n+                                \"name\": \"Pool - Test On Create\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-penalty-duration\": {\n-                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n-                                \"displayName\": \"Wait Penalty Duration\",\n+                            \"Pool - Test On Return\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n+                                \"displayName\": \"Pool - Test On Return\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-penalty-duration\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Test On Return\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Notify\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n-                                \"name\": \"expired\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n-                                \"name\": \"wait\"\n-                            },\n-                            {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\",\n-                            \"EVENT_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsEventDriven\": true,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"hold\",\n-                            \"map\",\n-                            \"release\",\n-                            \"signal\",\n-                            \"wait\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n-                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n-                        \"version\": \"1.22.0\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n-                                \"name\": \"wait.start.timestamp\"\n                             },\n-                            {\n-                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n-                                \"name\": \"wait.counter.<counterName>\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Show Deltas\": {\n+                            \"Pool - Test While Idle\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n-                                \"displayName\": \"Show Deltas\",\n+                                \"description\": \"Whether or not connections should be tested while idle.\",\n+                                \"displayName\": \"Pool - Test While Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Show Deltas\",\n+                                \"name\": \"Pool - Test While Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reporting-granularity\": {\n+                            \"Pool - Time Between Eviction Runs\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n+                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Redis Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n-                                        \"displayName\": \"Five Minutes\",\n-                                        \"value\": \"five-minutes\"\n+                                        \"description\": \"A single standalone Redis instance.\",\n+                                        \"displayName\": \"Standalone\",\n+                                        \"value\": \"Standalone\"\n                                     },\n                                     {\n-                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n-                                        \"displayName\": \"One Second\",\n-                                        \"value\": \"one-second\"\n+                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n+                                        \"displayName\": \"Sentinel\",\n+                                        \"value\": \"Sentinel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n+                                        \"displayName\": \"Cluster\",\n+                                        \"value\": \"Cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"five-minutes\",\n-                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n-                                \"displayName\": \"Reporting Granularity\",\n+                                \"defaultValue\": \"Standalone\",\n+                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n+                                \"displayName\": \"Redis Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reporting-granularity\",\n+                                \"name\": \"Redis Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"Sentinel Master\": {\n+                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n+                                \"displayName\": \"Sentinel Master\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"Sentinel Master\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-redis-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                \"version\": \"1.22.0\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"log\",\n-                            \"stats\"\n+                            \"cache\",\n+                            \"redis\"\n                         ],\n-                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n-                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n+                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n+                        \"typeDescription\": \"A service that provides connections to Redis.\",\n                         \"version\": \"1.22.0\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Directory Display Name\": {\n-                                \"defaultValue\": \"Un-Named\",\n-                                \"description\": \"The name to display for the directory in alerts.\",\n-                                \"displayName\": \"Directory Display Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Display Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory Location\": {\n-                                \"description\": \"The directory path of the partition to be monitored.\",\n-                                \"displayName\": \"Directory Location\",\n+                            \"redis-cache-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Location\",\n+                                \"name\": \"redis-cache-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Threshold\": {\n-                                \"defaultValue\": \"80%\",\n-                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n-                                \"displayName\": \"Threshold\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Threshold\",\n+                                \"name\": \"redis-connection-pool\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n                             }\n                         },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"1.22.0\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"tags\": [\n-                            \"disk\",\n-                            \"monitoring\",\n-                            \"repo\",\n-                            \"storage\",\n-                            \"warning\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\n                         ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n-                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n+                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n                         \"version\": \"1.22.0\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"1.22.0\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cdc-mysql-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-cdc-mysql-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"71e3ea9\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Memory Pool\": {\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PREFERRED\",\n+                                            \"VERIFY_IDENTITY\",\n+                                            \"REQUIRED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SSL Mode\",\n+                                        \"propertyName\": \"SSL Mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"SSL Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PS Eden Space\",\n-                                        \"value\": \"PS Eden Space\"\n+                                        \"description\": \"Connect without TLS\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PS Survivor Space\",\n-                                        \"value\": \"PS Survivor Space\"\n+                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n+                                        \"displayName\": \"PREFERRED\",\n+                                        \"value\": \"PREFERRED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PS Old Gen\",\n-                                        \"value\": \"PS Old Gen\"\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n+                                        \"displayName\": \"VERIFY_IDENTITY\",\n+                                        \"value\": \"VERIFY_IDENTITY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PS Old Gen\",\n-                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n-                                \"displayName\": \"Memory Pool\",\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n+                                \"displayName\": \"SSL Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Memory Pool\",\n+                                \"name\": \"SSL Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reporting Interval\": {\n-                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n-                                \"displayName\": \"Reporting Interval\",\n+                            \"capture-change-mysql-db-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n+                                \"displayName\": \"Database/Schema Name Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Interval\",\n+                                \"name\": \"capture-change-mysql-db-name-pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Usage Threshold\": {\n-                                \"defaultValue\": \"65%\",\n-                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n-                                \"displayName\": \"Usage Threshold\",\n+                            \"capture-change-mysql-dist-map-cache-client\": {\n+                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n+                                \"displayName\": \"Distributed Map Cache Client - unused\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Usage Threshold\",\n+                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"1.22.0\"\n+                                }\n+                            },\n+                            \"capture-change-mysql-driver-class\": {\n+                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n+                                \"description\": \"The class name of the MySQL database driver class\",\n+                                \"displayName\": \"MySQL Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-driver-class\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"garbage collection\",\n-                            \"gc\",\n-                            \"heap\",\n-                            \"jvm\",\n-                            \"memory\",\n-                            \"monitor\",\n-                            \"warning\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n-                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n-                        \"version\": \"1.22.0\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"71e3ea9\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n-                                \"displayName\": \"Hostname\",\n+                            },\n+                            \"capture-change-mysql-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n+                                \"displayName\": \"MySQL Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-driver-locations\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"DIRECTORY\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-hosts\": {\n+                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n+                                \"displayName\": \"MySQL Nodes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-include-begin-commit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include Begin/Commit Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"capture-change-mysql-include-begin-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8649\",\n-                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"capture-change-mysql-include-ddl-events\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include DDL Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"capture-change-mysql-include-ddl-events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"capture-change-mysql-init-binlog-filename\": {\n+                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-init-binlog-position\": {\n+                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog Position\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-binlog-position\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-init-gtid\": {\n+                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the Variable Registry and/or environment properties.\",\n+                                \"displayName\": \"Initial Binlog GTID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-init-seq-id\": {\n+                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n+                                \"displayName\": \"Initial Sequence ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-max-wait-time\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-max-wait-time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n+                                \"displayName\": \"Table Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-password\": {\n+                                \"description\": \"Password to access the MySQL cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"capture-change-mysql-retrieve-all-records\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n+                                \"displayName\": \"Retrieve All Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-server-id\": {\n+                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n+                                \"displayName\": \"Server ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-server-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-state-update-interval\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n+                                \"displayName\": \"State Update Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-state-update-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-use-gtid\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n+                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n+                                \"displayName\": \"Use Binlog GTID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"capture-change-mysql-use-gtid\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-username\": {\n+                                \"description\": \"Username to access the MySQL cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"capture-change-mysql-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"events-per-flowfile-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n+                                        \"displayName\": \"Max Events Per FlowFile\",\n+                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n+                                        \"displayName\": \"One Transaction Per FlowFile\",\n+                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n+                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n+                                \"displayName\": \"Event Processing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"events-per-flowfile-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"number-of-events-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MAX_EVENTS_PER_FLOWFILE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n+                                        \"propertyName\": \"events-per-flowfile-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n+                                \"displayName\": \"Events Per FlowFile\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"VARIABLE_REGISTRY\",\n+                                \"expressionLanguageScopeDescription\": \"Variable Registry Only\",\n+                                \"name\": \"number-of-events-per-flowfile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsEventDriven\": false,\n                         \"tags\": [\n-                            \"ganglia\",\n-                            \"stats\"\n+                            \"cdc\",\n+                            \"event\",\n+                            \"jdbc\",\n+                            \"mysql\",\n+                            \"sql\",\n+                            \"transaction\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n-                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n-                        \"version\": \"1.22.0\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n+                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n+                        \"version\": \"1.22.0\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n+                                \"name\": \"cdc.sequence.id\"\n+                            },\n+                            {\n+                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n+                                \"name\": \"cdc.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n-                ]\n+                ],\n+                \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"1.22.0\"\n         }\n     ],\n     \"identifier\": \"apache-nifi\",\n     \"schedulingDefaults\": {\n"}]}]}
